ولادة ملفات تعريف الارتباط
نظرًا لأن بروتوكول HTTP عديمي الجنسية ، يجب أن تكون الخدمات من جانب الخادم مثيرة للدولة. كان الغرض الأصلي من ولادة ملفات تعريف الارتباط هو تخزين معلومات الحالة في الويب لسهولة الاستخدام على جانب الخادم. على سبيل المثال ، حدد ما إذا كان المستخدم يزور موقع الويب لأول مرة. أحدث المواصفات هي RFC 6265 ، وهي مواصفات تنفذها خوادم المتصفح.
تنقسم معالجة ملفات تعريف الارتباط إلى:
يرسل الخادم ملفات تعريف الارتباط مثل العميل
المتصفح يحفظ ملفات تعريف الارتباط
بعد ذلك ، في كل مرة يتم فيها طلب طلب HTTP ، سيرسل المتصفح ملف تعريف الارتباط إلى الخادم.
إرسال وتوحل على جانب الخادم
أرسل ملفات تعريف الارتباط
يتم تنفيذ ملفات تعريف الارتباط من جانب الخادم المرسلة من العميل من خلال حزم استجابة HTTP. في مجموعات المكتوات ، يتم تعيين ملفات تعريف الارتباط التي تحتاج إلى إرسالها من قبل العميل. تنسيق ملفات تعريف الارتباط كما يلي:
set-cookie: "name = value ؛ domain = .domain.com ؛ path =/؛ expires = sat ، 11 يونيو 2016 11:29:42 gmt ؛ httponly ؛ آمن"
حيث الاسم = القيمة خيار مطلوب ، والبعض الآخر اختياري. المكونات الرئيسية لملفات تعريف الارتباط هي كما يلي:
الاسم: اسم ملف تعريف ارتباط فريد ومحدد. بشكل عام ، اسم ملف تعريف الارتباط غير حساس للحالة.
القيمة: قيمة السلسلة المخزنة في ملف تعريف الارتباط. من الأفضل ترميز عنوان URL اسم وقيمة ملف تعريف الارتباط
المجال: ملف تعريف الارتباط صالح لأي المجال. ستحتوي جميع الطلبات المرسلة إلى هذا المجال على معلومات ملفات تعريف الارتباط هذه. يمكن أن تحتوي هذه القيمة على نطاقات فرعية (مثل:
yq.aliyun.com) أو لا يمكن تضمينه (على سبيل المثال: .aliyun.com ، إنه صحيح لجميع المجالات الفرعية لـ aliyun.com).
المسار: يشير إلى المسار المتأثر بهذا ملف تعريف الارتباط. سيرسل المتصفح ملفات تعريف الارتباط بناءً على هذا التكوين ، مثل مطابقة المسار في المجال المحدد.
انتهاء الصلاحية: وقت انتهاء الصلاحية ، الطابع الزمني الذي يشير إلى متى يجب حذف ملف تعريف الارتباط (أي متى يجب إيقاف ملف تعريف الارتباط للإرسال إلى الخادم). إذا لم تقم بتعيين هذا الطابع الزمني ، فسيقوم المتصفح بحذف جميع ملفات تعريف الارتباط عند إغلاق الصفحة ؛ ومع ذلك ، يمكنك أيضًا تعيين وقت الحذف بنفسك. هذه القيمة في تنسيق وقت GMT. إذا كان وقت العميل والخادم غير متناسقين ، فستكون هناك انحرافات عند استخدام انتهاء الصلاحية.
Max-Eag: يتم استخدام نفس الوظيفة التي تنتهي صلاحيتها ، لإخبار المتصفح كم من الوقت ينتهي ملف تعريف الارتباط هذا (بالثواني) ، بدلاً من نقطة زمنية ثابتة. في ظل الظروف العادية ، فإن الحد الأقصى له أولوية أعلى من انتهاء الصلاحية.
httponly: إبلاغ المتصفح بعدم السماح لمستند البرنامج النصي بتغيير هذه القيمة ، وهذه القيمة غير مرئية أيضًا في المستند. ولكن لا يزال يتم تنفيذ ملف تعريف الارتباط هذا على طلب HTTP. لاحظ أنه على الرغم من أن هذه القيمة غير متوفرة في البرنامج النصي ، إلا أنها لا تزال موجودة في دليل تثبيت المتصفح كملف. عادة ما يتم تعيين هذا الإعداد على جانب الخادم.
تأمين: علامة الأمان ، بعد تحديدها ، لا يمكن إرسالها إلا إلى الخادم عند استخدام رابط SSL. إذا كان رابط HTTP ، فلن يتم تمرير هذه المعلومات. حتى إذا تم تعيين السمة الآمنة ، فهذا لا يعني أن الآخرين لا يمكنهم رؤية معلومات ملفات تعريف الارتباط المحفوظة محليًا على جهازك ، لذلك لا تضع معلومات مهمة في ملفات تعريف الارتباط وتعيينها مباشرة على جانب الخادم.
أمثلة على ملفات تعريف الارتباط على النحو التالي:
var http = require ('http') ؛ var fs = require ('fs') ؛ http.createserver (function (req ، res) {res.Setheader ('status' ، '200 ok') ؛ res.Setheader ('set-cookie' ، 'iSvisit = true ؛ domain.com ؛ العالم ') ؛تعيين set-cookie مباشرة هو أصلي للغاية. يمكننا تغليف عملية إعداد ملفات تعريف الارتباط على النحو التالي:
var seriply = function (name ، val ، reports) {if (! name) {throw new error ("يجب أن يكون Cooleie اسم") ؛ } var enc = EncodeUricomponent ؛ var parts = [] ؛ val = (val! == null && val! == undefined)؟ Val.ToString (): "" ؛ خيارات = خيارات || {} ؛ parts.push (enc (name) + "=" + enc (val)) ؛ // يجب أن يكون هناك نقطتان في المجال إذا (Options.domain) {parts.push ("domain =" + options.domain) ؛ } if (Options.Path) {parts.push ("path =" + options.path) ؛ } // إذا لم تقم بتعيين انتهاء صلاحيتها ، فسيقوم متصفحات العصر الأقصى بمسح ملفات تعريف الارتباط عند إغلاق الصفحة إذا كانت (Options.expires) {parts.push ("Expires =" + Options.expires.togmtstring ()) ؛ } if (Options.Maxage && typeof Options.Maxage === "number") {parts.push ("max-mage =" + options.maxage) ؛ } if (Options.httponly) {parts.push ("httponly") ؛ } if (Options.Secure) {parts.push ("Secure") ؛ } parts.join ("؛") ؛}تجدر الإشارة إلى أنه إذا تم ضبط ملف تعريف الارتباط على وقت الماضي ، فسوف يحذف المتصفح ملف تعريف الارتباط على الفور ؛ بالإضافة إلى ذلك ، يجب أن يحتوي عنصر المجال على نقطتين ، لذلك لا يمكن ضبطه على المضيف المحلي:
شيء لم يتم توضيحه لي هنا وربطني تمامًا لفترة من الوقت هو أن أسماء النطاق يجب أن تحتوي على نقاطين على الأقل (.) ، وبالتالي فإن "المضيف المحلي" غير صالح ، وسوف يرفض المتصفح تعيين ملف تعريف الارتباط!
ملفات تعريف الارتباط التحليل من جانب الخادم
يمكن أن تضع ملفات تعريف الارتباط مجالات ومسارات مختلفة ، لذلك بالنسبة لنفس قيمة الاسم ، يمكن تكرارها تحت مسارات مختلفة في مجالات مختلفة ومسارات مختلفة. سيقوم المتصفح بفرز الطلب بالترتيب الذي يطابق عنوان URL أو عنوان الصفحة الحالي المطلوب.
لذلك عندما ينتقل ملف تعريف الارتباط إلى جانب الخادم على الجانب الحالي ، فإن قيم الأسماء المكررة متعددة ، نحتاج فقط إلى تلك التي تتطابق مع أكثر من غيرها ، أي الأول. رمز تحليل جانب الخادم كما يلي:
var parse = function (cstr) {if (! cStR) {return null ؛ } var dec = decodeuricomponent ؛ var cookies = {} ؛ var parts = cstr.split (// s*؛/s*/g) ؛ parts.foreach (function (p) {var pos = p.indexof ('=') ؛ // يجب تشفير الاسم والقيمة قبل تخزين ملف تعريف الارتباط var name = pos> -1؟ dec (p.substr (0 ، pos)): p ؛ var val = pos> -1؟ dec (p.substr (pos + 1)) ملفات تعريف الارتباط [name] = val ؛ إرجاع ملفات تعريف الارتباط ؛}وصول العميل
يدير المتصفح ملفات تعريف الارتباط التي تم تمريرها في الخلفية ويسمح للمطورين باستخدام المستند. لكن هذه الواجهة عرجاء للغاية للاستخدام. سيظهر سلوكيات مختلفة بسبب الطرق المختلفة التي يتم استخدامها.
عند استخدامه للحصول على قيم السمات ، يقوم المستند. cookie بإرجاع جميع الأوتار المتاحة على الصفحة الحالية (استنادًا إلى مجال ملفات تعريف الارتباط والمسار ووقت انتهاء الصلاحية وإعدادات الأمان). تنسيق السلسلة كما يلي:
"name1 = value1 ؛ name2 = value2 ؛ name3 = value3" ؛
عند استخدامها لتعيين القيم ، يمكن تعيين خاصية document.cookie على سلسلة ملفات تعريف الارتباط جديدة. يتم تفسير هذه السلسلة وإضافتها إلى مجموعة ملفات تعريف الارتباط الموجودة. يحب:
document.cookie = "_fa = aaafffasdsf ؛ domain = .dojotoolkit.org ؛ path =/"
Setting Document.cookie لا يتجاوز ملفات تعريف الارتباط ما لم يتم تكرار مسار مجال قيمة SET اسم ملف تعريف ارتباط موجود.
نظرًا لأنه من غير المريح للغاية قراءة ملفات تعريف الارتباط وكتابتها ، يمكننا تغليف بعض الوظائف للتعامل مع ملفات تعريف الارتباط ، بشكل أساسي لإضافة ملفات تعريف الارتباط وتعديلها وحذفها.
var cookieutils = {get: function (name) {var cookiename = EncodeUricOpmonent (name) + "=" ؛ // فقط احصل على الاسم الأكثر مطابقة ، value var cookiestart = document.cookie.indexof (cookiename) ؛ var cookievalue = null ؛ if (cookiestart> -1) {// from cookiestart var cookieend = document.cookie.indexof ('؛' ، cookiestart) ؛ // من = بعد = (cookieend> -1) {cookievalue = decodeUricomponent (document.cookie.substring (cookiestart + cookiename.length ، cookieend)) ؛ } آخر {cookievalue = decodeUricomponent (document.cookie.substring (cookiestart + cookiename.length ، document.cookie.length)) ؛ }} إرجاع cookievalue ؛ } ، set: function (name ، val ، reports) {if (name) {throw new error ("يجب أن يكون لـ Cooliie اسم") ؛ } var enc = EncodeUricomponent ؛ var parts = [] ؛ val = (val! == null && val! == undefined)؟ Val.ToString (): "" ؛ خيارات = خيارات || {} ؛ parts.push (enc (name) + "=" + enc (val)) ؛ // يجب أن يحتوي المجال على نقاطين إذا (Options.domain) {parts.push ("domain =" + options.domain) ؛ } if (Options.Path) {parts.push ("path =" + options.path) ؛ } // إذا لم تقم بإنهاء انتهاء صلاحيتها ، فسيقوم متصفح العصر القصوى بمسح ملفات تعريف الارتباط عند إغلاق الصفحة إذا (Options.expires) {parts.push ("Expires =" + Options.Path) ؛ } // إذا لم تقم بتعيين انتهاء صلاحيتها وسيقوم متصفح Max-Age بمسح ملفات تعريف الارتباط عند إغلاق الصفحة إذا كانت (Options.expires) {parts.push ("Expires =" + Options.expires.togmtstring ()) ؛ } if (Options.Maxage && typeof Options.Maxage === "number") {parts.push ("max-mage =" + options.maxage) ؛ } if (Options.httponly) {parts.push ("httponly") ؛ } if (Options.Secure) {parts.push ("Secure") ؛ } document.cookie = parts.join ("؛") ؛ } ، delete: function (name ، Options) {Options.expires = new Date (0) ؛ // set to past date this.set (name ، null ، reports) ؛ }}مزايا التخزين المؤقت
يشير المشار إليها بشكل شائع باسم ذاكرة التخزين المؤقت على الويب إلى جهاز HTTP يمكنه حفظ نسخ من طلبات HTTP الشائعة تلقائيًا. للمطورين في الواجهة الأمامية ، تلعب المتصفحات دورًا مهمًا. بالإضافة إلى ذلك ، هناك العديد من خوادم الوكيل المشتركة التي يمكن استخدامها أيضًا للتخزين المؤقت. عندما يصل طلب الويب إلى ذاكرة التخزين المؤقت ، تقوم ذاكرة التخزين المؤقت باستخراج محتوى النسخة المتماثلة من النسخة المتماثلة المحلية دون المرور عبر الخادم. هذا يجلب المزايا التالية:
التخزين المؤقت يقلل من نقل البيانات الزائدة ويحفظ حركة المرور
تخزين ذاكرة التخزين المؤقت قضايا عنق النطاق الترددي عنق النطاق الترددي. يمكن تحميل الصفحات بشكل أسرع دون المزيد من النطاق الترددي
تخفف ذاكرة التخزين المؤقت الازدحام الفوري ويقلل من متطلبات الخادم الأصلي.
تخزين ذاكرة التخزين المؤقت يقلل من تأخير المسافة لأن صفحات التحميل من أماكن أبعد ستكون أبطأ.
نوع التخزين المؤقت
يمكن تخصيص ذاكرة التخزين المؤقت لمستخدم واحد أو مشاركته من قبل عدة مستخدمين. تسمى ذاكرة التخزين المؤقت المخصصة ذاكرة التخزين المؤقت الخاصة ، ويسمى ذاكرة التخزين المؤقت المشتركة ذاكرة التخزين المؤقت العامة.
ذاكرة التخزين المؤقت الخاصة
ذاكرة التخزين المؤقت الخاصة مخصصة فقط للمستخدمين الملكية ، لذلك لا يتطلب مساحة كبيرة ورخيصة. تحتوي متصفحات الويب على ذاكرة التخزين المؤقت الخاصة المدمجة - ستقوم معظم المتصفحات بتخزين الموارد المشتركة على قرص وذاكرة الكمبيوتر الخاص بك. على سبيل المثال ، موقع تخزين ذاكرة التخزين المؤقت لمتصفح Chrome هو: C:/Users/Your_Account/AppData/Local/Google/Chrome/User Data/Default.
ذاكرة التخزين المؤقت العامة
ذاكرة التخزين المؤقت العامة هي خوادم وكيل مشتركة خاصة ، تسمى خوادم وكيل ذاكرة التخزين المؤقت أو ذاكرة التخزين المؤقت للوكالة (غرض من الوكيل العكسي). ستقبل ذاكرة التخزين المؤقت العامة الوصول من عدة مستخدمين ، بحيث يمكنها تقليل حركة المرور الزائدة عن الحاجة بشكل أفضل.
في الشكل أدناه ، سيقوم كل عميل بالوصول مرارًا وتكرارًا إلى مورد للخادم (ليس في ذاكرة التخزين المؤقت الخاصة في هذا الوقت) ، بحيث يصل إلى الخادم عدة مرات ، مما يزيد الضغط على الخادم. عند استخدام ذاكرة التخزين المؤقت العامة المشتركة ، يجب استرجاع ذاكرة التخزين المؤقت فقط من الخادم مرة واحدة ولا يتعين عليها المرور عبر الخادم في المستقبل ، مما قد يقلل بشكل كبير من الضغط على الخادم.
في الواقع ، يتم استخدام ذاكرة التخزين المؤقت العامة الهرمية عادة في التطبيقات الفعلية. تتمثل الفكرة الأساسية في استخدام ذاكرة التخزين المؤقت الصغيرة والرخيصة بالقرب من العميل ، بينما يتم اعتماد ذاكرة التخزين المؤقت أكبر وأكثر قوة تدريجياً لتحميل الموارد التي يشاركها عدة مستخدمين.
تدفق معالجة ذاكرة التخزين المؤقت
بالنسبة للمطورين الأماميين ، فإننا نتعامل بشكل أساسي مع ذاكرة التخزين المؤقت في المتصفح ، وبالتالي فإن العملية أعلاه مبسطة إلى:
تعرض الصورة التالية نتائج طلب موقع ويب لموارد مختلفة. يمكن ملاحظة أن بعض الموارد تتم قراءة مباشرة من ذاكرة التخزين المؤقت ، وبعض الموارد يتم تبجيلها مع الخادم ، ويتم إعادة تشكيل بعض الموارد من الخادم.
لاحظ أن جميع الأسئلة التي ناقشناها حول موارد ذاكرة التخزين المؤقت هي فقط للحصول على طلبات. بالنسبة للعمليات السلوكية مثل Post و Delete و Put ، لا يوجد عادة أي ذاكرة التخزين المؤقت.
حد النضارة
يحتفظ HTTP بنسخة من مورد الخادم لفترة زمنية من خلال ذاكرة التخزين المؤقت ، والتي تسمى حد النضارة. هذا يطلب نفس المورد لفترة زمنية ولن يمر عبر الخادم مرة أخرى. يمكن استخدام السيطرة على ذاكرة التخزين المؤقت وتنتهي في بروتوكول HTTP لتعيين حد النضارة. السابق هو رأس الاستجابة الجديد المضافة في http1.1 ، والأخير هو رأس الاستجابة في http1.0. كلاهما يفعل نفس الشيء ، ولكن نظرًا لأن التحكم في ذاكرة التخزين المؤقت يستخدم الوقت النسبي ، وقد تواجه انتهاء صلاحيته مشكلة في أن وقت العميل والخادم مختلفان ، فإننا نفضل التحكم في ذاكرة التخزين المؤقت.
السيطرة على ذاكرة التخزين المؤقت
دعنا نلقي نظرة على ما يمكن تعيين قيم السمة عن طريق التحكم في ذاكرة التخزين المؤقت:
الحد الأقصى (الوحدة) تحدد الحد الأقصى للوقت الصحيح لتعيين ذاكرة التخزين المؤقت ، والتي تحدد طول الوقت. عندما يرسل المتصفح طلبًا إلى الخادم ، لن يرسل المتصفح طلبًا إلى الخادم بعد الآن.
<html> <head> <meta http-equiv = "content-type" content = "text /html ؛ charset = utf-8"> <meta name = "viewport" content = "width = width ، scipatible = xpatible = x-scale = content = "ie = edge"/> <title> ذاكرة التخزين المؤقت على الويب </title> <link rel = "chanptcut icon" href = "./ stistcut.png"> <script> </script> </head> <body> <img src = "./ cache.png"> </html> var require ('fs') ؛ http.createserver (function (req ، res) {if (req.url === '/' || req.url ==== '' || req.url ==== '/vilex.html') ذاكرة التخزين المؤقت للوثيقة الرئيسية ، " Fs.ReadFile ('./ cache.png' ، function (err ، file) {res.Setheader ('cache-control' ، "max-mage =" + 5) ؛ }). الاستماع (8888)عندما يتم الوصول إلى الصفحة للمرة الثانية في غضون 5 ثوانٍ ، سيحصل المتصفح بشكل مباشر على موارد من ذاكرة التخزين المؤقت
يحدد الجمهور أنه يمكن تخزينها مؤقتًا في الاستجابة في ذاكرة التخزين المؤقت للوكالة وبالتالي يمكن مشاركتها من قبل العديد من المستخدمين. إذا لم يتم تحديد الخاص بشكل صريح ، فإنه يتخلف عن السداد للجمهور.
لا يمكن تخزين الاستجابة الخاصة إلا في ذاكرة التخزين المؤقت الخاصة ولا يمكن وضعها على ذاكرة التخزين المؤقت بالوكالة. عادة ما تحتاج الموارد الحساسة لبعض معلومات المستخدم إلى ضبطها على القطاع الخاص.
لا تعني عدم ذاكرة التخزين المؤقت أنه يجب عليك أولاً التأكيد مع الخادم ما إذا كان قد تم تغيير المورد (الاعتماد على IF-Match و ETAG) قبل تحديد ما إذا كان سيتم استخدام ذاكرة التخزين المؤقت المحلية.
إذا تم تغيير المعالجة أعلاه لـ Cache.PNG إلى ما يلي ، في كل مرة تقوم فيها بزيارة الصفحة ، يحتاج المتصفح إلى الذهاب إلى الخادم للتحقق مما إذا كان قد تم تغيير المورد.
fs.readfile ('./ cache.png' ، function (err ، file) {console.log (req.headers) ؛ console.log (req.url) if (! req.headers ['' if-not-match ']) "PNG") ؛ Res.Setheader ("Cache-Control" ، "Max-Mage ="لا يحظر أي متجر ذاكرة التخزين المؤقت على أي مورد ، مما يعني أنه في كل مرة يطلب المستخدم المورد ، سيتم إرسال الطلب إلى الخادم ، وسيتم تنزيل المورد الكامل في كل مرة. عادة ما تستخدم للموارد السرية.
فيما يتعلق باستخدام السيطرة على ذاكرة التخزين المؤقت ، انظر الصورة أدناه (من كميات كبيرة)
حد نضارة العميل
لا يمكن ضبط السيطرة على ذاكرة التخزين المؤقت فقط في رأس الاستجابة ، ولكن أيضًا في رأس الطلب. يمكن للمتصفح أن يقرر ما إذا كان سيتم قراءة الموارد من ذاكرة التخزين المؤقت عن طريق ضبط التحكم في ذاكرة التخزين المؤقت في رأس الطلب. هذا أيضًا هو السبب في أحيانًا النقر فوق زر تحديث المتصفح والدخول في شريط العناوين لرؤية نتائج مختلفة تمامًا في وحدة الشبكة
تنتهي
لا ينصح به انتهاء الصلاحية ، ويحدد تاريخ انتهاء صلاحية محدد بدلاً من عدد من الثواني. نظرًا لأن العديد من الخوادم والعملاء لا تناسق على مدار الساعة ، فمن الأفضل استخدام التحكم في ذاكرة التخزين المؤقت.
التحقق من الخادم
لا يعني المورد المخبوق في المتصفح أو ذاكرة التخزين المؤقت بالوكالة أنه يختلف فعليًا عن الموارد على الخادم الأصلي ، ولكن يعني فقط أن الوقت قد حان للتحقق. يسمى هذا الموقف إعادة تسوية الخادم.
إذا تغير المورد ، فأنت بحاجة إلى الحصول على موارد جديدة واستبدال الموارد القديمة في ذاكرة التخزين المؤقت.
إذا لم يتغير المورد ، فإن ذاكرة التخزين المؤقت تحتاج فقط إلى الحصول على رأس استجابة جديد ووقت انتهاء صلاحية جديد لتحديث وقت انتهاء صلاحية المورد في ذاكرة التخزين المؤقت.
طريقة التحقق الموصى بها لـ HTTP1.1 هي إذا لم يتم استخدام المباراة/ETAG ، ويتم استخدام IF-modified-since/last modified في http1.0.
ETAG وما إذا لم يسبق له مثيل
قم بإنشاء سلسلة تجزئة بناءً على محتوى الكيان ، وتحديد حالة المورد ، ويتم إنشاؤه بواسطة الخادم. سيقوم المتصفح بتمرير هذه السلسلة إلى الخادم للتحقق من تعديل المورد. إذا لم يتم تعديلها ، فإن العملية هي كما يلي (الصورة تأتي من مناقشة موجزة حول ذاكرة التخزين المؤقت على الويب):
في العرض التوضيحي أعلاه ، رأينا كيفية التحقق من ETAG على الخادم:
نظرًا لأن ETAG يحتوي على بنية خادم ، يجب ضمان تفرد ETAG في بيئة الكتلة
إذا تم تعديلها-وآخر المعدلة
هما رؤوس الطلب/الاستجابة المستخدمة في HTTP 1.0 للتحقق مما إذا كان المورد قد انتهى. هذان الرئسان هما التواريخ. تشبه عملية التحقق مع ETAG ، لذلك لن نقدمها بالتفصيل هنا. عند استخدام هذين الرؤساء للتحقق من تحديث المورد ، توجد المشكلات التالية:
تتم إعادة كتابة بعض موارد المستندات بشكل دوري ، لكن المحتوى الفعلي لم يتغير. في هذا الوقت ، ستظهر بيانات تعريف الملف أن تاريخ التعديل الأخير للملف يختلف عن IF-EDISED-SINES ، مما يؤدي إلى استجابات غير ضرورية.
تم تعديل بعض موارد المستندات ، لكن محتوى التعديل غير مهم ، ولا يلزم تحديث جميع ذاكرة التخزين المؤقت (مثل تعليقات التعليمات البرمجية)
فيما يتعلق بتحديث ذاكرة التخزين المؤقت ، يرجى مراجعة إجابة Zhang Yunlong هنا. لن يتم توسيع هذا المقال بالتفصيل.
الرمز التجريبي في هذه المقالة على النحو التالي:
<! doctype html> <html> <head> <meta http-equiv = "content-type" content = "text /html ؛ http-equiv = "x-ua- conmptible" content = "ie = edge"/> <title> web cache </title> <link rel = "stircut icon" href = "./ stivecut.png تتطلب ('http') ؛ var fs = require ('fs') ؛ http.createserver (function (req ، res) {if (req.url === '/' || req.url === '' console.log (req.url) === '/shortcut.png') {fs.readfile ('./ stivent.png' ، function (err ، file) {console.log (req.url) res.Setheader ('content-type' ، 'images/png') ؛ res.writeHead ('200' ، "ok") ؛ '/cache.png') {fs.readfile ('./ cache.png' ، function (err ، file) {console.log (req.headers) ؛ console.log (req.url) if (! req.headers ['if-none-match']) Res.Setheader ("المحتوى" ، "الصور/PNG" ؛ res.end () ؛ }}). الاستماع (8888)حسنًا ، تنتهي مقدمة هذه المقالة إلى ملفات تعريف الارتباط هنا ، وآمل أن يحبها الجميع.