Эта статья покажет вам все концепции HTTP

задняя часть HTTP

В прошлой статье мы кратко объяснили основные функции и использование HTTP, и все откликнулись очень хорошо, поэтому в этой статье мы подробно рассмотрим характеристики HTTP. Давайте продолжим с заголовками HTTP, которые не были закончены в предыдущей статье (эта статья введет понятие всех заголовков, но не будет углубляться в нижний уровень)

HTTP-заголовки

Давайте рассмотрим, какие виды заголовков HTTP1.1 бывают.

Заголовки HTTP 1.1 в основном делятся на четыре типа:通用标头,实体标头,请求标头,响应标头, теперь давайте представим эти типы заголовков

Общий заголовок

Общие заголовки HTTP названы так потому, что, в отличие от трех других категорий, они не ограничены определенным типом сообщения или компонента сообщения (запрос, ответ или сущность сообщения). Общие заголовки HTTP в основном используются для передачи информации о самом сообщении, а не о том, что оно несет. Они предоставляют общую информацию и контролируют, как обрабатываются и обрабатываются сообщения.

Хотя общие заголовки не квалифицируются как запрос или ответ, некоторые общие заголовки используются в основном или полностью в запросах определенного типа. То есть, если в сообщении запроса присутствует общий заголовок, в сообщении запроса появятся наиболее распространенные заголовки. Ответное сообщение такое же.

Давайте начнем со списка общих заголовков, которые нам всем нужно охватить.

  • Cache-Control
  • Connection
  • Date
  • Pragma
  • Trailer
  • Transfer-Encoding
  • Upgrade
  • Via
  • Warning

Cache-Control

缓存(Cache)Это важная концепция в компьютерной области и инструмент для оптимизации производительности системы. Не только центральный процессор в компьютере выбирает использование регистра в качестве вспомогательного для повышения эффективности выполнения инструкций, но и имеет кэш в компьютерной сети Давайте представим кэш в компьютерной сети.

Cache-ControlЗаголовок команды общий, есть возможность управлять как либо в ответ на HTTP запрос с помощью кеша.

Потому что компьютерные сети могут иметь第三者появился, т.缓存服务器, эта директива затрагивает请求/响应Для достижения цели управления кешем на кеш ссылок будет влиять не только сервер кеша, но и внутренний кеш браузера.

В этом заголовке может содержаться ряд отдельных директив, подробности о которых можно найти в RFC 2616,Несмотря на то, что это обычный заголовок, некоторые директивы могут появляться только в запросе или ответе..下表提供了一个 Cache-Control 选项的总结并告诉你如何去使用

Обратите внимание, что в заголовке Cache-Control может появиться только одна директива, но в сообщении может появиться несколько таких заголовков.

На самом деле в таблице выше четыре категории.

  • 可缓存性: они соответственноno-cache,no-store,privateиpublic
  • 缓存有效性时间: они соответственноmax-age,s-maxage,max-stale,min-fresh
  • 重新验证并重新加载: они соответственноmust-revalidateиproxy-revalidate
  • 其他: они соответственноonly-if-cachedиno-transform

Дайте подробное представление о содержании таблицы

no-cache

no-cacheЭто легко иno-storeПутаница, в общемno-cacheСчитается, что он не кэшируется, но это не так.

Цель использования директивы no-cache состоит в том, чтобыЧтобы предотвратить возврат просроченных ресурсов из кеша, как показано на рисунке ниже

Cache-Control: no-cache

Например, вы поймете, что No-Cache эквивалентен吃着碗里的,占着锅里的, если в кастрюле есть новые куски мяса, съешьте сначала мясо в кастрюле, если в кастрюле нет нового мяса, то съешьте свое, вот锅里的Это эквивалентно сгенерированному исходному серверу,碗里的Это как кеширование.

no-store

no-storeнастоящий不缓存, каждый раз, когда сервер получает запрос клиента, он возвращает последний ресурс клиенту.

Cache-Control: no-store

max-age

max-ageЕго можно использовать в запросах или ответах.Когда клиент отправляет команду с максимальным возрастом, кеш-сервер определяет значение своего времени кеша и размер максимального возраста.Если он меньше, чем максимальный возраст, кеш действителен и может продолжаться. Верните кешированные данные клиенту. Если он больше, чем max-age, кеш-сервер не сможет вернуть кешированные данные клиенту.

Cache-Control: max-age=60

еслиmax-age = 0, Затем кеш-сервер перенаправит запрос напрямую на сервер

Cache-Control: max-age=0

Примечание. Это значение max-age запрашивается относительно времени.

must-revalidate

Указывает, что после истечения срока действия ресурса кэш должен использовать его данные с истекшим сроком действия без успешной проверки на исходном сервере.

Cache-Control: must-revalidate

no-store,no_cache,must-revalidateиmax-ageВы можете посмотреть на это вместе, ниже приведена блок-схема этих четырех заголовков.

public

publicАтрибут появляется только в ответах клиентов и указывает, что ответ может быть закэширован любым кешем. В компьютерных сетях есть два типа кэшей: общий кэш и частный кэш, как показано ниже.

Cache-Control: public

private

Быть указаннымprivateПосле команды ответ предназначен только для определенного пользователя, что совпадает сpublicНапротив, кеш-сервер кэширует только определенных клиентов, и кеш-сервер не будет возвращать кеш для запросов, отправленных другими клиентами.

Cache-Control: private

s-maxage

s-maxageфункция инструкции иmax-ageФункция директивы такая же, разница в том, что s-maxage нельзя использовать для приватных кэшей, а только для публичных серверов, используемых несколькими пользователями, при повторных запросах и ответах от одного и того же пользователя эта директива не действует.

Cache-Control: s-maxage=60

min-fresh

min-freshможет появляться только в запросах,min-freshПопросите сервер кеша вернуть кэшированные данные в течение минимального времени обновления. НапримерCache-Control:min-fresh=60, что требует от кэш-сервера передачи данных в течение 60 секунд.

Cache-Control: min-fresh=60

max-stable

max-stableВы можете только появиться в запросе, указав, что клиент принимает данные кеша, даже если срок его действия истек.

Cache-Control: max-stable=60

only-if-cached

Этот заголовок может присутствовать только в запросах, используйтеonly-if-cachedДиректива означает, что клиент будет запрашивать возврат целевого ресурса только в том случае, если сервер кэширования кэширует его локально.

Cache-Control: only-if-cached

proxy-revalidate

proxy-revalidateДиректива требует, чтобы все серверы кеша снова проверяли действительность кеша, прежде чем возвращать ответ на запрос клиента с директивой.

Cache-Control: proxy-revalidate

no-transform

использоватьno-transformДиректива указывает, что кэш НЕ ДОЛЖЕН изменять тип носителя тела объекта ни в запросе, ни в ответе.

Cache-Control: no-transform

Connection

Протокол HTTP использует TCP для управления соединением, есть два соединения,持久性连接и非持久性连接.

постоянное соединение

Постоянное соединение означает, что после завершения сеанса TCP-соединение не закрывается.После повторной отправки второго запроса больше не требуется устанавливать TCP-соединение, а можно напрямую запрашивать и отвечать. Его общее представление выглядит следующим образом

Connection: keep-alive

Постоянные соединения используются по умолчанию, начиная с HTTP 1.1..

keep-aliveЭто также общий заголовок. Как правило, соединение будет использоваться вместе с сохранением сохранения. Сохранить два параметра, одинtimeout;другойmax, их основные формы следующие

Connection: Keep-Alive
Keep-Alive: timeout=5, max=1000
  • тайм-аут: относится к кратчайшему времени, в течение которого должно быть открыто бездействующее соединение, то есть время соединения этого запроса не может быть меньше 5 секунд.

  • max: относится к максимальному количеству запросов, которые сервер может получить, прежде чем соединение будет закрыто.

непостоянное соединение

Непостоянное соединение представляет собой способ закрыть соединение после запроса/ответа сеанса. Все соединения, использовавшиеся до HTTP 1.1, являются непостоянными, т. е.

Connection: close

Date

Дата — это общий заголовок, он может появляться в заголовках запросов и ответов, его основное представление выглядит следующим образом.

Date: Wed, 21 Oct 2015 07:28:00 GMT 

Это означает среднее время по Гринвичу, которое на восемь часов медленнее пекинского времени.

Pragma

PragmaПоле, унаследованное от версий до http 1.1, определено только для обратной совместимости с http. Его общая форма выглядит следующим образом

Pragma: no-cache

Используется только в запросах, отправленных клиентом. Клиент попросит все промежуточные серверы не возвращать кэшированные ресурсы.

Если все промежуточные серверы реализуют HTTP/1.1 в качестве стандарта, то используйте Cache-Control: no-cache напрямую. Если нет, включите два поля, как показано ниже.

Cache-Control: no-cache
Pragma: no-cache

Trailer

Поля заголовка Trailer заранее указывает, какие поля заголовка записываются после тела сообщения. Это поле заголовка можно использовать для кодирования передачи по частям в HTTP/1.1. Общее использование выглядит следующим образом

Transfer-Encoding: chunked
Trailer: Expires

В приведенном выше примере использования значение указанного поля заголовка Trailer равно Expires, а поле заголовка Expires появляется после тела сообщения (после того, как длина блока равна 0).

Transfer-Encoding

Переводное кодирование относится к категории контент-переговоров, следующее объяснит конкретное согласование контента, и теперь первое замечание:Transfer-EncodingУказывает метод кодирования, используемый для передачи сообщения

Примечание. Метод кодирования передачи HTTP 1.1 действителен только для блочной передачи, но HTTP 2.0 больше не поддерживает блочную передачу и предоставляет собственный более эффективный механизм передачи данных.

Transfer-Encoding: chunked

Transfer-Encoding также принадлежитHop-by-hop(逐跳) 首部, давайте рассмотрим, заголовки сообщений HTTP можно разделить на通用标头,请求标头,响应标头и实体标头Также можно разделить на端到端首部(End-to-End)и逐跳首部(Top-to-Top).

За исключением следующих восьми, которые относятся к заголовку «hop-by-hop», остальные относятся к сквозному заголовку.

Соединение, Keep-Alive, Proxy-Authenticate, Proxy-Authorization, Trailer, TE, Transfer-Encoding, Upgrade

Возвращаясь к обсуждению ниже, Transfer-Encoding используется для передачи сообщений между двумя узлами, а не самим ресурсом. В процессе передачи сообщений несколькими узлами каждая передача сообщения может использовать разныеTransfer-Encoding. как показано на рисунке

Transfer-Encoding поддерживает сжатие файлов, если вы хотите отправить файл в сжатом виде. Все необязательные типы Transfer-Encoding следующие:

  • chunked: данные отправляются сериями блоков, в этом случае они будут опущеныContent-Lengthзаголовок и в начале каждого блока необходимо дополнить длиной текущего блока в шестнадцатеричном формате, а затем'\r\n', потом сам блок, потом еще'\r\n'. Кодирование по частям полезно, когда клиенту отправляется большой объем данных, и общий размер ответа может быть неизвестен до тех пор, пока запрос не будет полностью обработан. Например, при создании больших таблиц HTML в результате запросов к базе данных или при передаче больших изображений. Фрагментированный ответ выглядит так
HTTP/1.1 200 OK 
Content-Type: text/plain 
Transfer-Encoding: chunked

7\r\n
Mozilla\r\n 
9\r\n
Developer\r\n
7\r\n
Network\r\n
0\r\n 
\r\n

Блок завершения обычно равен 0. следитьTransfer-EncodingпозадиTrailerЗаголовок, прицеп может быть пустым.

  • compress: использоватьLempel-Ziv-Welch(LZW)Формат алгоритма. Имена значений взяты изUNIXКомпрессор, реализующий алгоритм. Немногие браузеры больше используют эту кодировку контента, так как действие патента было прекращено в 2003 году.
  • deflate:использоватьzlib(在 RFC 1950 定义)Структура и алгоритм сжатия deflate
  • gzip: использоватьLempel-Ziv编码(LZ77)и 32 битCRCформат. Это было изначальноUNIX gzipформат программы.HTTP / 1.1Стандарт также рекомендует, чтобы серверы, поддерживающие такое кодирование контента, распознавали x-gzip как псевдоним в целях совместимости.
  • identity: Использовать функции идентификации (т.е. без сжатия или модификации).

Также можно указать несколько значений, разделенных запятыми, как в сет-листе.

Transfer-Encoding: gzip, chunked

Upgrade

Поле заголовка Upgrade используется для определения того, может ли протокол HTTP и другие протоколы использовать более высокую версию для связи, а значение его параметра может использоваться для указания совершенно другого протокола связи.

В приведенном выше примере использования поле заголовкаUpgradeУказанное значениеTLS/1.0. Обратите внимание на соответствие между полями заголовков двух полей здесь, а значение Connection указано как Upgrade. Объекты, на которых работает поле заголовка Upgrade, ограничены объектами между клиентом и соседним сервером. Поэтому при использовании поля заголовка Upgrade необходимо дополнительно указатьConnection: Upgrade. Для запросов с полем заголовка Upgrade сервер доступен101 Switching ProtocolsВ качестве ответа возвращается код состояния.

Via

Через используется для отслеживания пути запроса/ответа между клиентом и сервером, чтобы избежать циклов запросов и иметь возможность идентифицировать请求/响应Функционал протокола отправителя в цепочке. Поле Via добавляется прокси-серверами, как прямыми, так и обратными, и может отображаться в заголовках запросов и ответов. Он используется для отслеживания пересылки сообщений. Например, как показано ниже

позади Виа1.1, 1.0Указывает версию HTTP на принимающем сервере. Заголовок Via используется для отслеживания пути, часто сTRACEметоды используются совместно.

Warning

Примечание. Поле «Предупреждение» устарело.

чекWarning (https://github.com/httpwg/http-core/issues/139) and Warning: header & stale-while-revalidate (https://github.com/whatwg/fetch/issues/913)получить более подробную информацию

ВНИМАНИЕ HTTP-заголовок GM обычно информирует пользователей о некоторых предупреждениях, связанных с кэшированием.

В HTTP/1.1 определено 7 предупреждений. Они следующие

заголовки запроса

Заголовок запроса используется для полей, используемых клиентом для отправки HTTP-запроса на сервер Давайте посмотрим, какие поля включены в заголовок HTTP-запроса и что они означают. Далее будет представлено

  • Accept
  • Accept-Charset
  • Accept-Encoding
  • Accept-Language
  • Authorization
  • Expect
  • From
  • Host
  • If-Match
  • If-Modified-Since
  • If-None-Match
  • If-Range
  • If-Unmodified-Since
  • Max-Forwards
  • Proxy-Authorization
  • RangeReferer
  • TE
  • User-Agent

Давайте представим их отдельно

Accept

Заголовки HTTP-запроса сообщают клиенту, какие типы MIME клиент может получить.

Так что же такое MIME-типы? Прежде чем ответить на этот вопрос, вы должны сначала понять, что такое MIME.

MIME: MIME (многоцелевые расширения почты Интернета) — это интернет-стандарт для описания типа содержимого сообщений. Сообщения MIME могут содержать текст, изображения, аудио, видео и другие данные, относящиеся к конкретному приложению.

То есть тип MIME на самом деле представляет собой набор типов содержимого сообщения. Так что же такое MIME-типы?

文本文件: текст/html, текст/обычный, текст/css, приложение/xhtml+xml, приложение/xml

图片文件: изображение/jpeg, изображение/gif, изображение/png

视频文件: видео/mpeg, видео/quicktime

应用程序二进制文件: приложение/октет-поток, приложение/zip

Например, если браузер не поддерживает отображение изображений PNG, то Accept не указывает изображение/png, а указывает типы изображений, такие как изображение/gif и изображение/jpeg, которые могут быть обработаны.

Общий тип MIME также будет соответствоватьqИспользуется с этим свойством, что такое q? q представляет вес, давайте посмотрим на пример

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Что это означает? Если вы хотите показатьТип носителя повышает приоритет, затем используйте q= для дополнительного представления значения веса.Когда вес не отображается, значение по умолчанию равно 1.0.Я дам вам таблицу, и вы поймете

q MIME
1.0 text/html
1.0 application/xhtml+xml
0.9 application/xml
0.8 * / *

Другими словами, это порядок размещения, сначала с большими весами, затем с низкими весами,application/xml;q=0.9представляет собой неделимое целое.

Accept-Charset

Accept-CharsetЭто указывает на то, что клиент может принять кодировку символов. Принять - Чарс и принадлежат内容协商Часть его, это и

AcceptТаким же образом вы также можете использовать q для представления набора символов, используйте逗号разделить, напр.

Accept-Charset: iso-8859-1
Accept-Charset: utf-8, iso-8859-1;q=0.5
Accept-Charset: utf-8, iso-8859-1;q=0.5, *;q=0.1

На самом деле многиеAccept-*Заголовки в начале относятся к категории согласования контента, о согласовании контента мы поговорим ниже.

Accept-Encoding

Указывает, что заголовок HTTP будет указывать кодировку содержимого, которую клиент ожидает от сервера, что обычно является алгоритмом сжатия. Accept-Encoding также принадлежит内容协商часть, используемая и выбранная клиентомContent-EncodingКонтент вернулся.

Даже если и клиент, и сервер могут поддерживать один и тот же алгоритм сжатия, сервер может отказаться от сжатия и возврата, что может быть связано с этими двумя условиями:

  • Отправляемые данные уже были сжаты один раз, и второе сжатие не приведет к отправке данных меньшего размера.
  • Сервер перегружен и не может позволить себе снижение производительности при сжатии, обычно если сервер использует более 80% ЦП,Microsoftто рекомендуется не использовать сжатие

Вот как используется Accept-Encoding

Accept-Encoding: gzip
Accept-Encoding: compress
Accept-Encoding: deflate
Accept-Encoding: br
Accept-Encoding: identity
Accept-Encoding: *
Accept-Encoding: deflate, gzip;q=1.0, *;q=0.5

В приведенных выше выражениях уже перечислены все свойства Accept-Encoding.

  • gzip: формат кодирования, сгенерированный программой сжатия файлов gzip с использованиемLempel-Ziv编码(LZ77)и 32-битный формат сжатия CRC, заинтересованные студенты могут прочитать (Хорошо. Wikipedia.org/wiki/LZ77_ahhh…

  • compress: использоватьLempel-Ziv-Welch(LZW)Сжатый формат алгоритма, заинтересованные студенты могут прочитать (Эн. Wikipedia.org/wiki/LZ W)

  • deflate: Формат сжатия с использованием структуры zlib и алгоритма сжатия deflate, см. (En. Wikipedia.org/wiki/Zlib)и (En. Wikipedia.org/wiki/D E flat…

  • br: Формат сжатия с использованием алгоритма Бротли, см. (Что ж, Wikipedia.org/wiki/br ОТ…

  • Формат кодирования по умолчанию, который не выполняет сжатие или изменения

  • *: соответствует любой кодировке содержимого, не указанной в заголовке, если она не указанаAccept-Encodingэто значение по умолчанию и не подразумевает поддержку

    Содержит любой алгоритм, просто не выражает предпочтения

  • ;q=Относительный приоритет представлен значением веса q, которое совпадает со значением поля заголовка Accept.

Accept-Language

Accept-LanguageЗапрос указывает, что клиенту нужен тип языка, возвращенный сервером, и Accept-Language также относится к категории согласования содержимого. сервер черезContent-LanguageОтвечать, как поле заголовка Accept, по значению весаqдля указания относительного приоритета. Например

Accept-Language: de
Accept-Language: de-CH
Accept-Language: en-US,en;q=0.5

Authorization

HTTP AuthorizationЗаголовок запроса используется для аутентификации учетных данных пользовательского агента на сервере, обычно после того, как сервер отвечает статусом 401 Unauthorized и заголовком WWW-Authenticate. Если вы не понимаете, я нарисую картинку, чтобы вы видели

заголовки запросаAuthorizationОн используется для информирования сервера, информации об аутентификации пользователя, только после получения сервер аутентификации возвращает клиенту ответ 200 OK, если нет информации об аутентификации, возвращается 401 и информирует клиента о необходимости аутентификации информации. Для получения дополнительной информации об авторизации, будет подробно объяснено позже

Expect

Заголовок HTTP-запроса EXPECT указывает, что сервер должен соответствовать ожиданиям для обработки запроса. Если сервер не может выполнить то, что ожидается от службы клиента, и сервер ошибается, он вернет417 Expectation Failed. HTTP 1.1 указывает только100-continue.

  • Если сервер может делать то, что обычно ожидает клиент, он вернет 100
  • Если ожидания не оправдались или возврат любого другого4xx, вернет 417

Например

PUT /somewhere/fun HTTP/1.1
Host: origin.example.com
Content-Type: video/h264
Content-Length: 1234567890987
Expect: 100-continue

From

From请求头用来告知服务器使用用户代理的电子邮件地址。通常情况下,其使用目的就是为了显示搜索引擎等用户代理的负责人的电子邮件联系方式。我们在使用代理的情况下,应尽可能包含 From 首部字段。 Например

From: webmaster@example.org

Вы не должны использовать From для контроля доступа или аутентификации

Host

HostВ заголовке запроса указывается доменное имя сервера (для виртуальных хостов) и (необязательно) номер TCP-порта, на котором сервер прослушивает. Если номер порта не указан, порт по умолчанию для запрошенной службы будет использоваться автоматически (например, при запросе URL-адреса HTTP будет автоматически использоваться порт 80).

Host: developer.mozilla.org

Поле заголовка узла является единственным полем заголовка в спецификации HTTP/1.1, которое ДОЛЖНО быть включено в запрос.

If-Match

За If-Match может следовать куча свойств, заголовки запросов в виде If-Match вызываются条件请求, после того как сервер получит условный запрос, ему необходимо определить, удовлетворен ли условный запрос.Только если условный запрос верен, условный запрос будет выполнен.

Похожие такжеIf-match, если modified - с тех пор, если-- не совпадает, если-диапазон, если-немодифицирован - поскольку

заGETиPOSTспособ, сервер работает только с перечисленнымиETag(响应标头)Запрошенный ресурс возвращается только тогда, когда один из них совпадает. Вот новое словоETag, мы поговорим об использовании ETag позже. для чего-то вродеPUTи другие небезопасные методы, и в этом случае он просто загрузит ресурс.

Ниже приведены два общих случая

  • заGETиPOSTметод, будет использоваться в сочетанииRangeзаголовок, который гарантирует, что область действия вновь отправленного запроса такая же, как и ресурс предыдущего запроса, если он не совпадает, он вернет416отклик.
  • Для других методов, особенноPUTметод,If-MatchЧтобы предотвратить потерю обновлений, сервер сравнивает значение поля If-Match со значением ETag ресурса и выполняет запрос, только если они совпадают. В противном случае возвращается ответ с кодом состояния 412 Precondition Failed. Например
If-Match: "bfc13a64729c4290ef5b2c2730249c88ca92d82d"
If-Match: *

If-Modified-Since

If-Modified-SinceЧасть запроса состояния HTTP, только после даты, когда сервер изменяет ресурс, необходимый для запроса, возвращает ответ 200 OK. Если после указанной даты сервер не изменит содержимое, ответ вернет304и без какого-либо тела ответа. If-Modified-Since можно использовать толькоGETиHEADпросить.

Когда If-Modified-Since используется в сочетании с If-None-Match, оно игнорируется, если только сервер не поддерживает If-None-Match. Обычно выражается следующим образом

If-Modified-Since: Wed, 21 Oct 2015 07:28:00 GMT 

Примечание. Это среднее время по Гринвичу. Даты HTTP всегда выражаются по Гринвичу, а не по местному времени.

If-None-Match

условный запрос, связанный сIf-Matchимеет обратный эффект только тогда, когдаIf-None-Matchзначение поля сETagКогда значения не совпадают, запрос может быть обработан. заGETиHEAD, только если сервер не соответствует данному ресурсуETag, сервер вернет 200 в качестве ответа. Для других методов запрос будет обработан только в том случае, если ETag последнего существующего ресурса не соответствует ни одному из перечисленных значений.

когдаGETиPOSTпослалIf-None-MatchиETagПри совпадении сервер возвращает304.

If-None-Match: "bfc13a64729c4290ef5b2c2730249c88ca92d82d"
If-None-Match: W/"67ab43", "54ed21", "7892dd"
If-None-Match: *

Некоторым учащимся может быть любопытноW/Что это значит, это на самом деле слабое совпадение Etag, и мы подробно объясним в заголовке ответа.

If-Range

If-RangeЭто также условный запрос. Если условие выполняется (значение IF-диапазона соответствует значению Etag или обновленной даты и времени), будет выдан запрос диапазона, в противном случае все ресурсы будут возвращены. Его общее представление выглядит следующим образом

If-Range: Wed, 21 Oct 2015 07:28:00 GMT 

If-Unmodified-Since

If-Unmodified-SinceЗаголовок HTTP-запроса также является условным запросом, сервер вернет запрошенный ресурс только в том случае, если он не был изменен после указанной даты. Если обновление произошло после указанной даты и времени, то с кодом состояния412 Precondition Failedвернулся в качестве ответа.

If-Unmodified-Since: Wed, 21 Oct 2015 07:28:00 GMT 

Max-Forwards

MDN выделил этот заголовок серым цветом, поэтому следующее взято из «Иллюстрированного HTTP».

Max-Forwardsобычно используется дляTRACEиOPTIONметод, отправить содержитMax-ForwardsПри прохождении через сервер значение максимальной форварки будет -1, пока max-fourctions не будет 0. Max-Frests - это десятичное целочисленное значение.

Max-Forwards: 10

Поле заголовка Max-Forwards можно гибко использовать для исследования причин вышеуказанных проблем. Поскольку сервер возвращает ответ немедленно, когда значение поля Max-Forwards равно 0, мы можем, по крайней мере, иметь определенное представление о состоянии связи на пути передачи, заканчивающемся на этом сервере.

Proxy-Authorization

Proxy-AuthorizationОн относится к категории запроса и аутентификации.Выше мы упоминали, что аутентифицированный HTTP-заголовок — это авторизация, которая отличается от авторизации, которая происходит между клиентом и сервером;Proxy-AuthorizationПроисходит между прокси-сервером и клиентом. Это означает, что при получении аутентификации от прокси-сервера клиент отправит запрос, включающий поле заголовка Proxy-Authorization, чтобы сообщить серверу информацию, необходимую для аутентификации.

Proxy-Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l

Range

RangeЗаголовки HTTP-запроса указывают, что сервер должен возвращать ресурсы для указанной части документа, Range может быть запрошен одновременно для возврата нескольких частей, и сервер будет возвращать эти ресурсы в каждом документе. Если сервер возвращается успешно, он вернет ответ 206; если диапазон диапазона недействителен, сервер вернет416 Range Not SatisfiableОшибка; сервер МОЖЕТ также игнорировать заголовок Range и возвращать в ответ 200.

Range: bytes=200-1000, 2000-6576, 19000-

Referer

Атрибут HTTP Referer является частью заголовка запроса.Когда браузер отправляет запрос на веб-сервер, он обычно приносит Referer, чтобы сообщить серверу, с какой страницы связана веб-страница, чтобы сервер мог получить некоторую информацию для обработки.

Referer: https://developer.mozilla.org/testpage.html

TE

Поле заголовкаTEСообщает серверу, с какой кодировкой передачи клиент может обрабатывать ответ, и ее относительный приоритет. По функциям оно похоже на поле заголовка Accept-Encoding, но используется для кодирования передачи.

TE: gzip, deflate;q=0.5

В дополнение к указанию кодирования передачи, поле заголовка TE также может указывать режим кодирования передачи с разделением на фрагменты, сопровождающего поле трейлера. При применении последнего просто назначьте трейлеры значению поля.

TE: trailers, deflate;q=0.5

User-Agent

поле заголовкаUser-AgentТакая информация, как имя браузера и пользовательского агента, создавшего запрос, передается на сервер.

Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0

заголовки ответов

Только сейчас наше внимание было на запросах клиентов, и теперь мы сдвигаем наше внимание на сервер. Поле заголовка ответа - это поле, содержащееся в ответе, отправленном серверу для клиента, который используется для дополнения соответствующей информации и т. Д. В этой части также есть много заголовков. Давайте сначала посмотрим на это.

  • Accept-Ranges
  • Age
  • ETag
  • Location
  • Proxy-Authenticate
  • Retry-After
  • Server
  • Vary
  • www-Authenticate

Accept-Ranges

Заголовок HTTP-ответа Accept-Ranges, этот заголовок имеет два значения.

  • Когда сервер может обработать запрос, отправленный клиентом, используйтеbytesуказать
  • Когда сервер не может обработать запрос, отправленный клиентом, используйтеnoneуказать
Accept-Ranges: bytes
Accept-Ranges: none

Age

Заголовок HTTP-ответа Age сообщает клиенту, как давно исходный сервер создал ответ, его единицы, заголовок Age обычно близок к 0. Если он равен 0, он может быть получен с исходного сервера, если нет, то он может быть создан прокси-сервером, тогда значение Age указывает время, с которого кэшировал response снова инициирует аутентификацию до завершения аутентификации. Прокси должен добавить поле заголовка Age при создании ответа. Обычно выражается следующим образом

Age: 24

ETag

ETag действительно важны для условных запросов. Поскольку условные запросы сопоставляются на основе значения ETag, давайте рассмотрим их подробнее.

Заголовок отклика Etag特定版本, что делает кэширование более эффективным и экономит полосу пропускания, поскольку веб-серверу не нужно повторно отправлять полный ответ, если кэшированное содержимое не изменилось. Кроме того, ETag может предотвратить одновременное обновление ресурсов и перезапись друг друга.

Если ресурс по указанному URL-адресу изменяется, необходимо создать новый.ETagзначения, сравнивая их, чтобы определить, совпадают ли два представления ресурса.

Есть два значения ETag, одно сильное ETag, а другое слабое ETag;

  • Сильное значение ETag, независимо от того, насколько тонкие изменения объекта меняют его значение, общее представление выглядит следующим образом.
ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"
  • Слабое значение ETAG, слабое значение ETAG используется только для подсказки, совпадают ли ресурсы. Только ресурсы претерпели фундаментальные изменения, и значение ETAG будет изменено при генерации разницы. В это время W/ будет присоединено к началу значения поля.
ETag: W/"0815"

Location

Респондент местоположения указывает, что URL необходимо перенаправить страницу, это только3xx(重定向)или201(已创建)Используется с ответами о статусе. Ниже приведен процесс перенаправления страницы.

Используйте поле заголовка Location, чтобы направить получателя ответа к ресурсу, который отличается от расположения URI запроса.

Locationиcontent-Locationотличается: местоположение представляет собой перенаправление цели (или URL-адрес вновь созданного ресурса). Однако Content-Location представляет собой прямой URL-адрес, используемый для доступа к ресурсу, когда происходит согласование контента, без дальнейшего согласования. Location — это заголовок, связанный с ответом, а Content-Location — с возвращаемым объектом.

Location: /index.html

Proxy-Authenticate

Заголовки ответа HTTPProxy-AuthenticateБудет определен метод аутентификации, и этот метод аутентификации следует использовать для доступа к ресурсу за прокси-сервером, то есть к клиенту.

Поведение проверки подлинности при доступе между HTTP-клиентом и сервером аналогично, за исключением того, чтоProxy-AuthenticateСтороны проверки подлинности находятся между клиентом и прокси. Его общее представление выглядит следующим образом

Proxy-Authenticate: Basic
Proxy-Authenticate: Basic realm="Access to the internal site"

Retry-After

Заголовок ответа HTTP Retry-After сообщает клиенту, сколько времени потребуется для повторной отправки запроса.Существует три основных случая использования этого заголовка:

  • при отправке503(服务不可用)При ответе это указывает, как долго служба будет недоступна.
  • при отправке429(太多请求)При ответе это указывает, как долго ждать, прежде чем сделать новый запрос.
  • При отправке ответа перенаправления, например301(永久移动), который представляет минимальное количество времени, в течение которого пользовательскому клиенту предлагается подождать, прежде чем сделать запрос на перенаправление.

Значение поля может быть указано как конкретная дата и время или как количество секунд с момента создания ответа, например

Retry-After: Wed, 21 Oct 2015 07:28:00 GMT
Retry-After: 120

Server

Заголовок сервера содержит информацию о программном обеспечении, используемом исходным сервером для обработки запроса.

Следует избегать чрезмерно подробных и подробных значений сервера, так как они могут раскрывать детали внутренней реализации, что может облегчить злоумышленникам обнаружение и использование известных брешей в безопасности. Например, написано следующее

Server: Apache/2.4.1 (Unix)

Vary

Заголовок ответа HTTP Vary определяет, как сопоставляются заголовки запросов, чтобы решить, можно ли использовать кэшированный ответ вместо запроса нового с исходного сервера.

Vary: User-Agent

www-Authenticate

HTTP WWW-AuthenticateЗаголовок ответа определяет метод аутентификации, который должен использоваться для получения доступа к ресурсу. Заголовок WWW-аутентификации отправляется с несанкционированным ответом 401. Его общее представление выглядит следующим образом

WWW-Authenticate: Basic
WWW-Authenticate: Basic realm="Access to the staging site", charset="UTF-8"

Access-Control-Allow-Origin

Возвращаемый HTTP-заголовок может иметь Access-Control-Allow-Origin,Access-Control-Allow-OriginУказание источника указывает браузеру разрешить доступ к ресурсам из этого источника. else - для запросов без учетных данных*Подстановочный знак, который указывает браузеру разрешить доступ к ресурсу любому источнику. Например, чтобы разрешить источникhttps://mozilla.orgВ коде доступа к ресурсу можно указать:

Access-Control-Allow-Origin: https://mozilla.org
Vary: Origin

Если сервер указывает один источник вместо*подстановочные знаки, сервер также должен включать в заголовок ответа Vary.Origin, чтобы указать клиенту, что ответ сервера будет варьироваться в зависимости от значения исходного заголовка запроса.

заголовок сущности

Заголовки сущностей используются в HTTP-запросах и ответах, например, заголовки Content-Length, Content-Language, Content-Encoding являются заголовками сущностей. Заголовки сущностей не ограничиваются заголовками запросов или ответов. В следующем примереContent-Lengthявляется заголовком объекта, но он появляется в сообщении запроса

POST /myform.html HTTP/1.1
Host: developer.mozilla.org
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0
Content-Length: 128

Поговорим о том, что содержат заголовки сущностей

  • Allow
  • Content-Encoding
  • Content-Language
  • Content-Length
  • Content-Location
  • Content-MD5
  • Content-Range
  • Content-Type
  • Expires
  • Last-Modified

Поговорим об этом отдельно

Allow

Заголовок объекта HTTPAllowВ коллекции перечислены ресурсы для поддержки метода. Если сервер отвечает405 Method Not AllowedКод состояния, чтобы указать, какие методы запроса могут быть использованы, этот заголовок должен быть отправлен. Например

Allow: GET, POST, HEAD

Этот код означает, что сервер разрешает поддержкуGET,POSTиHEADметод. Когда сервер получает неподдерживаемый метод HTTP, он возвращает код состояния405 Method Not Allowedвернулся в качестве ответа.

Content-Encoding

мы сказали вышеAccept-EncodingЭто кодировка контента, которую клиент ожидает от сервера, но на самом деле кодировка контента, возвращаемая сервером клиенту, на самом деле черезContent-Encodingвозвращение. Кодирование содержимого относится к сжатию без потери информации об объекте. Также есть четыре основных, таких же, как Accept-Encoding, ониgzip, сжать, выкачать, личность. Ниже приведен набор кодировок сжатия содержимого запроса/ответа.

Accept-Encoding: gzip, deflate
Content-Encoding: gzip

Content-Language

Поле заголовка Content-Language сообщит клиенту, какой естественный язык используется сервером. Это относительно Accept-Language. Ниже приведен набор языковых типов, используемых в запросе/ответе.

Content-Language: de-DE, en-CA

Content-Length

Заголовок сущности Content-Length относится к фактическому размеру тела в байтах, которое сервер отправляет клиенту.

Content-Length: 3000

Как и выше, размер тела, возвращаемый сервером клиенту, составляет 3000 байт.

Content-Location

Расположение Content не соответствует приметному расположению, потому что нет такого заголовка хахахаха. На самом деле содержимое местоположение соответствуетLocation.

Location и Content-Location не совпадают, Location представляет перенаправленный URL-адрес, а Content-Location представляет собой прямой URL-адрес, используемый для доступа к ресурсу без дальнейшего согласования содержимого в будущем. Location — это заголовок, связанный с ответом, а Content-Location — это заголовок, связанный с возвращаемыми данными, если вы не понимаете, взгляните на таблицу ниже.

Request header Response header
Accept: application/json, text/json Content-Location: /documents/foo.json
Accept: application/xml, text/xml Content-Location: /documents/foo.xml
Accept: text/plain, text/* Content-Location: /documents/foo.txt

Content-MD5

Клиент выполняет тот же алгоритм MD5 с телом полученного сообщения, а затем сравнивает его с полем заголовка Content-MD5.

Content-MD5: e10adc3949ba59abbe56e057f20f883e

Поле заголовка Content-MD5 представляет собой строку значений, сгенерированную алгоритмом MD5, предназначенную для проверки того, остается ли тело сообщения неповрежденным при передаче, не подвергалось ли оно модификации, а также для подтверждения прихода передачи.

Content-Range

Заголовок ответа HTTP Content-Range устанавливается для запросов диапазона, а поле заголовка используется при возврате ответа.Content-Range, который может сказать клиенту, какую часть объекта ответа соответствует запросу клиента, поле находится в байтах. Его общее представление выглядит следующим образом

Content-Range: bytes 200-1000/67589 

Приведенный выше код означает, что из всех67589возвращено в байтах200-1000байты контента

Content-Type

Заголовок HTTP-ответа Content-Type указывает тип мультимедиа объекта в сущности и используется так же, как поле заголовка Accept, чтобы указать тип мультимедиа, на который может ответить сервер.

Expires

Заголовок объекта HTTP Expires содержит日期/时间, после чего ответ считается просроченным, в течение времени ответа он считается действительным. Специальные значения, такие как 0, указывают дату в прошлом, указывая на то, что срок действия ресурса истек.

Expires: Wed, 21 Oct 2015 07:28:00 GMT

Дата или время будут аннулированы исходным сервером для клиента, кеш-сервер после получения ответа Expires определяет, будет ли кеш возвращен клиенту.

Если сервер-источник не хочет, чтобы сервер кэширования кэшировал ресурс, лучше записать то же значение времени, что и поле заголовка Date в поле Expires. Однако если в поле заголовка Cache-Control указана команда max-age, команда max-age будет обрабатываться в первую очередь, чем поле заголовка Expires.

Last-Modified

поле сущностиLast-ModifiedУказывает время последней модификации ресурса, используется в качестве валидатора для определения того, является ли полученный или сохраненный ресурс одним и тем же. это тоже не работаетETagОн настолько точен, что его можно использовать как запасной механизм, содержащийIf-Modified-SinceилиIf-Unmodified-SinceУсловные запросы на заголовки будут использовать это поле. Его общее представление выглядит следующим образом

Last-Modified: Wed, 21 Oct 2015 07:28:00 GMT

Суммировать

Эта статья в основном знакомит с основными понятиями четырех HTTP-заголовков, но не охватывает их все. В конце концов, HTTP-заголовков слишком много. Вышеприведенные введения в основном представляют собой некоторые понятия, обычно используемые в повседневной работе.Черная технология HTTP

Ссылка на статью:

developer.Mozilla.org/en-US/docs/…

Уууууууууууууууууууууууууууууууууууу.

Уууууууууууууууууууууууууууууууууууу.

developer.Mozilla.org/en-US/docs/…

«Иллюстрированный HTTP»

Woohoo. Я 3.org/protocols/th…

blog.CSDN.net/QQ_29405933…

Итак, Wikipedia.org/wiki/list_oh...