Мы знаем, что в настоящее время протокол HTTP используется протоколом передачи контента во многих прикладных системах, поэтому независимо от того, являетесь ли вы внешним персоналом, обслуживающим персоналом, персоналом по эксплуатации и техническому обслуживанию или даже управленческим персоналом, вам необходимо овладеть знаниями HTTP! !
История развития HTTP
- HTTP/0.9
В этой версии есть только одна команда GET, нет такой информации, как HEADER для описания данных, сервер закрывает TCP-соединение после отправки.
- HTTP/1.0
Эта версия добавляет много команды; увеличенный код состояния и заголовок; Поддержка нескольких символов, мультичастотные права передачи, кэширование.
HTTP/1.1
Эта версия добавляетпостоянное соединение,Pipeline, увеличить хост и некоторые другие команды. Постоянные соединения будут представлены в функции HTTP; если конвейера нет, то веб-сервер должен обрабатывать запросы последовательно, но с конвейером веб-сервер обрабатывает запросы параллельно; а добавление хоста позволяет физическому устройству запускать несколько веб-сервисы.
- HTTP/2.0
Все данные передаются в бинарном виде, а предыдущая версия использует для передачи строки; множественные запросы, отправляемые по одному и тому же соединению, больше не должны быть упорядочены; сжатие информации в заголовке и функции push для повышения эффективности.
Трехстороннее рукопожатие HTTP
Почему трехстороннее рукопожатие?因为网络是有可能延迟的,当客户端没有收到服务端的确认包,如果没有第三次握手,那么服务端不知道上次传输是不是被客户端正常接收了,如果没有接收,服务端的这个端口也是打开的,这就比较浪费资源。
HTTP-сообщение
HTTP-пакеты делятся насообщение запросаиответное сообщение, сообщение запроса и сообщение ответа делятся на начальную строку, заголовок и тело.Заголовок сообщения запроса включает три части, а именно метод HTTP, каталог ресурсов и протокол, а заголовок сообщения ответа включает в себя значение версии протокола, кода состояния и статуса?Например,статус 200 означает ок.должен быть в курсе: между заголовком HTTP и телом HTTP, разделенными линией.
- HTTP-метод
Методы HTTP определяют операции над ресурсами, обычно используемые GET, POST и т. д., которые не будут подробно рассматриваться.
- HTTP Code
Код HTTP используется для определения результата обработки запроса сервером, и коды каждого интервала имеют разную семантику. 1xx указывает класс информационного ответа, указывающий, что запрос получен и обработка продолжается; 2xx указывает на успех; 3xx указывает на перенаправление; 4xx указывает на ошибку клиента; 5xx указывает на ошибку сервера.
HTTP-функции
- междоменный запрос
Та же политика происхождения, То есть, когда два просит протокол URL-адреса, хост и порт, одинаковы, мы считаем, что эти два запроса именно гомологичны с доменом, пока протокол, хост и порт, пока есть другой, мы Рассматривается различные источники, а именно перекрестный домен, например:
http://www.mukedada.com:80
http://www.mukedada.com:8080
Приведенные выше два запроса являются междоменными запросами. Следует отметить, что междоменный запрос не означает, что браузер ограничивает инициацию межсайтовых запросов.Браузер только перехватывает возвращаемый результат.Наилучшим примером является CSRF-атака с использованием межсайтовых сценариев. Если мы хотим, чтобы браузер отпустил и вернул результат, используем следующие методы:
-
Сервер устанавливает параметр Access-Control-Allow-Origin, например, «Access-Control-Allow-Origin»: «*»
-
<link>
,<img>
и<script>
Запрос в трех тегах может быть междоменным, что также является междоменной практикой JSONP.
- Cache Control
Для статических ресурсов, таких как изображение, js и т. д., они не будут часто меняться, и их емкость относительно велика.Если нам нужно получать соответствующие данные с сервера каждый раз, когда мы посещаем, производительность станет относительно низкой. Протокол HTTP определяет некоторые параметры, связанные с кэшированием.
кашиемость, который указывает, где кэшировать, например клиентский браузер, прокси-сервер и т. д. Он имеет три часто используемых параметра: общедоступный, частный, без кэширования. общедоступный указывает, что ответ может кэшироваться любым объектом, включая клиентский браузер, отправляющий запрос, прокси-сервер и т. д.; частный указывает, что ответ может быть кэширован только одним пользователем, а не как общий кэш, т. е. прокси-сервер не может кэшировать его; no-cache указывает на обязательность Все пользователи кеша, которые кэшировали ответ, отправляют запрос с валидатором на исходный сервер перед использованием сохраненного кеша.
зрелость, max-age=, устанавливает максимальный срок хранения кеша, по истечении которого кеш считается просроченным. s-maxage= Это относится только к общим кешам (например, к отдельным прокси). max-stale= указывает, что клиент готов принять просроченный ресурс.
проверять, must-revalidate, кэши должны проверять состояние старых ресурсов перед их использованием, а ресурсы с истекшим сроком действия использовать нельзя. proxy-revalidate, то же, что и must-revalidate, но применяется только к общим кэшам (таким как прокси) и игнорируется частными кэшами.
разное. no-store,客户端和代理服务器不存储任何缓存,而是直接从服务器获取内容。 no-transform:不得对资源进行转换或转变。 Content-Encoding, Content-Range, Content-Type等HTTP头不能由代理修改。例如,非透明代理可以对图像格式进行转换,以便节省缓存空间或者减少缓慢链路上的流量。 no-transform指令不允许这样做。
- Cookie
Сервер сохраняет соответствующие данные в браузере через Set-Cookie, и эти соответствующие данные являются файлами cookie. Затем эти файлы cookie будут включены в следующий запрос того же домена. Cookies представляют собой пары ключ-значение, и их может быть несколько. набор. Время истечения задается max-age и истекает в файле cookie, а значение Secure отправляется по https, а доступ к HttpOnly через document.cookie недоступен. Для получения подробной информации см.Сессии и файлы cookie.
- Проверка ресурсов
В Cache Control мы представили, что когда установлен параметр no-cache, он указывает, что каждый запрос должен отправляться на сервер для проверки, а результат проверки указывает, что локальный кеш может быть прочитан до того, как кеш можно будет прочитать из локального . Только когда данные изменены, нам нужно прочитать последние данные с сервера, в противном случае прочитать кеш с локального. На этом этапе особенно важно определить, были ли изменены данные.Обычно мы используем проверочные заголовки Last-Modfied и Etag, чтобы проверить, были ли изменены данные. Среди них Last-Modifed обычно используется с If-Modified-Since или If-UnModified-Since, а Etag обычно используется с If-Match или If-Non-Match. Чтобы помочь вам понять, позвольте мне дать вам каштан. Предположим, мы заходим на сайт Mudedada.com, и информация в заголовке возврата содержит:
Последнее изменение: 888
Etag:123
Заголовок следующего запроса на доступ к Mukedada.com будет содержать:
Если-Изменено-С: 888
Если-несоответствие: 123
Сервер будет сравнивать, совпадают ли Last-Modified и Etag в заголовке запроса с соответствующими значениями на сервере.Если они не совпадают, они будут получены снова, в противном случае они будут получены из локального кеша. .
- Длинное соединение
Мы знаем, что HTTP необходимо создать TCP-соединение и закрыть TCP-соединение после завершения.Эти затраты относительно высоки (поскольку для создания TCP-соединения требуется трехстороннее рукопожатие), поэтому HTTP/1.1 начал поддерживать длинные соединения, и идентификатор заголовка запроса: Connection:keep -alive. Как показано на рисунке ниже, один и тот же идентификатор соединения представляет одно и то же соединение. Следует отметить, что одно и то же соединение может быть только одним и тем же запросом домена.
- Согласование данных
Согласование данных означает, что когда клиент отправляет запрос на сервер, клиент объявляет, что он хочет, чтобы сервер вернул формат. Сервер определяет, какие данные возвращать, на основе оператора клиента. Клиент задается такими параметрами, как Accept и Accept-Encoding, а сервер задается такими параметрами, как Content-Type.
Параметры, связанные с клиентом:
-
Accept указывает тип возвращаемых данных;
-
Accept-Encoding указывает метод сжатия данных сервера.В настоящее время алгоритмы сжатия сервера включают gzip, deflate, br и т. д.;
-
Accept-Language указывает язык возвращаемых данных, например Accept-Language: zh-CN,zh;q=0.9,en;q=0.8, где q представляет вес, что означает, что браузер предпочитает, чтобы сервер возвращал китайский язык. ;
-
Пользовательский агент представляет информацию о браузере, который может различать мобильный браузер или браузер на стороне ПК, чтобы возвращать определенную страницу.
Параметры, связанные с сервером:
-
Content-Type относится к типу данных, возвращаемому сервером;
-
Content-Encoding соответствует Accept-Encoding клиента, что относится к методу сжатия данных;
-
Язык сервера Content-Language.