content length что такое

Ненужные HTTP-заголовки

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

В то же время есть много чрезвычайно популярных заголовков, которые вообще не новые и не очень полезные. Мы можем это доказать с помощью HTTP Archive, проекта под управлением Google и спонсируемого Fastly, который каждый месяц при помощи WebPageTest скачивает 500 000 сайтов и выкладывает результаты в BigQuery.

Вот 30 самых популярных заголовков ответов по данным HTTP Archive (на основе количества доменов в архиве, которые выдают каждый заголовок), и примерная оценка полезности каждого из них:

ЗаголовокЗапросовДоменовСтатус
date48779277535621Требуется по протоколу
content-type47185627533636Обычно требуется браузером
server43057807519663Необязателен
content-length42388435519118Полезен
last-modified34424562480294Полезен
cache-control36490878412943Полезен
etag23620444412370Полезен
content-encoding16194121409159Требуется для сжатого контента
expires29869228360311Необязателен
x-powered-by4883204211409Необязателен
pragma7641647188784Необязателен
x-frame-options3670032105846Необязателен
access-control-allow-origin11335681103596Полезен
x-content-type-options1107156094590Полезен
link121232987475Полезен
age740141559242Полезен
x-cache527534356889Необязателен
x-xss-protection977390651810Полезен
strict-transport-security425912151283Полезен
via402011747102Необязателен
p3p828284044308Необязателен
expect-ct268528040465Полезен
content-language33408137927Спорно
x-aspnet-version67612833473Необязателен
access-control-allow-credentials280438230346Полезен
x-robots-tag17917724911Не имеет значения для браузеров
x-ua-compatible48905624811Необязателен
access-control-allow-methods162612920791Полезен
access-control-allow-headers120573519120Полезен

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

Тщеславие (server, x-powered-by, via)

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

Server: apache
X-Powered-By: PHP/5.1.1
Via: 1.1 varnish, 1.1 squid

X-Powered-By — самый популярный заголовок из тех, что не определены никаким стандартом, и у него похожая цель: обычно он указывает платформу приложений, на которой работает сервер. Самые популярные ответы включают в себя «ASP.net», «PHP» и «Express». Опять же, это не несёт никакой ощутимой пользы и просто занимает место.

Устаревшие стандарты (P3P, Expires, X-Frame-Options, X-UA-Compatible)

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

P3P: cp=»this is not a p3p policy»
Expires: Thu, 01 Dec 1994 16:00:00 GMT
X-Frame-Options: SAMEORIGIN
X-UA-Compatible: IE=edge

P3P — забавная штучка. Я понятия не имел, что это такое. Ещё забавнее, что одно из самых распространённых содержаний заголовка P3P — «Это не правило P3P». Ну так это оно или нет?

Тут история восходит к попытке стандартизировать машиночитаемые правила приватности. Были разногласия по поводу того, как отображать данные в браузерах, и только один браузер реализовал поддержку этого заголовка — Internet Explorer. Но даже в нём P3P не имел никакого визуального эффекта для пользователя; он просто должен был присутствовать, чтобы разрешить доступ к сторонним кукам во фреймах. Некоторые сайты даже установили правила несоблюдения P3P, как в примере выше, хотя делать так весьма сомнительно.

content length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такое

Но просто незачем это делать. Если у вас заголовок Expires с датой из прошлого, просто замените его на:

Cache-Control: no-store, private

( no-store — слишком строгая директива не записывать контент в постоянное хранилище, так что вы можете предпочесть no-cache ради лучшей производительности, например, для навигации назад/вперёд или возобновления «спящих» вкладок в браузере)

Некоторые инструменты проверки сайтов посоветуют добавить заголовок X-Frame-Options со значением ‘SAMEORIGIN’. Он говорит браузерам, что вы отказываетесь отдавать контент во фрейм на другом сайте: как правило, это хорошая защита от кликджекинга. Но того же эффекта можно достигнуть другим заголовком с более последовательной поддержкой и более надёжным поведением:

Content-Security-Policy: frame-ancestors ‘self’

Данные для отладки (X-ASPNet-Version, X-Cache)

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

X-Cache: HIT
X-Request-ID: 45a336c7-1bd5-4a06-9647-c5aab6d5facf
X-ASPNet-Version: 3.2.32
X-AMZN-RequestID: 0d6e39e2-4ecb-11e8-9c2d-fa7ae01bbebc

На самом деле, эти «неизвестные» заголовки не выдумали разработчики. Обычно это артефакты использования определённых серверных фреймворков, софта или сервисов конкретных поставщиков (например, последний заголовок типичен для AWS).

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

Недоразумения (Pragma)

Не-браузеры (X-Robots-Tag)

Один заголовок в нашем топ-30 не является заголовком для браузера. X-Robots-Tag предназначен для краулеров, таких как боты Google или Bing. Поскольку для браузера он бесполезен, то можете установить такой ответ только на запросы краулеров. Или вы решите, что это затрудняет тестирование или нарушает условия использования поисковой системы.

Наконец, стоит закончить почётном упоминанием простых ошибок. Заголовок Host имеет смысл в запросе, но если он встречается в ответе, то вероятно ваш сервер неправильно настроен (и я хотел бы знать, как именно). Тем не менее 68 доменов в HTTP Archive возвращают заголовок Host в своих ответах.

Удаление заголовков на edge-сервере CDN

К счастью, если ваш сайт работает у нас на Fastly, то удалить заголовки довольно просто с помощью VCL. Если хотите сохранить команде разработчиков действительно полезные данные для отладки, но скрыть их от общей публики, то это легко делается по куки или входящему заголовку HTTP:

unset resp.http.Server;
unset resp.http.X-Powered-By;
unset resp.http.X-Generator;

В следующей статье я расскажу о лучших практиках для действительно нужных заголовков и как активировать их на edge-сервере CDN.

Источник

Что такое поле «Content-Length» в заголовке HTTP?

особенно в случае «Content-Type: application / x-www-form-urlencoded».

8 ответов

не имеет значения, что такое content-type.

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

на Content-Length заголовок-это число, обозначающее точную длину байта тела HTTP. Тело HTTP запускается сразу после первой пустой строки, найденной после начальной строки и заголовков.

вообще Content-Length заголовок используется для HTTP 1.1, чтобы принимающая сторона знала, когда текущий ответ * закончил, так что соединение можно повторно использовать для другого запроса.

кроме того, Content-Length заголовок можно опустить и chunked Transfer-Encoding заголовок можно использовать.

если как Content-Length и Transfer-Encoding заголовки отсутствуют, затем в конце ответа соединение должно быть закрыто.

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

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

любое содержание-длина больше или равно нулю-допустимое значение. Раздел 4.4 описывает, как определить длина тела сообщения, если a Content-длина не указана.

заметим, что значение этого поля значительно отличается от соответствующее определение в MIME, где используется необязательное поле внутри » сообщение / внешнее тело» тип содержимого. В HTTP это должно быть отправлено, когда длина сообщения может быть определено до быть передается, если это не запрещено по правилам раздела 4.4.

моя интерпретация заключается в том, что это означает длину «на проводе», т. е. длину *закодированного» контента

поле entity-header Content-Length указывает размер тела Сущности в десятичном числе октетов, отправленных получателю, или, в случае метода HEAD, размер тела сущности, которое было бы отправлено, если бы запрос был GET.

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

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

обратите внимание, что значение этого поля значительно отличается от соответствующего определения в MIME, где это необязательное поле, используемое в типе содержимого «сообщение/внешнее тело». В HTTP он должен быть отправлен всякий раз, когда сообщение длина может быть определена до передачи, если это не запрещено правилами в разделе 4.4.

поле entity-header Content-Length указывает размер тела Сущности в десятичном числе октетов, отправленного получателю, или, в случае метода HEAD, размер тела сущности, которое было бы отправлено, если бы запрос был GET.

Content-Length = » Content-Length «:» 1*цифра

приложения должны использовать это поле для указания длина передачи тела сообщения.

в PHP вы бы использовали что-то вроде этого.

в случае «Content-Type: application / x-www-form-urlencoded» закодированные данные отправляются агенту обработки, назначенному для установки длины или размера данных, которые вы собираетесь опубликовать.

Источник

Что такое поле Content-Length в заголовке HTTP?

Особенно в случае «Content-Type: application/x-www-form-urlencoded».

ОТВЕТЫ

Ответ 1

Не имеет значения, каков тип содержимого.

Ответ 2

Ответ 3

Ответ 4

Как правило, заголовок Content-Length используется для HTTP 1.1, так что получающая сторона знает, когда текущий ответ * завершен, поэтому можно повторно использовать для другого запроса.

Ответ 5

Поле заголовка объекта Content-Length указывает размер тела объекта, в десятичном числе OCTET, отправленных в получателя или, в случае HEAD, размер сущность-орган, который был бы отправлен если бы запрос был GET.

Приложения СЛЕДУЕТ использовать это поле для указать длину передачи тело сообщения, если это не запрещено правилами в разделе 4.4.

Любая длина содержимого больше или равное нулю, является допустимым значением. Раздел 4.4 описывает, как определить длина тела сообщения, если Content-Length не указывается.

Обратите внимание, что значение этого поля равно существенно отличается от соответствующее определение в MIME, где используется дополнительное поле внутри «сообщения/внешнего тела», Тип содержимого. В HTTP это ДОЛЖНО отправляется всякий раз, когда длина сообщения может быть определенными до переданы, если это не запрещено по правилам в разделе 4.4.

Моя интерпретация заключается в том, что это означает длину «на проводе», то есть длину * закодированного содержимого

Ответ 6

Наиболее распространенное использование POST, безусловно, заключается в отправке данных формы HTML в CGI скрипты. В этом случае Content-Type: заголовок обычно применение/х-WWW-форм-urlencoded, и заголовок Content-Length: длина URL-кодированной формы данных (здесь примечание о кодировании URL). CGI script получает сообщение тело через STDIN и декодирует его. Здесь типичная подача формы, используя POST:

Ответ 7

Поле Content-Length entity-header указывает размер тела сущности, десятичного числа OCTET, отправленного получателю или, в случае метода HEAD, размер тела объекта, который будет иметь был отправлен, если запрос был GET.

Приложения СЛЕДУЕТ использовать это поле, чтобы указать длину передачи тела сообщения, если это не запрещено правилами в разделе 4.4.

Любое содержание-длина, большее или равное нулю, является допустимым значением. Раздел 4.4 описывает, как определить длину тела сообщения, если Content-Length не задано.

Обратите внимание, что значение этого поля существенно отличается от соответствующего определения в MIME, где оно является необязательным полем, используемым в типе контента «message/external-body». В HTTP он ДОЛЖЕН быть отправлен всякий раз, когда длина сообщения может быть определена до передачи, если это не запрещено правилами в разделе 4.4.

Ответ 8

Поле Content-Length entity-header указывает размер тела сущности, десятичного числа OCTET, отправленного получателю или, в случае метода HEAD, размер тела объекта, который будет иметь был отправлен, если запрос был GET.

Content-Length = «Content-Length» «:» 1 * DIGIT

Приложения СЛЕДУЕТ использовать это поле, чтобы указать длину передачи тела сообщения.

В PHP вы бы использовали что-то вроде этого.

В случае «Content-Type: application/x-www-form-urlencoded» закодированные данные отправляются агенту обработки, указанному так, что вы можете установить длину или размер данных, которые собираетесь отправлять.

Источник

HTTP Headers для «чайников»

Russian (Pусский) translation by Yuri Yuriev (you can also view the original English article)

Являетесь вы программистом или нет, вы видели его повсюду в Интернете. На данный момент в адресной строке браузера отображается нечто, что начинается с «https: //». Даже ваш первый скрипт Hello World отправил HTTP-header без вашего понимания. В этой статье мы собираемся узнать об основах HTTP-заголовков и о том, как их можно использовать в наших веб-приложениях.

Что такое HTTP Headers?

HTTP значит «Hypertext Transfer Protocol» (Протокол передачи гипертекста). Всемирная паутина использует этот протокол. Он был создан в начале 1990-х годов. Почти всё, что вы видите в вашем браузере, передаётся на ваш компьютер через HTTP. Например, когда вы открыли страницу этой статьи, ваш браузер отправил более 40 HTTP-запросов и получил HTTP-ответы для каждого из них.

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

content length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такоеcontent length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такое content length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такое

Пример

Когда вы вводите URL-адрес в адресной строке, ваш браузер отправляет HTTP-запрос, и он может выглядеть так:

После этого запроса ваш браузер получает ответ HTTP, который может выглядеть так:

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

Эти HTTP-запросы также отправляются и принимаются для других вещей, таких как изображения, CSS-файлы, файлы JavaScript и т. д. Именно поэтому я сказал ранее, что ваш браузер отправил не менее 40 или более HTTP-запросов, поскольку вы загрузили только эту страницу статьи.

Теперь давайте рассмотрим структуру более подробно.

Как увидеть HTTP Headers

Для анализа HTTP-заголовков я использую следующие расширения Firefox:

content length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такоеcontent length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такое content length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такое

content length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такоеcontent length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такое content length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такое

Далее в этой статье мы увидим примеры кода в PHP.

Структура запроса HTTP

content length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такоеcontent length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такое content length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такое

Первая строка HTTP-запроса называется линией запроса и состоит из трёх частей:

Остальная часть запроса содержит HTTP headers как пары «Name: Value» в каждой строке. Они содержат различную информацию о HTTP-запросе и вашем браузере. Например, строка «User-Agent» предоставляет информацию о версии браузера и операционной системе, которую вы используете. «Accept-Encoding» сообщает серверу, может ли ваш браузер принимать сжатый output, например gzip.

Возможно, вы заметили, что данные cookie также передаются внутри HTTP-заголовка. И если бы ссылочный url, это было бы в header тоже.

Большинство этих заголовков являются необязательными. Этот HTTP-запрос мог быть таким же маленьким:

И вы всё равно получите правильный ответ от веб-сервера.

Методы запроса

Три наиболее часто используемых метода запроса: GET, POST и HEAD. Вы, вероятно, уже знакомы с первыми двумя, начиная с написания html-форм.

GET: получение документа

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

Например, при загрузке статьи Nettuts +, самая первая строка HTTP-запроса выглядит так:

Как только html загрузится, браузер начнет отправлять GET-запрос изображений, который может выглядеть так:

Веб-формы можно настроить под метод GET. Вот пример.

Когда эта форма отправлена, HTTP-запрос начинается так:

Вы можете видеть, что каждый ввод формы был добавлен в строку запроса.

POST: отправка данных на сервер

Даже если вы можете отправлять данные на сервер с помощью GET и строки запроса, во многих случаях POST будет предпочтительнее. Отправка больших объёмов данных с помощью GET нецелесообразна и имеет ограничения.

Запросы POST чаще всего отправляются веб-формами. Давайте изменим предыдущий пример формы на метод POST.

Отправка этой формы создает HTTP-запрос следующим образом:

Здесь нужно отметить три важных момента:

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

HEAD: получение информации заголовка

HEAD идентичен GET, за исключением того, что сервер не возвращает содержимое HTTP-ответа. Когда вы отправляете запрос HEAD, это означает, что вас интересуют только код ответа и HTTP headers, а не сам документ.

«Когда вы отправляете запрос HEAD, это означает, что вас интересуют только код ответа и HTTP headers, а не сам документ».

С помощью этого метода браузер может проверить, был ли документ изменён для целей caching. Он также может проверить, существует ли документ вообще.

Например, если у вас много ссылок на веб-сайте, вы можете периодически отправлять HEAD-запросы каждой из них, чтобы проверить наличие неработающих ссылок. Это будет намного быстрее, чем при использовании GET.

Структура ответа HTTP

После того, как браузер отправляет HTTP-запрос, сервер отвечает HTTP-ответом. Исключая контент, он выглядит так:

content length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такоеcontent length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такое content length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такое

Первой порцией данных является протокол. Обычно это снова HTTP/1.x или HTTP/1.1 на современных серверах.

Мы все видели «404» pages. Это число фактически приходит из части кода состояния HTTP-ответа. Если запрос GET будет создан для path, который сервер не может найти, он ответил бы 404, а не 200.

Остальная часть ответа содержит headers так же, как HTTP-запрос. Эти значения могут содержать информацию о софте сервера при последнем изменении страницы/файла, типе mime и прочее.

Опять же, большинство этих headers на самом деле являются необязательными.

Коды статуса HTTP

200 OK

Как упоминалось ранее, этот код состояния отправляется в ответ на успешный запрос.

206 Partial Content

Если приложение запрашивает только диапазон запрошенного файла, возвращается код 206.

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

404 Not Found

content length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такоеcontent length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такое content length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такое

Когда запрашиваемая страница или файл не найдена, сервер отправляет код ответа 404.

401 Unauthorized

Защищённые паролем веб-страницы отправляют этот код. Если вы не ввели логин правильно, вы можете увидеть следующее в вашем браузере.

content length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такоеcontent length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такое content length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такое

Обратите внимание, что это относится только к страницам, защищённым паролем HTTP, которые вызывают запросы для входа следующим образом:

content length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такоеcontent length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такое content length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такое

403 Forbidden

Если вам не разрешен доступ к странице, этот код может быть отправлен в ваш браузер. Это часто происходит, когда вы пытаетесь открыть URL-адрес для папки, в которой нет индексной страницы. Если параметры сервера не позволяют отображать содержимое папки, вы получите ошибку 403.

content length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такоеcontent length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такое content length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такое

Существуют другие способы блокировки доступа и 403 могут быть отправлены. Например, вы можете блокировать по IP-адресу с помощью некоторых директив htaccess.

302 (or 307) Moved Temporarily & 301 Moved Permanently

Эти два кода используются для перенаправления браузера. Например, когда вы используете службу сокращения URL, такую как bit.ly, именно так они перенаправляют людей, которые идут по ссылке.

302 и 301 обрабатываются браузером очень похоже, но они могут иметь различные значения для spiders поисковых систем. Например, если ваш сайт не готов для обслуживания, вы можете перенаправить его в другое место с помощью 302. Поисковая система продолжит проверку вашей страницы в будущем. Но если вы перенаправите с использованием 301, это сообщит spider, что ваш сайт переехал в это место навсегда. За более точной информацией: http://www.nettuts.com перейдите на https://net.tutsplus.com/ используя 301 код вместо 302.

500 Internal Server Error

content length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такоеcontent length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такое content length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такое

Этот код обычно отображается при сбое веб-скрипта. Большинство скриптов CGI не выводят ошибки непосредственно в браузер, в отличие от PHP. Если есть фатальные ошибки, они просто отправят код статуса 500. И тогда программист должен искать в журналах ошибок сервера, чтобы найти сообщения об ошибках.

Complete List

Вы можете найти полный список кодов состояния HTTP с их пояснениями here.

Заголовки HTTP в запросах HTTP

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

Это в основном имя host, включая домен и поддомен.

User-Agent

Этот заголовок может содержать несколько частей информации, таких как:

Именно так веб-сайты могут собирать определённую общую информацию о своих системах surfers. Например, они могут определить, использует ли surfer мобильный браузер и перенаправляет их на мобильную версию своего веб-сайта, который лучше работает с низким разрешением.

Accept-Language

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

Accept-Encoding

Большинство современных браузеров поддерживают gzip и отправляют это в header. Затем веб-сервер может отправить выходной HTML-код в сжатом формате. Это позволяет уменьшить размер до 80% для экономии пропускной способности и времени.

If-Modified-Since

Если веб-документ уже сохранен в кеше в браузере и вы посещаете его снова, ваш браузер может проверить, был ли документ обновлён, отправив следующее:

Существует также HTTP-заголовок Etag, который можно использовать для проверки текущего кэша. Мы поговорим об этом в ближайшее время.

Cookie

Как следует из названия, это отправляет файлы cookie, хранящиеся в вашем браузере для этого домена.

Это пары name=value, разделённые точками с запятой. Cookies могут также содержать id сеанса.

Referer

Как следует из названия, этот HTTP header содержит ссылочный url.

Например, если я зашел на домашнюю страницу Nettuts + и нажал ссылку на статью, этот header будет отправлен в мой браузер:

Возможно, вы заметили, что слово «referrer» написано с ошибкой, как «referer». К сожалению, он превратился в официальную спецификацию HTTP подобным образом и застрял.

Authorization

Когда веб-страница запрашивает авторизацию, браузер открывает окно входа в систему. Когда вы вводите имя пользователя и пароль в этом окне, браузер отправляет другой HTTP-запрос, но на этот раз он содержит этот header

Данные внутри header имеют кодировку base64. Например, base64_decode (‘bXl1c2VyOm15cGFzcw ==’) возвратит ‘myuser: mypass’

Подробнее об этом будет, когда мы поговорим о заголовке WWW-Authenticate.

Заголовки HTTP в ответах HTTP

Теперь мы рассмотрим некоторые из наиболее распространенных HTTP headers, найденных в HTTP-ответах.

В PHP вы можете установить заголовки ответа, используя функцию header(). PHP уже отправляет определённые заголовки автоматически, для загрузки содержимого и настройки файлов cookie и прочее. Вы можете увидеть headers, которые отправляются или будут отправляться с помощью функции headers_list (). Вы можете проверить, были ли уже отправлены заголовки с помощью функции headers_sent().

Cache-Control

Определение из w3.org: «Поле заголовка Cache-Control используется для указания директив, которые ДОЛЖНЫ выполняться всеми механизмами кэширования по цепочке запросов/ответов». Эти «механизмы кэширования» включают шлюзы и прокси, которые может использовать ваш интернет-провайдер.

«public» означает, что ответ может быть кэширован кем угодно. «max-age» указывает, сколько секунд действителен кеш. Разрешение кэширования вашего сайта может снизить нагрузку на сервер и пропускную способность, а также увеличить время загрузки в браузере.

Кэширование также может быть предотвращено с помощью директивы «no-cache».

Подробности смотрите в w3.org.

Content-Type

Этот header указывает «mime-type» документа. Затем браузер определяет, как интерпретировать содержимое на основании этого. Например, страница html (или PHP-скрипт с выходом html) может возвращать это:

Для gif-изображения это может быть отправлено.

Браузер может использовать внешнее приложение или расширение браузера на основе mime-type. Например, это приведет к загрузке Adobe Reader:

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

Вы можете найти список общих типов mime here.

В PHP вы можете использовать функцию finfo_file() для определения mime-типа файла.

Content-Disposition

Этот header указывает браузеру открыть окно загрузки файла, вместо того, чтобы пытаться проанализировать содержимое. Пример:

Это заставит браузер сделать это:

content length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такоеcontent length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такое content length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такое

Обратите внимание, что соответствующий заголовок Content-Type также должен быть отправлен вместе с этим:

Content-Length

Когда контент будет передаваться браузеру, сервер может указать его размер (в байтах), используя этот header.

Это особенно полезно при загрузке файлов. Именно так браузер может определить ход загрузки.

Например, вот сценарий-макет, который я написал, имитирует медленную загрузку.

content length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такоеcontent length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такое content length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такое

Теперь я собираюсь закомментировать заголовок Content-Length

Теперь результат такой:

content length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такоеcontent length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такое content length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такое

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

Это еще один header, который используется для кеширования. Это выглядит так:

Веб-сервер может отправлять этот header с каждым документом, который он обслуживает. Значение может быть основано на последней изменённой дате, размере файла или даже контрольной сумме файла. Браузер затем сохраняет это значение, так как он кэширует документ. В следующий раз, когда браузер запрашивает тот же файл, он отправляет это в HTTP-запросе:

Если значение Etag документа совпадает с этим, сервер будет отправлять код 304 вместо 200, и никакого содержимого. Браузер будет загружать содержимое из своего кеша.

Last-Modified

Как следует из названия, этот header указывает дату последнего изменения документа в формате GMT:

Это предлагает браузеру другой способ для cache документа. Браузер может отправить это в HTTP-запросе:

Мы уже говорили об этом ранее в разделе «If-Modified-Since».

Location

Этот заголовок используется для перенаправления. Если код ответа 301 или 302, сервер также должен отправить этот header. Например, когда вы перейдете на страницу http://www.nettuts.com, ваш браузер получит следующее:

В PHP вы можете перенаправить surfer так:

По умолчанию, это отправит 302 код ответа. Если вы хотите вместо 301 отправить:

Set-Cookie

Когда веб-сайт хочет установить или обновить файл cookie в вашем браузере, он будет использовать этот header.

Каждый файл cookie отправляется как отдельный header. Обратите внимание, что файлы cookie, установленные с помощью JavaScript, не проходят через HTTP headers.

В PHP вы можете установить cookie-файлы, используя функцию setcookie(), а PHP отправляет соответствующие HTTP headers.

Что приводит к отправке этого заголовка:

Если дата истечения срока действия не указана, cookie удаляется, когда окно браузера закрыто.

WWW-Authenticate

Сайт может отправить этот header для аутентификации пользователя через HTTP. Когда браузер увидит этот header, он откроет диалоговое окно входа в систему.

Что будет выглядеть так:

content length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такоеcontent length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такое content length что такое. Смотреть фото content length что такое. Смотреть картинку content length что такое. Картинка про content length что такое. Фото content length что такое

В руководстве PHP есть section, в котором приведены образцы кода, как это сделать в PHP.

Content-Encoding

Этот header обычно устанавливается, когда возвращаемое содержимое сжимается.

В PHP, если вы используете функцию обратного вызова ob_gzhandler(), она будет автоматически установлена.

Заключение

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *