1. ما هو بروتوكول HTTP
HTTP هو اختصار بروتوكول نقل النص التشعبي. إنه بروتوكول طبقة التطبيق لبروتوكول TCP/IP ، والذي يستخدم لتحديد عملية تبادل البيانات بين متصفح الويب وخادم الويب. بعد اتصال العميل بخادم الويب ، إذا كنت ترغب في الحصول على مورد ويب معين في خادم الويب ، فيجب عليك الالتزام بتنسيق اتصال معين. يتم استخدام بروتوكول HTTP لتحديد التنسيق للعميل للتواصل مع خادم الويب.
2. نسخة بروتوكول HTTP
إصدار بروتوكول HTTP: HTTP/1.0 ، HTTP/1.1
3. الفرق بين HTTP1.0 و HTTP1.1
في بروتوكول HTTP 1.0 ، بعد أن يقوم العميل بإنشاء اتصال مع خادم الويب ، يمكن الحصول على مورد ويب واحد فقط.
في بروتوكول HTTP 1.1 ، بعد أن يقوم العميل بإنشاء اتصال مع خادم الويب ، يتم الحصول على موارد ويب متعددة على اتصال واحد.
4. طلب HTTP
4.1. المحتويات المدرجة في طلبات HTTP
بعد اتصال العميل بالخادم ، يطلب مورد ويب معين من الخادم ، والذي يسمى العميل بإرسال طلب HTTP إلى الخادم.
يتضمن طلب HTTP الكامل المحتوى التالي: سطر طلب ، العديد من رؤوس الرسائل ، ومثال على محتوى الكيان:
4.2. تفاصيل طلبات HTTP - سطر الطلب
تسمى Get in the Lister the Line طريقة الطلب. تتضمن طرق الطلب: Post ، Get ، Head ، Options ، Delete ، Trace ، Put ، وتشمل تلك الشائعة الاستخدام: Get ، Post
إذا لم يكن لدى المستخدم إعدادات ، بشكل افتراضي ، يرسل المتصفح طلبات إلى الخادم. على سبيل المثال ، يتم إدخال الوصول مباشرة في المتصفح ، يتم النقر على الوصول على الارتباط التشعبي ، وما إلى ذلك ، إلخ. إذا أراد المستخدم تغيير طريقة الطلب للنشر ، فيمكنه تغيير طريقة تقديم النموذج.
ما إذا كان المنشور أو الحصول على استخدام لطلب مورد ويب من الخادم. ينعكس الفرق بين هاتين الطريقتين بشكل أساسي في نقل البيانات: إذا تم الحصول على طريقة الطلب ، فيمكن إحضار البيانات التي يتم تسليمها إلى الخادم في شكل A؟ بعد عنوان عنوان URL المطلوب ، وبيانات متعددة يتم فصلها بواسطة & ، على سبيل المثال: get /mail/1.html؟name=abc&password=xyz http/1.1
ميزات طريقة GET: المعلمات المرفقة بعنوان عنوان URL محدودة ، وعادة ما لا يمكن أن تتجاوز سعة البيانات 1K.
إذا تم نشر طريقة الطلب ، فيمكن إرسال البيانات إلى الخادم في محتوى الكيان المطلوب. خصائص طريقة البريد هي: كمية البيانات المرسلة غير محدودة.
4.3. تفاصيل طلبات HTTP - رأس الرسالة
رؤوس الرسائل الشائعة في طلبات HTTP
قبول: يخبر المتصفح الخادم من خلال هذا الرأس ، ونوع البيانات الذي يدعمه. قبول-charset: يخبر المتصفح الخادم من خلال هذا الرأس ، أي حرف يحدده. قبول الترميز: يخبر المتصفح الخادم من خلال هذا الرأس ، وتنسيق الضغط المدعوم القبول: يخبر المتصفح الخادم من خلال هذا الرأس ، ومضيفه المحلي: يخبر المتصفح الخادم من خلال هذا الرأس ، والذي يستضيف الوصول إليه. إذا تم تعديلها: يخبر المتصفح الخادم من خلال هذا الرأس ، ووقت ذاكرة التخزين المؤقت لبيانات التخزين المؤقت. المرجع: يخبر المتصفح الخادم من خلال هذا الرأس ، والصفحة التي ينطلق منها العميل. الاتصال: يخبر المتصفح الخادم من خلال هذا الرأس ، وما إذا كان سيتم فصل الرابط أو الرابط بعد اكتمال الطلب.
على سبيل المثال:
قبول: التطبيق/X-MS-Application ، Image/JPEG ، Application/XAML+XML ، Image/GIF ، Image/PJPEG ،
التطبيق/X-MS-XBAP ، التطبيق/vnd.ms-excel ، التطبيق/vnd.ms-powerpoint ، التطبيق/msword ، */ *
المرجع: http: // localhost: 8080/javawebdemoproject/web/2.jsp
قبول اللغة: ZH-CN
عامل المستخدم: Mozilla/4.0 (متوافق ؛ MSIE 8.0 ؛ Windows NT 6.1 ؛ WOW64 ؛ TRIDENT/4.0 ؛ SLCC2 ؛ .NET CLR 2.0.50727 ؛ .GR CLR 3.5.30729 ؛
قبول الترميز: gzip ، انحراف
المضيف: LocalHost: 8080
الاتصال: الحفاظ على الحفل
5. استجابة HTTP
5.1. المحتويات المدرجة في استجابة HTTP
تمثل استجابة HTTP البيانات التي أرسلها الخادم إلى العميل ، والتي تتضمن: سطر الحالة ، العديد من رؤوس الرسائل ، ومحتوى الكيان.
مثال:
http/1.1 200 okserver: apache-coyote/1.1-content-type: text/html ؛ charset = iso-8859-1 content-length: 105date: tue ، 27 May 2014 16:23:28 GMT <html> <head> hello world jsp </head> </body> </html>
5.2. تفاصيل استجابة HTTP - خط الحالة
تنسيق سطر الحالة: HTTP رقم إصدار رمز الحالة عبارة <CRLF>
مثال: HTTP/1.1 200 OK
يتم استخدام رمز الحالة لتمثيل نتيجة معالجة الخادم للطلب. إنه رقم عشري من ثلاثة أرقام. تنقسم رموز حالة الاستجابة إلى 5 فئات ، كما هو موضح أدناه:
5.3. تفاصيل استجابة HTTP - رؤوس الاستجابة شائعة الاستخدام
رؤوس الاستجابة الشائعة (رؤوس الرسائل) في ردود HTTP
الموقع: يستخدم الخادم هذا الرأس لإخبار المتصفح أين تقفز إلى الخادم: يستخدم الخادم هذا الرأس لإخبار المتصفح بنموذج ترميز محتوى الخادم: يستخدم الخادم هذا الرأس لإخبار المتصفح بتنسيق الضغط على محتوى البيانات-يستخدم الخادم هذا المركز. يستخدم الخادم هذا الرأس لإخبار المتصفح بنوع البيانات المراد إرجاعها لتحديث: يستخدم الخادم هذا الرأس لإخبار المتصفح بتحديث محتوى محتوى: يستخدم الخادم هذا الرأس لإخبار المتصفح بكتابة البيانات بطريقة تم تنزيلها بنقلها: لا يوجد خادم لا شيء.
Pragma: عدم وجود آذان
6. تعيين رؤوس الاستجابة على الخادم للتحكم في سلوك متصفح العميل
6.1. اضبط رأس استجابة الموقع لتحقيق إعادة توجيه الطلب
package gacl.http.study ؛ استيراد java.io.ioException ؛ استيراد javax.servlet.servletexception ؛ استيراد javax.servlet.http.httpservlet ؛ import javax.servlet.http. GACL * */servletdemo01 public class يمتد httpservlet {public void doget (httpservletrequest request ، httpservletresponse) يلقي servletexception ، ioexception {response.setStatus (302) ؛ // تعيين رمز حالة استجابة الخادم/**. هذا هو ما يسمى إعادة توجيه الطلب*/response.setheader ("الموقع" ، "/javaweb_httpprotocol_study_20140528/1.jsp") ؛ } public void dopost (httpservletrequest request ، httpservletponse response) يلقي servletexception ، ioException {this.doget (request ، response) ؛ }}عند استخدام عنوان url "http: // localhost: 8080/javaweb_htprotocol_study_20140528/servlet/servletdemo01" للوصول إلى servletdemo01 ، يمكنك رؤية رمز الحالة ومعلومات رأس الاستجابة المرسلة إلى بروبر بعد استجابة الخادم ، كما هو موضح في الشكل:
يقوم الخادم بإرجاع رمز الحالة 302 لإخبار المتصفح بأنني لا أملك الموارد التي تريدها ، لكنني أخبرك أين هو من خلال رأس استجابة الموقع. بعد أن يقوم المتصفح بتوصيف رأس الاستجابة ، يعرف أنه يريد القفز إلى /javaweb_htprotocol_study_20140528/1.jsp صفحة ، لذلك ستقفز تلقائيًا إلى 1.JSP ، كما هو موضح في الشكل أدناه:
6.2. اضبط رأس استجابة ترميز المحتوى لإخبار المتصفح بتنسيق ضغط البيانات
package gacl.http.study ؛ import java.io.bytearrayoutputstream ؛ import java.io.ioException ؛ import java.util.zip.gzipoutputStream ؛ import javax.servlet.servlexception ؛ javax.servlet.http.httpservletrequest ؛ import javax.servlet.http.httpservletrequest ؛ import javax.servlet.http.httpservletresponse ؛/***author gacl*therplet يستخدم لإثبات نقاط المعرفة التالية*1. استخدم دفق GzipoutputStream لضغط البيانات*2. قم بتعيين ترميز محتوى رأس الاستجابة لإخبار المتصفح بأن التنسيق المضغوط للبيانات المرسلة من الخادم*/الفئة العامة servletdemo02 "abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcda BCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABC dabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdadabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabc bcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcd "CDABCDABCDABCDABCDABCDABCDABC" + "dabcdabcdabcdabcdabcdabcdabcdabc "CDABCDABCDABCDABCDABCDABCDABCDABCDAB" + "CDABCDABCDABCDABCDABCDABCDABCDAB" + "CDABCDABCDABCDABCDABCDABCDABCDABCD" ؛ System.out.println ("原始数据的大小为 :" + data.getBytes (). الطول) ؛ bytearrayoutputstream bout = new bytearrayoutputStream () ؛ gzipoutputstream gout = gzipoutputstream جديد (bout) ؛ // buffer gout.write (data.getBytes ()) ؛ Gout.Close () ؛ // الحصول على بايت البيانات المضغوطة g [] = bout.tobytearray () ؛ استجابة. استجابة. استجابة. } public void dopost (httpservletrequest request ، httpservletponse response) يلقي servletexception ، ioException {this.doget (request ، response) ؛ }}معلومات الاستجابة التي أرسلها الخادم إلى المتصفح هي كما يلي:
تنسيقات الضغط التي يدعمها المتصفح هي:
6.3. اضبط رأس استجابة من نوع المحتوى وحدد نوع بيانات الاسترجاع
package gacl.http.study ؛ import java.io.ioException ؛ استيراد java.io.inputstream ؛ استيراد java.io.outputstream ؛ استيراد javax.servlet.servletexception ؛ import javax.servlet.http.httpservlet ؛ javax.servlet.http.httpservletrequest ؛ استيراد javax.servlet.http.httpservletrespons يمكن للمتصفح استلام (قبول) هي: * التطبيق/تطبيق التطبيق ، * Image/JPEG ، * Application/XAML+XML ، * Image/GIF ، * Image/PJPEG ، * application/x-ms-xbap ، * application/vnd.ms-excel ، * application/vnd.ms-powerpoint ، * msword ، */response. "Image/JPEG") ؛ // استخدم رأس استجابة من نوع المحتوى لتحديد نوع البيانات المرسلة إلى المتصفح باسم "Image/JPEG" // اقرأ الصورة wp_20131005_002.jpg this.getServletContext (). Byte Buffer [] = New Byte [1024] ؛ int len = 0 ؛ outputStream Out = response.getOutputStream () ؛ // احصل على دفق الإخراج بينما ((len = in.read (buffer))> 0) {// اقرأ المحتويات في دفق الإدخال (في) وتخزينها في المخزن المؤقت (المخزن المؤقت). استجابة httpservletresponse) يلقي servleTexception ، ioException {this.doget (request ، response) ؛ }}معلومات الاستجابة التي أرسلها الخادم إلى المتصفح هي كما يلي:
يتم عرض نتائج تشغيل servletdemo03 في الشكل أدناه:
يتم عرض الصور في المتصفح
6.4. اضبط رأس استجابة التحديث لتحديث المتصفح بانتظام
حزمة gacl.http.study ؛ استيراد java.io.ioException ؛ استيراد javax.servlet.servletexception ؛ استيراد javax.servlet.http.httpservlet يمتد httpservlet {public void doget (httpservletrequest request ، httpservletresponse) يلقي servletexception ، ioException { / ** * اضبط رأس استجابة التحديث للسماح للمتصفح بالتحديث بانتظام كل 3 ثوانٍ * / / / / responseerer ("التحديث" ، "3") ؛ /** * قم بتعيين رأس استجابة التحديث للسماح للمتصفح بالقفز إلى http://www.baidu.com في 3 ثوان */repress.setheader ("Refresh" ، "3 ؛ url = 'http: //www.baidu.com') ؛ desponse.getWriter (). الكتابة ("gacl") ؛ } public void dopost (httpservletrequest request ، httpservletponse response) يلقي servletexception ، ioException {this.doget (request ، response) ؛ }} 6.5. اضبط رأس استجابة تحديد المحتوى للسماح للمتصفح بتنزيل الملف
package gacl.http.study ؛ import java.io.ioException ؛ استيراد java.io.inputstream ؛ استيراد java.io.outputstream ؛ استيراد javax.servlet.servletexception ؛ import javax.servlet.http.httpservlet ؛ javax.servlet.http.httpservletrequest ؛ import javax.servlet.http.httpservletrespons رأس للسماح للمتصفح بتنزيل الملف */ response.setheader ("تحديد المحتوى" ، "المرفق ؛ Filename = xxx.jpg") ؛ inputStream in = this.getServletContext (). getResourCeasStream ("/img/1.jpg") ؛ Byte Buffer [] = New Byte [1024] ؛ int len = 0 ؛ outputStream Out = response.getOutputStream () ؛ بينما ((len = in.read (buffer))> 0) {out.write (buffer ، 0 ، len) ؛ }} public void dopost (httpservletrequest request ، httpservletresponse) يلقي servletexception ، ioException {this.doget (request ، response) ؛ }}عند الوصول إلى ServletDemo05 في المتصفح ، سيظهر مربع تنزيل الملف ، كما هو موضح في الشكل التالي:
ما سبق هو كل شيء عن هذا المقال ، آمل أن يكون مفيدًا لتعلم الجميع.