English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
عندما يطلب المتصفح صفحة، يقوم بإرسال معلومات محددة إلى خادم الويب، هذه المعلومات لا يمكن قراءتها مباشرة لأنها يتم نقلها كجزء من الطلب HTTP. يمكنك النظر في بروتوكول HTTP للإطلاع على معلومات إضافية.
هذه هي المعلومات الرأسية المهمة التي تأتي من الجانب المتصفح، يمكنك استخدامها في البرمجة الويب بشكل متكرر:
معلومات الرأس | وصف |
---|---|
Accept | هذه المعلومات الرأسية تحدد النوع MIME الذي يمكن معالجته من قبل المتصفح أو العميل الآخر. القيمة image/png أو image/jpeg هما القيمتين الشائعتين. |
Accept-Charset | هذه المعلومات الرأسية تحدد مجموعة الحروف التي يمكن استخدامها لعرض المعلومات. على سبيل المثال، ISO-8859-1. |
Accept-Encoding | هذه المعلومات الرأسية تحدد النوع الذي يعرفه المتصفح كيفية معالجته. القيمة gzip أو compress هما القيمتين الشائعتين. |
Accept-Language | تحدد هذه المعلومات الرأسية اللغة المفضلة للعميل، حيث سيقوم Servlet بإنتاج نتائج بلغات متعددة. على سبيل المثال، en، en-us، ru، إلخ. |
Authorization | تستخدم هذه المعلومات الرأسية لتحديد هوية العميل عند زيارة صفحة موقع مائية. |
Connection | هذه المعلومات الرأسية تشير إلى ما إذا كان يمكن للعميل التعامل مع اتصال HTTP المستمر. يسمح الاتصال المستمر للعميل أو متصفح آخر بالوصول إلى عدة ملفات من خلال طلب واحد فقط. القيمة Keep-Alive يعني أن تم استخدام الاتصال المستمر. |
Content-Length | هذه المعلومات الرأسية تنطبق فقط على طلبات POST، وتعطي حجم بيانات POST (بأوكتات). |
Cookie | هذه المعلومات الرأسية تعيد الكوكي الذي تم إرساله إلى المتصفح إلى الخادم. |
Host | هذه المعلومات الرأسية تحدد اسم النطاق ومرفق المنفذ في URL الأصلي. |
If-Modified-Since | هذه المعلومات الرأسية تعني أن المستخدم يريد صفحة الموقع فقط إذا تم تغييرها بعد تاريخ معين. إذا لم يكن هناك نتائج جديدة يمكن استخدامها، سيقوم الخادم بإرسال رمز 304، مما يعني Not Modified معلومات الرأس |
If-Unmodified-Since | هذه المعلومات الرأسية هي العكس من If-Modified-Since، وتحدد أن العمل سيتم بنجاح فقط عندما يكون المستند قبل تاريخ معين. |
Referer | هذه المعلومات الرأسية تشير إلى عنوان URL للصفحة الويب الموجهة. على سبيل المثال، إذا كنت في صفحة 1، وأنت تنقر على رابط إلى صفحة 2، عند طلب المتصفح لصفحة 2، عنوان URL لصفحة 1 سيتم تضمينه في معلومات الرأس Referer. |
User-Agent | هذه المعلومات التعريفية تتعرف على المتصفح أو العميل الآخر الذي يرسل الطلب، ويمكن رد محتوى مختلف إلى أنواع المتصفحات المختلفة. |
يمكن استخدام هذه الطرق في برنامج Servlet لقراءة الرؤوس HTTP. هذه الطرق تقرأ HttpServletRequest الشكل المتاح
الترتيب | الطريقة & الوصف |
---|---|
1 | Cookie[] getCookies() يعود مجموعة تحتوي على جميع الكوكيز المرسلة مع الطلب. |
2 | Enumeration getAttributeNames() يعود مجموعة تحتوي على أسماء السمات المتاحة للطلب. |
3 | Enumeration getHeaderNames() يعود مجموعة تحتوي على أسماء جميع الرؤوس الموجودة في الطلب. |
4 | Enumeration getParameterNames() يعود مجموعة من String تحتوي على أسماء المعلمات الموجودة في الطلب. |
5 | HttpSession getSession() يعود HttpSession الحالية المرتبطة بالطلب، أو إذا لم يكن هناك جلسة، فإنه يخلق واحدة. |
6 | HttpSession getSession(boolean create) يعود HttpSession الحالي المرتبط بالطلب، أو إذا لم يكن هناك جلسة حالية، فإنه يعود جلسة جديدة إذا كان التكوين صحيحًا. |
7 | Locale getLocale() يستخدم Accept-Language للعثور على الإعدادات الإقليمية المفضلة للعميل. |
8 | Object getAttribute(String name) يعود القيمة المحددة للسمة المسمى، وإذا لم يكن هناك سمة معينة، فإنه يعود null. |
9 | ServletInputStream getInputStream() يستخدم ServletInputStream للبحث عن جسم الطلب كبيانات ثنائية. |
10 | String getAuthType() يستخدم الاسم المحدد لحماية هوية Servlet، مثل "BASIC" أو "SSL"، وإذا لم يكن JSP محميًا، فإنه يعود null. |
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) يعود بنسق حروف لتكون قيمة المعلمة المطلوبة، أو إذا لم تكن المعلمة موجودة تعود null. |
17 | String getPathInfo() عندما يتم إرسال الطلب، يعود بأي معلومات إضافية تتعلق بالـ URL التي يرسلها العميل. |
18 | String getProtocol() يعود بالنوع والنسخة للبروتوكول الذي يتم استخدامه في الطلب. |
19 | String getQueryString() يعود بالسلسلة الناتجة من الأسئلة في URL التي تأتي بعد المسار. |
20 | String getRemoteAddr() يعود بالعنوان الآلي للشبكة (IP) للعميل الذي أرسل الطلب. |
21 | String getRemoteHost() يعود بالاسم المطلق للعميل الذي أرسل الطلب. |
22 | String getRemoteUser() إذا كان المستخدم قد تم التحقق منه، يعود بـ اسم المستخدم الذي أرسل الطلب، أو إذا لم يتم التحقق من المستخدم يعود null. |
23 | String getRequestURI() من اسم البروتوكول حتى السطر الأول من الطلب HTTP، يعود بجزء من URL للطلب. |
24 | String getRequestedSessionId() يعود بـ ID للجلسة المحددة من قبل العميل. |
25 | String getServletPath() يعود بجزء من URL للطلب الذي يتم تنفيذه في JSP. |
26 | String[] getParameterValues(String name) يعود بنسق حروف لتتكون من قيم جميع المعلمات المطلوبة، إذا لم تكن المعلمة موجودة تعود null. |
27 | boolean isSecure() يعود ببولياني يشير إلى ما إذا كان الطلب يستخدم قناة آمنة مثل HTTPS. |
28 | int getContentLength() للعودة إلى طول جسم الطلب بالحروف، ويعطي تدفق الدخول، أو إذا كان طوله غير معروف فيرجع إلى -1. |
29 | int getIntHeader(String name) للعودة إلى قيمة الرأس المحددة كقيمة عددية صحيحة. |
30 | int getServerPort() للعودة إلى منفذ المخدم الذي استلم هذا الطلب. |
31 | int getParameterMap() للفصل بين المعلمات إلى نوع Map. |
في المثال التالي، يتم استخدام getHeaderNames() لقراءة معلومات رأس HTTP. يرجع هذا الطريقة إلى سلسلة تحتوي على معلومات الرأس المتعلقة بالطلب HTTP الحالي.
بمجرد أن نحصل على سلسلة، يمكننا التدوير عبر السلسلة بشكل طبيعي، باستخدام hasMoreElements() لتحديد متى يتوقف، باستخدام nextElement() للحصول على اسم كل متغير.
// استيراد المكتبات الضرورية من java import java.io.IOException; import java.io.PrintWriter; import java.util.Enumeration; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/DisplayHeader") // توسيع كلاس HttpServlet public class DisplayHeader extends HttpServlet { // معالجة طلبات طريقة GET public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // تعيين نوع المحتوى الإجابي response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); String title = "HTTP Header Request Example - Basic Tutorial Website Example"; String docType = "<!DOCTYPE html> \n" out.println(docType + "<html>\n"+ "<head><meta charset=\"utf-8\"><title>" + title + "</title></head>\n"+ "<body bgcolor=\"#f0f0f0\">\n"+ "<h1 align=\"center\">" + title + "</h1>\n"+ "<table width=\"100%\" border=\"1\" align=\"center\">\n"+ "<tr bgcolor=\"#949494\">\n"+ "<th>اسم الرأس</th><th>قيمة الرأس</th>\n"+ "</tr>\n"); Enumeration 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"); } out.println("</table>\n</body></html>"); } // معالجة طلب طريقة POST public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
عينة الاختبار أعلاه هي في مشروع TomcatTest، وتكون تكوين web.xml المقابل لهذا هو:
<?xml version="1.0" encoding="UTF-8"?> <web-app> <servlet> <!-- اسم الكائن --> <servlet-name>DisplayHeader</servlet-name> <!-- المجموعة الموجودة فيها --> <servlet-class>com.w3codebox.test.DisplayHeader</servlet-class> </servlet> <servlet-mapping> <servlet-name>DisplayHeader</servlet-name> <!-- عنوان الوجهة --> <url-pattern>/TomcatTest/DisplayHeader</url-pattern> </servlet-mapping> </web-app>
الآن، دعونا نطلق Servlet أعلاه، ونستخدم http://localhost:8080/TomcatTest/DisplayHeader سيكون هناك النتيجة التالية: