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 в строке запроса называется методом запроса. Методы запроса включают в себя: Post, Get, Head, Options, DELETE, TRACE, PUT, Обычно используемые включают: GET, POST
Если у пользователя нет настроек, по умолчанию, браузер отправляет запросы GET на сервер. Например, доступ вручается напрямую в браузере, доступ к гиперссылке и т. Д. И т. Д. И т. Д. Если пользователь хочет изменить метод запроса для публикации, он может изменить метод подачи формы.
Независимо от того, используется ли Post или Get для запроса веб -ресурса с сервера. Разница между этими двумя методами в основном отражается в передаче данных: если метод запроса получен, данные, передаваемые серверу, могут быть приведены в форме A? После запрошенного адреса URL, и несколько данных разделены по &, например: get /mail/1.html?name=abc&password=xyz http/1.1
Особенности метода GET: параметры, прикрепленные к адресу URL -адреса, ограничены, а емкость данных обычно не может превышать 1K.
Если метод запроса является публикацией, данные могут быть отправлены на сервер в запрошенном контенте объекта. Характеристики метода POST: объем передаваемых данных не ограничен.
4.3. Подробная информация о HTTP -запросах - заголовок сообщений
Общие заголовки сообщений в HTTP -запросах
Принять: браузер сообщает серверу через этот заголовок и поддерживает тип данных. Принятие-чарс: браузер сообщает серверу через этот заголовок, который устанавливает символ, который он поддерживает. Принимая кодирование: браузер сообщает серверу через этот заголовок, а поддерживаемый формат сжатия на языке: браузер сообщает серверу через этот заголовок и его хост локализации: браузер сообщает серверу через этот заголовок и какой хост доступа. IF-модифицированный-SINCE: Браузер сообщает серверу через этот заголовок и время для кэширования данных. Реферат: браузер сообщает серверу через этот заголовок, и от какой страницы клиент. Подключение: браузер сообщает серверу через этот заголовок и отключить ссылку или ссылку после завершения запроса.
Например:
Принять: приложение/x-ms-application, image/jpeg, приложение/xaml+xml, image/gif, image/pjpeg,
Приложение/X-MS-XBAP, Application/Vnd.MS-Excel, Application/Vnd.MS-PowerPoint, Application/Msword, */ *
Реферат: http: // localhost: 8080/javawebdemoproject/web/2.jsp
Принятие языка: ZH-CN
Пользовательский агент: Mozilla/4.0 (совместимо; MSIE 8.0; Windows NT 6.1; WOW64; TRIDET/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0;
Принять по кодировке: gzip, дефту
Ведущий: Localhost: 8080
Соединение: Keep-Alive
5. http -ответ
5.1. Содержание, включенное в ответ HTTP
Ответ HTTP представляет данные, отправленные сервером, клиенту, который включает в себя: строку состояния, несколько заголовков сообщений и содержание объекта.
пример:
Http/1.1 200 okserver: apache-coyote/1.1content-type: text/html; charset = iso-8859-1-necontent-legen: 105date: Tue, 27 мая 2014 г. 16:23:28 GMT <html> <head> <title> Hello World JSP </title> </Head> <body> hell World! </body> </html>
5.2. Детали ответа HTTP - строка состояния
Формат строки статуса: http -версия Номер кода состояния
Пример: http/1.1 200 ok
Код состояния используется для представления результата обработки сервера запроса. Это трехзначное десятичное число. Коды состояния ответа разделены на 5 категорий, как показано ниже:
5.3. Детали ответа HTTP - обычно используемые заголовки ответов
Общие заголовки ответа (заголовки сообщений) в ответах HTTP
Местоположение: Сервер использует этот заголовок, чтобы сообщить браузеру, где перейти на сервер: сервер использует этот заголовок, чтобы сообщить браузере модель поляки контента сервера: сервер использует этот заголовок, чтобы сообщить браузеру формат сжатия с длиной содержимого данных: сервер использует этот заголовок, чтобы сообщить о браузере по длине данных для возврата контента: Тип контента: сервер использует этот заголовок, чтобы сообщить браузеру тип данных, которые будут возвращены, обновляется: сервер использует этот заголовок, чтобы сообщить браузеру обновлять дискуссию содержимого: сервер использует этот заголовок, чтобы сообщить браузеру, чтобы записать данные загруженным манером: не использует сервер. Контроль кэша: без кеша
Прагма: без кеша
6. Установите заголовки ответов на сервере для управления поведением клиентского браузера
6.1. Установите заголовок ответа на местоположение, чтобы реализовать перенаправление запроса
Пакет gacl.http.study; import java.io.ioexception; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpserveltrequest; import javax.servlet.http.htpsespons; GACL * */Public Class ServletDemo01 Extends httpservlet {public void Doget (httpservletrequest, запрос httpservletresponse), выбросы щитики, ioexception {response.setStatus (302); // Установить код статуса ответа сервера/** *Установить главу отклика, где можно использовать заголовок Brower. Это так называемое перенаправление запроса*/response.setheader ("location", "/javaweb_httpprotocol_study_20140528/1.jsp"); } public void Dopost (httpservletRequest, httpservletresponse response) throws servletexception, ioexception {this.doget (запрос, ответ); }}Когда вы используете адрес URL -адреса «http: // localhost: 8080/javaweb_httpprotocol_study_20140528/servlet/servletdemo01», чтобы получить доступ к серверу, как показано на рисунке ниже:
Сервер возвращает код состояния 302, чтобы сообщить браузеру, что у меня нет нужных ресурсов, но я говорю вам, где он находится через заголовок ответа на местоположение. После того, как браузер анализирует заголовок ответа, он знает, что он хочет перейти на страницу /javaweb_httpprotocol_study_20140528/1.jsp, он автоматически перепрыгнет на 1. JSP, как показано на рисунке ниже:
6.2. Установите заголовок отклика, кодирующего контент, чтобы сообщить браузере формат сжатия данных
Пакет gacl.http.study; import java.io.bytearrayoutputstream; import java.io.ioexcept javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse;/***@author gacl*Этот апплет используется для продемонстрирования следующих двух маленьких точек знания*1. Используйте поток gzipoutputstream для сжатия данных*2. Установите заголовок ответа, чтобы сообщить браузеру, что сжатый формат данных, отправленных сервером*/public class servletdemo02 Extends httpservlet {public void Doget (httpservletrequest, httpservletresponse ray) Throuseexception, ioExcept "abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcda bcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabdabcdabcdabcdabcdabcdabcdabcdabdabcdabcdabcdabcdabcdabcdabcdabdabcdabcdabcdabcdabcdabcdabcdabcdabcccdabcdabcdabcdabcdabcdabcdabccc dabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcda bcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcd "cdabcdabcdabcdabcdabcdabcdabcdabc" + "dabcdabcdabcdabcdabcdabcdabcdabc" + "dabcdabcdabcdabcdabcdabcdabcdabcdab" + "cdabcdabcdabcdabcdabcdabcdabcdabcdab" + "CDABCDABCDABCDABCDABCDABCDABCDABCDAB" + "CDABCDABCDABCDABCDABCDABDABCDABCDAB" + "CDABCDABCDABCDABCDABCDABCDABCDABCD"; System.out.println ("原始数据的大小为 :" + data.getbytes (). Length); BytearRayOutputStream BOUT = новый BytearRayOutputStream (); GzipoutputStream Gout = new GzipoutputStream (стержень); // buffer gout.write (data.getbytes ()); GOUT.CLOSE (); // Получить сжатые данные byte g [] = bout.tobytearray (); response.setheader («Кодирование контента», «gzip»); response.setheader («Содержимое длины», g.length +""); response.getOutputStream (). write (g); } public void Dopost (httpservletRequest, httpservletresponse response) throws servletexception, ioexception {this.doget (запрос, ответ); }}Информация о ответе, отправленная сервером в браузер, выглядит следующим образом:
Форматы сжатия, поддерживаемые браузером:
6.3. Установите заголовок ответа типа контента и укажите тип данных Loopback
Пакет gacl.http.study; импорт java.io.ioexception; import java.io.inputstream; импорт java.io.outputstream; импорт javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.http.httpservlet; import javax.servlet.Htt javax.servlet.http.httpservlectrequest; import javax.servlet.http.httpservletresponse; открытый класс ServletDemo03 Extends httpservlet {public void Doget (httpservletrequest, httpservonse response) throws servalexcept Браузер может получать (принять): * Application/x-MS-Application, * image/jpeg, * application/xaml+xml, * image/gif, * image/pjpeg, * application/x-ms-xbap, * application/vnd.ms-excel, * application/vnd.s-powerpoint, * applyation/m-myshord, * response. "Image/jpeg"); // Использование заголовка ответа типа контента, чтобы указать тип данных, отправленный в браузер как "Image/jpeg" // Читать изображение WP_20131005_002.jpg в папке IMG, расположенном в корневом каталоге проекта, и вернуть входной поток в входном потоке в = this.getServletContext (). getResourCeasStream ("/img/wp_20131005_002.jpg"); байтовый буфер [] = новый байт [1024]; int len = 0; OutputStream out = response.getOutputStream (); // Получить выходной поток, в то время как ((len = in.read (buffer))> 0) {// Читать содержимое в входном потоке (in) и хранить их в буфере (буфер) out.write (буфер, 0, Len) ;/ // Содержимое в буфере в буфер Httpservletresponse response) throws servletexception, ioexception {this.doget (запрос, ответ); }}Информация о ответе, отправленная сервером в браузер, выглядит следующим образом:
Результаты работы ServletDemo03 показаны на рисунке ниже:
Изображения отображаются в браузере
6.4. Установите заголовок отклика обновления, чтобы регулярно обновлять браузер
Пакет gacl.http.study; import java.io.ioexception; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservelcevest; Extends httpservlet {public void doget (httpservletrequest, httpservletresponse response), выбросит ServletException, ioException { / ** * Установите заголовок ответа Replesh, чтобы позволить браузеру регулярно обновляться каждые 3 секунды * / // response.seTheader («Refresh», «3»); /** * Установите заголовок отклика обновления, чтобы позволить браузеру прыгнуть на http://www.baidu.com за 3 секунды */response.setheader («Обновление», "3; url = 'http: //www.baidu.com'"); response.getWriter (). написать ("gacl"); } public void Dopost (httpservletRequest, httpservletresponse response) throws servletexception, ioexception {this.doget (запрос, ответ); }} 6.5. Установите заголовок ответа на контент-динамичность, чтобы позволить браузеру загрузить файл
Пакет gacl.http.study; импорт java.io.ioexception; import java.io.inputstream; импорт java.io.outputstream; импорт javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.http.httpservlet; import javax.servlet.Htt javax.servlet.http.httpservlectrequest; import javax.servlet.http.httpservletresponse; public class servletdemo05 Extends httpservlet {public void doget (httpservletrequest, httpservonse respence) reffice-despessonce { /** Заголовок, чтобы позволить браузеру загрузить файл */ response.setheader ("Контент-дискуссия", "Attachment; filename = xxx.jpg"); InputStream in = this.getServletContext (). GetResourCeasStream ("/img/1.jpg"); байтовый буфер [] = новый байт [1024]; int len = 0; OutputStream out = response.getOutputStream (); while ((len = in.read (buffer))> 0) {out.write (buffer, 0, len); }} public void dopost (httpservlectrequest, httpservletresponse response) throws servletexception, ioexception {this.doget (запрос, ответ); }}При доступе к ServletDemo05 в браузере появится поле для загрузки файла, как показано на следующем рисунке:
Выше приведено в этой статье, я надеюсь, что это будет полезно для каждого обучения.