В прошлой статье мы кратко объяснили основные функции и использование 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»