لقد رأينا في عدة أماكن كيف يقوم ASP بإنشاء أو تعديل رؤوس HTTP التي يتم إرسالها إلى العميل استجابة لطلبات الصفحة. هناك العديد من الخصائص والأساليب في كائن الاستجابة التي يمكن أن تساعدنا في القيام بذلك. فيما يلي بعض أساليب الرأس:
· التحكم في التخزين المؤقت وانتهاء الصلاحية.
· إنشاء حالة ورؤوس HTTP مخصصة.
· تحديد نوع MIME أو نوع المحتوى.
· إضافة علامات بلدان جزر المحيط الهادئ.
سيتم فحص كل جانب من هذه الجوانب لفترة وجيزة بعد ذلك. يمكنك التحقق من الخصائص والطرق التي نتحدث عنها من خلال النقر على اسم الخاصية ذات الصلة أو اسم الطريقة في الصفحة الرئيسية لـ "كائن الاستجابة" (show_response.asp).
1. التخزين المؤقت و"انتهاء الصلاحية" لصفحات ويب ASP يمكن
لمتصفحات المستخدمين، بالإضافة إلى أي خادم وكيل بينهم وبين الخادم، تخزين HTML وصفحات الويب التي تم إنشاؤها باستخدام ASP. عندما يطلب المستخدم الصفحة لاحقًا، يرسل المتصفح طلب "آخر تعديل" إلى الخادم (باستخدام رأس HTTP_IF_MODIFIED_SINCE الذي يحتوي على تاريخ النسخة المخزنة مؤقتًا) للسؤال عما إذا تم تعديل الصفحة أم لا.
إذا لم يتم تعديله، فيجب أن يستجيب الخادم برمز الحالة والرسالة "304 غير معدل" وسيستخدم المتصفح المحتوى المخزن مؤقتًا دون تنزيل نسخة عبر الشبكة. إذا كانت هناك نسخة معدلة موجودة بالفعل، فسيتم إرسالها مع رمز الحالة والرسالة "200 OK".
1) سمة Response.CacheContol
ستؤثر العوامل الأخرى أيضًا على عملية المعالجة هذه. ومع ذلك، يمكن إيقاف أي خادم وكيل داخل مسار الشبكة الذي تستخدمه صفحة الويب (الموجود عادةً على جانب العميل) من التخزين المؤقت لصفحة الويب عن طريق تعيين خاصية Response.CacheControl إلى خاص. في ASP 3.0، هذا هو الإعداد الافتراضي لصفحات ويب ASP ولا يلزم تعيينه. ولكنه مفيد بشكل خاص عندما يتم تخصيص صفحة ويب خصيصًا للزائرين الأفراد. وهذا يمنع المستخدمين الآخرين على نفس الشبكة من الوصول إلى نفس الصفحة. عند تعيين قيمة سمة CacheControl على Public، يُسمح للخادم بتخزين صفحات الويب مؤقتًا. لاحظ أن بعض الخوادم الوكيلة قد تتصرف بشكل مختلف وتتجاهل هذا الرأس أو تتجاوزه.
في IE4، من الممكن الحصول على رسالة زائفة "انتهت صلاحية هذه الصفحة" عند توفر التخزين المؤقت للخادم الوكيل. لقد قمنا بتوفير صفحة ويب (expiretest_form.asp) يمكن اختبارها على الشبكة من خلال الخادم الوكيل الخاص بك للتحقق من تأثير هذه السمة. يمكن عرض هذه الصفحة بالنقر فوق الارتباط "Response.CacheControl" الموجود في الصفحة الرئيسية لـ "Response Object". كما هو موضح في الشكل أدناه:
عندما يتم إرسال هذه الصفحة إلى صفحة الويبexperiencetest_result.asp، يمكن تعيين خاصية Response.CacheControl، ثم يتم إدراج القيمة والوقت الذي يتم فيه تنفيذ البرنامج النصي في صفحة الويب:
<%
إذا كان Request.Form("public") = "on" فسيتم تحديد خانة الاختيار "التحكم في ذاكرة التخزين المؤقت"
Response.CacheControl = "عام"
آخر
Response.CacheControl = "خاص"
نهاية إذا
%>
<أتش تي أم أل>
...
التحكم في ذاكرة التخزين المؤقت هو: <B><% = Response.CacheControl %></B><P>
القيمة في مربع النص هي: <B><% Response.Write Request.Form("textbox") %>
<%
الاستجابة.اكتب لليمين("0" & ساعة(الآن),2) & ":" & يمين("0" & دقيقة(الآن),_
& 2) & ":" & يمين("0" & ثانيًا (الآن)، 2)
%></B>
بالنقر على "رجوع" و"إعادة توجيه" في المتصفح، يمكنك معرفة ما إذا كان سيتم تنفيذ التعليمات البرمجية تلقائيًا أم أنها تستخدم نسخة مخبأة.
2) خصائص Response.Expires وResponse.ExpiresAbsolute
الخاصيتان اللتان تتحكمان في وقت تخزين صفحات الويب المخزنة مؤقتًا هما خصائص Expires وExpriesAbsolute لكائن الاستجابة. تحدد Response.Expires طول الوقت، معبرًا عنه بالدقائق منذ الإنشاء، حيث يجب أن تظل الصفحة صالحة قبل أن يتم التخلص منها من ذاكرة التخزين المؤقت. تقوم السمة ExpiresAbsolute بتعيين تاريخ ووقت مطلق لانتهاء الصلاحية.
نحن نقدم نموذجًا لصفحة ويب باسم addheaders_form.asp لتوضيح كيفية استخدام هذه السمات. انقر فوق الارتباط الخاص بكلتا الخاصيتين في الصفحة الرئيسية لكائن الاستجابة.
في الصفحة الناتجة، يمكنك إضافة رؤوس HTTP المخصصة الخاصة بك وتعيين سمات مختلفة لرؤوس HTTP التي تؤثر على الاستجابة. عند النقر فوق الزر "إرسال محتوى الاستعلام"، تضيف الصفحة show_headers.asp الرؤوس المحددة إلى دفق البيانات التي تم إرجاعها ثم تعرض الكود المستخدم لإنجاز ذلك، مع عرض وقت التنفيذ المقابل، والذي يمكن استخدامه للتحقق مما إذا كانت الصفحة أم لا كان لا يزال يتم تنفيذ ذاكرة التخزين المؤقت مرة أخرى.
تقوم التعليمات البرمجية الموجودة في صفحة الويب show_headers.asp بإنشاء رؤوس HTTP وإضافتها، ويكون الإجراء كما يلي:
<%.
'اكتب رؤوس HTTP قبل أي مخرجات أخرى
إذا كان Request.Form("انتهاء الصلاحية") = "on" ثم _
Response.Expires = Request.Form("expires_value")
إذا كان Request.Form("expiresabs") = "on" ثم _
Response.ExpiresAbsolute = Request.Form("expiresabs_value")
إذا Request.Form("lastmod") = "on" إذن _
Response.AddHeader "آخر تعديل"، Cstr(Request.Form("lastmod_value"))
إذا كان Request.Form("pragma") = "on" ثم _
Response.AddHeader "PRAGMA"، CStr(Request.Form("pragma_value"))
إذا كان Request.Form("refresh") = "on" ثم _
Response.AddHeader "REFRESH"، CStr(Request.Form("refresh_value"))
إذا كان Request.Form("addheader") = "on" وLen(Request.Form("addheader_name")) ثم _
Response.AddHeader CStr(Request.Form(“addheader_name”)))، _
CStr(Request.Form("addheader_value"))
إذا كان Request.Form("status") = "on" ثم _
Response.Status = Request.Form("status_value")
%>
<أتش تي أم أل>
...
...إظهار الكود ووقت التنفيذ
...
أما الباقي فيظهر فقط الكود الذي تم تنفيذه ومتى تم تنفيذه. سوف يلاحظ القراء العنوان المخصص "PRAGMA" الموجود في صفحة الويب (والذي لم نناقشه حتى الآن). تستخدم بعض الخوادم الوكيلة (السابقة) هذا كإشارة إلى ما إذا كان يجب تخزين أقراص الويب مؤقتًا أم لا. الإعداد الافتراضي هو تخزين الصفحات مؤقتًا ما لم يتم استلام رأس HTTP "PRAGMA=NO-CACHE".
2. قم بإنشاء رموز الحالة ورؤوس HTTP المخصصة
يمكنك استخدام طريقة AddHeader لكائن الاستجابة الذي رأيته مسبقًا في صفحة الويب النموذجية لإنشاء رموز الحالة الخاصة بك أو الرؤوس المخصصة التي تريدها. تتطلب هذه الطريقة معلمتين: اسم رأس HTTP أو سلسلة تحتوي على قيمته أو القيمة المخصصة له. على سبيل المثال، تضيف التعليمة البرمجية التالية رأس تحديث إلى الصفحة:
Response.AddHeader "REFRESH"، "60;URL=newpath/newpage.asp"
وهذا يعادل عنصر <META> من جانب العميل:
<META HTTP- EQUIV=" REFRESH", "60;URL=newpath/newpage.asp">
بمعنى آخر، يمكنك أيضًا استخدام أسلوب AddHeader مع سمة الحالة لجعل المتصفح يقوم بتحميل صفحة جديدة:
Response.Status = "302 Object Moved "
Response.Addheader "Location"، "newpath/newpage.asp"
وهذا يعادل استخدام أسلوب Response.Redirect:
Response.Redirect "newpath/newpage.asp"
يمكن استخدام خاصية Response.Status لإرسال بعض رسائل الحالة المطلوبة، على سبيل المثال أضف الأسطر التالية:
Response.Status= "401 Unauthorized"
Response.Addheader "WWW-Authenticate"، "BASIC"
يفرض على المتصفح عرض مربع حوار اسم المستخدم/كلمة المرور ثم إرسالها مرة أخرى إلى الخادم باستخدام المصادقة الأساسية (والتي سيتم تناولها في هذه المقالة (راجع طرق التحقق لاحقًا في السلسلة).
3. نوع MIME ونوع المحتوى
عندما نريد إرسال سلسلة تم إنشاؤها ديناميكيًا إلى المتصفح، ولا يشيران مباشرة إلى نوع المحتوى عند تقديمهما إلى المتصفح، ولكنهما يوفران امتدادًا يشير إلى ما إذا كان ملف قرص، الاستجابة نوع المحتوى مفيد جدًا. ما لم ينص على خلاف ذلك، فإن كافة صفحات الويب التي تم إنشاؤها بواسطة ASP تكون افتراضيًا على "نص/نوع". معرف نوع المحتوى هو نوع MIME (يرمز MIME إلى Multi- Purpose Internet Multimedia Extension أو Multi-pupose Internet Mail Extension، وعادةً ما يعتمد ذلك على السياق).
على سبيل المثال، إذا كان التعليق التوضيحي للبيانات المرسلة إلى العميل عبارة عن صورة تم إنشاؤها عن طريق قراءة القيم الثنائية من قاعدة بيانات، فأنت بحاجة إلى إضافة رأس CONTENT-TYPE المناسب قبل إرسال أي محتوى:
Response.ContentType = "image/jpeg"
إذا تقوم بإنشاء صورة من قاعدة بيانات لملفات XML، استخدم نوع MIEM "text/xml" وإذا كنت تقوم بإنشاء ملف نصي يمكن عرضه في محرر الملفات أو تخزينه كملف قرص على العميل، فاستخدم "text" /نص".
4. إضافة علامة PICS
تقوم خاصية Respnse.Pics ببساطة بإضافة علامة PICS (النظام الأساسي لنظام محتوى الإنترنت) إلى الصفحة بنفس طريقة علامة <META> المعتادة:
QUOT = Chr(34)
StrPicsLabel = "(PICS-1.0" & QUOT & "http://www.rsac.org/atingsv01.html"_
& QUOT & “تعليق حقيقي عام” & QUOT _
& "خادم أمريكا الشمالية RSACi" & QUOT & "لـ " & QUOT _
& "http://yoursite.com" & QUOT & "على " & QUOT _
& "1999.08.01T03:04-0500" & QUOT & "r (n 0 s 0 v 2 l 3))"
Response.Pics(strPicsLabel)
يضيف هذا الرمز تسمية PICS التالية:
(PICS-1.0 "http://www.rsac.org/atingsv01.html" تعليق صحيح من الجيل الأول "RSACi"
خادم أمريكا الشمالية" لـ "http://yoursite.com" على "1999.08.01T03:04-0500"
r (n 0 s 0 v 2 l 3))
للحصول على مزيد من المعلومات حول PICS، أو لمعرفة المزيد حول طريقة تحديد محتوى الصفحة، يرجى البحث في موقع http://www.rsac.org/ .
تحديد الرؤوس في Internet Service Manager
في الجزء الأول من هذه السلسلة من المقالات، تم شرح كيفية تعيين خصائص كل موقع ويب ودليل IIS 5.0 في تطبيق إدارة خدمة الإنترنت (MMC plug-in)، والذي يحدد الاستخدام يتم إرسال موارد هذا الموقع أو الدليل إلى العميل في رؤوس HTTP لجميع الطلبات، مما يوفر بديلاً لإعداد هذه الخصائص باستخدام كود البرنامج النصي ASP في كل صفحة ويب.
انقر بزر الماوس الأيمن على موقع الويب أو الدليل وحدد "خصائص". في علامة التبويب "رؤوس HTTP" في مربع الحوار الخاص به، يمكنك تعيين الوقت النسبي أو التاريخ المطلق لفترة صلاحية محتوى الصفحة، وتحديد الرؤوس المخصصة، و إنشاء تسميات مستوى محتوى PICS، ويمكن أيضًا تحديد أنواع المحتوى من خلال تعيين نوع MIME.
يمكنك أن ترى أنه تم إنشاء رأس REFRESH HTTP مخصص وتطبيقه على جميع صفحات الويب المحملة من هذا الدليل. أي أنه يتم إعادة التحميل (التحديث) تلقائيًا كل دقيقة (مثالي لعرض أحدث النتائج من ألعاب البيسبول، ولكنه يمثل حملًا ثقيلًا جدًا على الخادم).
لإضافة تعيينات مخصصة لنوع المحتوى في مربع "MIME Map"، ما عليك سوى النقر فوق الزر "أنواع الملفات" في مربع الحوار "الخصائص" الرئيسي لإضافتها إلى القائمة.
عندما تبدأ في تجربة رؤوس HTTP، ستكتشف بسرعة أن المتصفحات ليست جميعها تتصرف بنفس الطريقة، وأن العديد من المتصفحات تستجيب لرؤوس HTTP المختلفة بطرق مختلفة، مما يجعل من الصعب للغاية في بعض الأحيان إنشاء مبدأ قابل للتطبيق بشكل عام بشكل موثوق.
2. استخدام شهادات العميل
إذا قمت بإعداد موقع ويب آمن أو موقع يشتمل على جزء آمن من محتواه، فيمكنك تثبيت شهادة خادم رقمي لمصادقة الخادم من خلال السماح للزائرين باستخدام التفاصيل المشفرة في الشهادة. مع كل طلب صفحة إلى الموقع أو الدليل، يرسل الخادم نسخة من الشهادة، والتي يمكن للمتصفح فحصها لتحديد من يتحدث إليه.
وبالمثل، يمكن أيضًا إعداد الخادم ليطلب من المستخدمين تقديم شهادة رقمية صالحة عند الدخول إلى موقع الويب. ويمكنهم الحصول على هذه الشهادة من العديد من المصادر، مثل Verisign ( http://www.verisign.com ) أو Thawte Consulting ( http://www.thawte.com ). وسيرى القارئ تفاصيل هذه العملية في الفصل 25.
تستخدم جميع هذه المواقف قيم مجموعة ClientCertificate لكائن الطلب. يتضمن رمز المثال في هذا الفصل صفحة توضح كيفية استخدام المستخدمين لبعض طرق قيم المجموعة هذه.
تسمى هذه الصفحة showcert.asp، وكل ما تفعله هو التكرار من خلال مجموعة ClientCertificate وعرض كافة القيم التي تحتوي عليها. ويمكن القيام بذلك باستخدام نفس التعليمات البرمجية البسيطة التي استخدمتها دائمًا من قبل، والفرق الوحيد هو إنشاء جدول HTML للاحتفاظ بالنتائج واقتطاعها إلى مجموعات مكونة من 60 حرفًا.
<TABEL CELLPADDING=0 تباعد الخلايا=0>
<%
لكل عنصر رئيسي في Request.ClientCertificate()
StrItemValue = Request.ClientCertificate(keyItem)
إذا كانت Len(strItemValue) > 90، فإن strItemValue = Left(strItemValue, 60) & "..etc."
الاستجابة.اكتب "<TR><TD>" & keyItem & " = " & strItemValue & "</TD></TR>"
التالي
%>
</TABLE>
استخدام إعادة توجيه شهادة العميل
بمجرد أن يُطلب من جميع زوار الموقع أو جزء من الموقع تقديم شهادة العميل الخاصة بهم، يمكن استخدام المعلومات التي تحتوي عليها لصياغة صفحات الويب التي ننشئها لهذا المستخدم. على سبيل المثال، يمكنك استخدام إدخال المؤسسة في شهادتهم لإعادة توجيههم تلقائيًا إلى جزء معين من الموقع وإعادة توجيه الزوار الآخرين إلى مكان آخر:
إذا Request.ClientCertificate("SubjectO") = "Wrox Press Inc" إذن
Response.Redirect "/wrox_staff/default.asp" 'موقع موظفي Wrox
آخر
Response.Redirect "/public/Default.asp" 'موقع عام عادي
إنهاء
وفقًا لذلك، يمكن استخدام إدخال الدولة لإعادة توجيه الزائر إلى موقع الويب المقابل:
حدد Case Request.ClientCertificate("SubjectC")
الحالة "المملكة المتحدة": Response.Redirect "http://uk_site.co.uk/"
الحالة "DE": Response.Redirect "http://de_site.co.de/"
الحالة "FR": Response.Redirect "http://fr_site.co.fr/"
'... إلخ.
حالة أخرى: Response.Redirect "http://us_site.com/"
End Select
3. قراءة وكتابة البيانات الثنائية
هناك طريقتان توفران الوصول إلى البيانات الثنائية إلى دفق بيانات HTTP المرسل من المتصفح إلى الخادم ودفق البيانات المرتجعة من الخادم إلى المتصفح. يمكن للأسلوب Request.BinaryRead الحصول على معلمة تحدد عدد البايتات المراد قراءتها، وإرجاع صفيف من نوع متغير يحتوي على البايتات التي تم الحصول عليها من مقطع POST المطلوب (مثل البيانات الموجودة في مجموعة نماذج ASP). يقرأ البرنامج التالي أول 64 بايت من البيانات:
varContent = Request.BinaryRead(64)
إذا كنت تستخدم الأسلوب BinaryRead، فلن تتمكن من الوصول إلى مجموعة Request.Form الخاصة بـ ASP في المستقبل. وبالمثل، بمجرد الرجوع إلى مجموعة Request.Form بأي شكل من الأشكال، لا يمكننا استخدام الأسلوب BinaryRead.
من الممكن أيضًا كتابة البيانات الثنائية في تدفق الاستجابة الذي تم إنشاؤه بواسطة ASP، باستخدام أسلوب BinaryWrite. تحتاج إلى تزويده بمصفوفة متغيرة من وحدات البايت التي تريد كتابتها إلى العميل:
Response.BinaryWrite(varContent)
نادرًا ما يتم استخدام هذه الأساليب إلا إذا قمت بإنشاء مصدر غير HTML من قاعدة بيانات. مثال على الاستخدام هو قراءة وحدات البايت التي تشكل الصورة من قاعدة البيانات وإرسالها إلى العميل باستخدام طريقة BinaryWrite.
4. إنشاء رسالة سجل مخصصة
إذا تم إعداد الخادم لتسجيل الطلبات إلى ملف نصي بتنسيق W3C Extended Log File، فيمكنك استخدام أسلوب Response.AppendToLog لإضافة سلسلة رسائل إلى نهاية إدخال ملف السجل. هذه الطريقة مفيدة جدًا إذا كنت تريد تخزين بعض القيم أو الرسائل لصفحة ويب معينة، أو عند حدوث موقف معين في البرنامج النصي.
على سبيل المثال، من خلال تطبيق "الأمر الثابت" على شبكة الإنترانت، يمكنك تسجيل أعداد موظفي القسم الذين تجاوزوا عددًا محددًا من الإدخالات:
...
إذا كان intItemCount> 25 ثم
Response.AppendToLog "طلب كبير من '" & strDept & Department."
نهاية إذا
...
إعداد التسجيل الموسع
لاستخدام أسلوب AppendToLog، يجب تنشيط إعداد التسجيل بتنسيق W3C Extended Log File Format. تتمثل طريقة الإعداد في الدخول إلى علامة التبويب "موقع الويب" في مربع الحوار "خصائص"، وتحديد خانة الاختيار "تمكين التسجيل"، وحدد "تنسيق ملف السجل الموسع W3C"، ثم انقر فوق الزر "خصائص"، كما هو موضح في الشكل التالي:
في مربع الحوار "خصائص التسجيل الممتد" يظهر، يمكنك تحديد الإدخالات التي تريد تضمينها في ملف السجل. تأكد من تحديد URI Stem، وإلا فسوف تفشل طريقة AppendToLog.
لقد قدمنا صفحة مثال بسيطة تحاول كتابة إدخال في ملف السجل، والذي يمكن فتحه من رابط أسلوب AppendToLog في الصفحة الرئيسية لكائن الطلب (show_request.asp). كل ما تفعله هذه الصفحة هو إنشاء سلسلة بسيطة تحتوي على التاريخ والوقت الحاليين، ثم تنفيذ طريقة AppendToLog:
strToAppend = "تم تنفيذ الصفحة في" & الآن
ملخص
Response.AppendToLog strToAppend
بدأت هذه المقالة دراسة ASP 3.0، كما رأينا أيضًا كيف يعمل ASP 3.0 مع Internet Informateion Server 5.0 لتوفير طريقة سهلة الاستخدام وفعالة لإنشاء صفحات ويب وتطبيقات ويب ديناميكية. . بالطبع، لا تزال هناك بعض الأماكن التي تحتاج إلى الدراسة. لقد تعلم هذا الفصل للتو العنصرين الأساسيين المضمنين في ASP.
الكائنان الأساسيان هما كائنات الطلب والاستجابة، والتي تسمح لنا بالوصول إلى القيم واستخدامها كجزء من جلسة العميل/الخادم، والتي تحدث عندما يطلب المستخدم صفحة أو موردًا ويقوم بتحميلها من موقع ويب، أي أن كائن الطلب يمكنه توفير الوصول إلى كل المحتوى الذي يطلبه المستخدم، بينما يسمح كائن الاستجابة بإنشاء وتعديل الاستجابة التي يرسلها الخادم.
تعرض هذه الكائنات أجزاء مختلفة من الجلسة من خلال المجموعات والخصائص، وتوفر طرقًا متعددة لاسترداد المقاطع الفردية وتعديلها. إذا كنت تعتبرها أدوات لتحليل طلب المستخدم وإنشاء استجابة بالمحتوى المناسب، فيمكن أن تساعدك على فهم ما يجري. سيساعدك أيضًا فهم كيفية تأثير الأساليب المختلفة على العميل والخادم وصفحة الويب التي يتم إنشاؤها.