عندما يطلب المتصفح صفحة ويب، فإنه يرسل سلسلة من المعلومات إلى خادم الويب والتي لا يمكن قراءتها مباشرة لأنه يتم إرسال المعلومات كجزء من رؤوس HTTP. يمكنك التحقق من بروتوكول HTTP لمزيد من المعلومات.
يسرد الجدول التالي بعض المحتويات المهمة لرأس المعلومات من جانب المتصفح. وسترى هذه المعلومات غالبًا في برمجة الشبكة المستقبلية:
معلومة | يصف |
---|---|
يقبل | يحدد أنواع MIME التي يمكن للمتصفح أو العميل الآخر التعامل معها. عادةً ما تكون قيمتها هي image/png أو image/jpeg |
قبول-محارف | يحدد مجموعة الأحرف التي سيستخدمها المتصفح. مثل ISO-8859-1 |
قبول الترميز | تحديد نوع الترميز. عادة ما تكون قيمته gzip أو ضغط |
قبول اللغة | حدد اللغة المفضلة للعميل، سيعطي servlet الأولوية لإرجاع مجموعة النتائج باللغة الحالية، إذا كان servlet يدعم هذه اللغة. مثل en وen-us وru وما إلى ذلك. |
إذن | تحديد مستخدمين مختلفين عند الوصول إلى صفحات الويب المحمية بكلمة مرور |
اتصال | يشير إلى ما إذا كان العميل يمكنه التعامل مع اتصالات HTTP المستمرة. تسمح الاتصالات المستمرة للعميل أو المتصفح بجلب ملفات متعددة في طلب واحد. Keep-Alive يعني تمكين الاتصالات المستمرة |
طول المحتوى | ينطبق على طلبات POST فقط، مع الإشارة إلى عدد بايتات بيانات POST |
ملفات تعريف الارتباط | إرجاع ملفات تعريف الارتباط التي تم إرسالها مسبقًا إلى المتصفح إلى الخادم |
يستضيف | أشر إلى اسم المضيف ورقم المنفذ في عنوان URL الأصلي |
إذا تم تعديله منذ ذلك الحين | يشير إلى أن العميل يحتاج فقط إلى صفحة الويب هذه إذا تم تعديلها في التاريخ المحدد. يرسل الخادم رمز 304 إلى العميل، للإشارة إلى عدم وجود موارد محدثة. |
إذا-غير معدلة-منذ ذلك الحين | على عكس If-Modified-Since، لن تنجح العملية إلا إذا لم يتم تعديل المستند منذ التاريخ المحدد |
المرجع | يحدد عنوان URL للصفحة المشار إليها. على سبيل المثال، إذا كنت في الصفحة 1 ثم قمت بالنقر فوق رابط إلى الصفحة 2، فسيتم تضمين عنوان URL للصفحة 1 في رأس طلب المتصفح للصفحة 2. |
وكيل المستخدم | يستخدم للتمييز بين الطلبات المرسلة من قبل متصفحات أو عملاء مختلفين وإرجاع محتوى مختلف إلى أنواع مختلفة من المتصفحات |
كائن الطلب هو مثيل للفئة javax.servlet.http.HttpServletRequest. عندما يطلب العميل صفحة ما، يقوم محرك JSP بإنشاء كائن جديد لتمثيل الطلب.
يوفر كائن الطلب سلسلة من الأساليب للحصول على رؤوس معلومات HTTP، بما في ذلك بيانات النموذج وملفات تعريف الارتباط وطرق HTTP وما إلى ذلك.
بعد ذلك، سنقدم بعض الطرق الشائعة الاستخدام في برمجة JSP للحصول على رؤوس معلومات HTTP. يرجى الاطلاع على الجدول أدناه للحصول على التفاصيل:
رقم سري | الطريقة والوصف |
---|---|
1 | يقوم ملف تعريف الارتباط[] getCookies() بإرجاع مجموعة من كافة ملفات تعريف الارتباط الموجودة على العميل |
2 | يقوم التعداد getAttributeNames() بإرجاع مجموعة من كافة أسماء السمات لكائن الطلب |
3 | يقوم التعداد getHeaderNames() بإرجاع مجموعة من أسماء جميع رؤوس HTTP |
4 | يقوم التعداد getParameterNames() بإرجاع مجموعة من كافة المعلمات في الطلب |
5 | يقوم HttpSession getSession() بإرجاع كائن الجلسة المطابق للطلب، وإذا لم يكن الأمر كذلك، فقم بإنشاء واحد. |
6 | يقوم HttpSession getSession(boolean create) بإرجاع كائن الجلسة المطابق للطلب. إذا لم يكن هناك شيء وكانت المعلمة التي تم إنشاؤها صحيحة، فسيتم إرجاع كائن جلسة جديد. |
7 | تقوم لغة getLocale() بإرجاع كائن اللغة للصفحة الحالية، والذي يمكن تعيينه استجابةً لذلك |
8 | يقوم Object getAttribute(String name) بإرجاع قيمة السمة المسماة name، أو فارغة إذا لم تكن موجودة. |
9 | يقوم ServletInputStream getInputStream() بإرجاع دفق الإدخال المطلوب |
10 | تقوم String getAuthType() بإرجاع اسم نظام المصادقة المستخدم لحماية servlet، مثل "BASIC" أو "SSL" أو null إذا لم يقم JSP بتعيين تدابير الحماية |
11 | تقوم String getCharacterEncoding() بإرجاع اسم مجموعة ترميز الأحرف للطلب |
12 | تقوم String getContentType() بإرجاع نوع MIME لنص الطلب، أو يكون فارغًا إذا كان غير معروف. |
13 | تقوم String getContextPath() بإرجاع مسار السياق المحدد في URI للطلب |
14 | تقوم String getHeader(String name) بإرجاع رأس المعلومات المحدد بالاسم |
15 | تقوم String getMethod() بإرجاع طريقة HTTP في هذا الطلب، مثل GET أو POST أو PUT |
16 | تقوم String getParameter(String name) بإرجاع المعلمة المحددة بالاسم في هذا الطلب، أو فارغة إذا لم تكن موجودة. |
17 | تقوم String getPathInfo() بإرجاع أي مسارات إضافية مرتبطة بعنوان URL للطلب هذا |
18 | تقوم String getProtocol() بإرجاع اسم البروتوكول والإصدار المستخدم بواسطة هذا الطلب |
19 | تقوم String getQueryString() بإرجاع سلسلة الاستعلام الموجودة في عنوان URL للطلب هذا |
20 | تقوم String getRemoteAddr() بإرجاع عنوان IP الخاص بالعميل |
واحد وعشرون | تقوم String getRemoteHost() بإرجاع الاسم الكامل للعميل |
إثنان وعشرون | تقوم String getRemoteUser() بإرجاع المستخدم الذي تمت مصادقته من قبل العميل من خلال تسجيل الدخول، أو فارغة إذا لم تتم مصادقة المستخدم. |
ثلاثة وعشرين | تقوم String getRequestURI() بإرجاع URI للطلب |
أربعة وعشرون | تقوم String getRequestedSessionId() بإرجاع معرف الجلسة المحدد حسب الطلب |
25 | تقوم String getServletPath() بإرجاع مسار servlet المطلوب |
26 | تُرجع String[] getParameterValues(String name) جميع قيم المعلمة بالاسم المحدد، أو فارغة إذا لم تكن موجودة. |
27 | تقوم القيمة boolean isSecure() بإرجاع ما إذا كان الطلب يستخدم قناة مشفرة، مثل HTTPS |
28 | int getContentLength() يُرجع عدد البايتات الموجودة في نص الطلب إذا كان غير معروف، فإنه يُرجع -1 |
29 | int getIntHeader(String name) يُرجع قيمة رأس الطلب بالاسم المحدد |
30 | int getServerPort() يُرجع رقم منفذ الخادم |
في هذا المثال، سنستخدم طريقة getHeaderNames() لفئة HttpServletRequest لقراءة رؤوس HTTP. تقوم هذه الطريقة بإرجاع معلومات الرأس لطلب HTTP الحالي في شكل تعداد.
بعد الحصول على كائن التعداد، استخدم الطريقة القياسية لاجتياز كائن التعداد، باستخدام طريقة hasMoreElements() لتحديد متى تتوقف، وطريقة nextElement() للحصول على اسم كل معلمة.
<%@ page import="java.io.*,java.util.*" %><html><head><title>مثال لطلب رأس HTTP</title></head><body><center><h2 >مثال لطلب رأس HTTP</h2><table align="center"><tr bgcolor="#949494"><th>اسم الرأس</th><th>قيمة (قيم) الرأس</th></tr ><% التعداد headerNames = request.getHeaderNames(); while(headerNames.hasMoreElements()) { String paramName = (String)headerNames.nextElement(); out.print("<tr><td>" + paramName + "</td> n"); String paramValue = request.getHeader(paramName); out.println("<td> " + paramValue + "</td></tr>n"); }%></table></center></body></html>
قم بالوصول إلى main.jsp، وستحصل على النتائج التالية:
اسم الرأس | قيمة (قيم) الرأس |
---|---|
يقبل | */* |
قبول اللغة | en-us |
وكيل المستخدم | Mozilla/4.0 (متوافق؛ MSIE 7.0؛ Windows NT 5.1؛ Trident/4.0؛ InfoPath.2؛ MS-RTC LM 8) |
قبول الترميز | gzip، انكماش |
يستضيف | المضيف المحلي: 8080 |
اتصال | ابق على قيد الحياة |
التحكم في ذاكرة التخزين المؤقت | لا ذاكرة التخزين المؤقت |
يمكنك تجربة طرق أخرى لفئة HttpServletRequest في الكود أعلاه.