- Оригинальный адрес:The headers we don't want
- Оригинальный автор:Andrew Betts
- Перевод с:Программа перевода самородков
- Постоянная ссылка на эту статью:GitHub.com/rare earth/gold-no…
- Переводчик:Ethan
- Корректор:Hank
Если вы хотите узнать больше об информации заголовка http, пожалуйста, подпишитесь на 22 маяРечь Андрея в Лондоне.
Заголовки HTTP — важный способ управления кэшированием и тем, как браузеры обрабатывают веб-контент. Но много раз он используется неправильно или избыточно, что не только не достигает нашей цели, но и увеличивает накладные расходы при загрузке страницы. Первая статья из этой серии статей о http-заголовках, давайте взглянем на эти ненужные http-заголовки.
Большинство разработчиков понимают некоторую информацию заголовка HTTP и используют ее для обработки контента. как все знаютContent-Type
иContent-Length
, они все общие. Но недавно,Content-Security-Policy
иStrict-Transport-Security
Такие заголовки использовались для повышения безопасности,Link rel=preload
Используется для повышения производительности. Только очень немногие веб-сайты используют их, хотя они широко поддерживаются браузерами.
В то же время существует множество уже существующих и очень популярных заголовков, которые не практичны. мы можем использоватьHTTP-архивчтобы подтвердить это.HTTP-архивэто проект, спонсируемый Fastly и управляемый Google, используется ежемесячноWebPageTest500 000 веб-сайтов загружены и протестированы на производительность, результаты опубликованы вBigQuery.
В данных архива HTTP приведен список из 30 самых популярных заголовков ответа (на основе подсчета заголовков большинства сайтов в процессе архивирования), а также обзор того, насколько они полезны:
Header name | Requests | Domains | Status |
---|---|---|---|
date | 48779277 | 535621 | Required by protocol |
content-type | 47185627 | 533636 | Usually required by browser |
server | 43057807 | 519663 | Unnecessary |
content-length | 42388435 | 519118 | Useful |
last-modified | 34424562 | 480294 | Useful |
cache-control | 36490878 | 412943 | Useful |
etag | 23620444 | 412370 | Useful |
content-encoding | 16194121 | 409159 | Required for compressed content |
expires | 29869228 | 360311 | Unnecessary |
x-powered-by | 4883204 | 211409 | Unnecessary |
pragma | 7641647 | 188784 | Unnecessary |
x-frame-options | 3670032 | 105846 | Unnecessary |
access-control-allow-origin | 11335681 | 103596 | Useful |
x-content-type-options | 11071560 | 94590 | Useful |
link | 1212329 | 87475 | Useful |
age | 7401415 | 59242 | Useful |
x-cache | 5275343 | 56889 | Unnecessary |
x-xss-protection | 9773906 | 51810 | Useful |
strict-transport-security | 4259121 | 51283 | Useful |
via | 4020117 | 47102 | Unnecessary |
p3p | 8282840 | 44308 | Unnecessary |
expect-ct | 2685280 | 40465 | Useful |
content-language | 334081 | 37927 | Debatable |
x-aspnet-version | 676128 | 33473 | Unnecessary |
access-control-allow-credentials | 2804382 | 30346 | Useful |
x-robots-tag | 179177 | 24911 | Not relevant to browsers |
x-ua-compatible | 489056 | 24811 | Useful |
access-control-allow-methods | 1626129 | 20791 | Useful |
access-control-allow-headers | 1205735 | 19120 | Useful |
Акцентируем внимание только на тех заголовках, которые здесь не нужны, и объясняем, почему они не нужны и что с ними делать.
Бесполезная информация (server, x-powered-by, via)
Вы можете гордиться своим выбором серверного программного обеспечения, но большинству людей (пользователей) все равно. И эта информация заголовка может привести к утечке вашей конфиденциальной информации и сделать ваш сайт атакованным.
Server: apache
X-Powered-By: PHP/5.1.1
Via: 1.1 varnish, 1.1 squid
RFC7231Стандарт позволяет серверу включать в ответServer
Информация заголовка, которая идентифицирует серверное программное обеспечение, используемое для обслуживания содержимого. Наиболее распространенными являются «apache» и «nginx». Хотя это разрешено, это не является обязательным, но на самом деле это мало что значит для разработчиков или конечных пользователей. Однако на сегодняшний день это третий по популярности заголовок HTTP-ответа в Интернете.
X-Powered-By
— это популярный заголовок, который не определен ни в одном стандарте и также обычно используется для обозначения платформы прикладного программного обеспечения за веб-сервером. Распространенными значениями являются «ASP.net», «PHP» и «Express», которые на самом деле не дают никакой пользы и занимают место.
Спорнее должно бытьVia
, при добавлении к ответу любого прокси, который идентифицирует прокси, через который он передается,RFC7230Требуется его оговорка. Это может быть полезно при проксировании имен хостов, но чаще всего это общий идентификатор, такой как «vegur», «varnish» или «squid». Удаление или не установка этого заголовка технически противоречит спецификации, но ни один браузер ничего с ним не делает, так что ничего страшного, если вы захотите его удалить.
Устаревшие стандарты (P3P, Expires, X-Frame-Options)
Другой тип заголовков http — это те, которые имеют эффект в браузере, но не являются (или больше не являются) лучшим способом сделать это.
P3P: cp="this is not a p3p policy"
Expires: Thu, 01 Dec 1994 16:00:00 GMT
X-Frame-Options: SAMEORIGIN
P3P
Это любопытная вещь. Я не знаю об этом, и мне даже любопытно, что его наиболее распространенным значением является «это не политика p3p». Так это или нет?
Это восходит кПопытки стандартизировать машиночитаемые политики конфиденциальности, возникли разногласия по поводу того, как отображать данные в браузере, и только один браузер реализовал этот http-заголовок — Internet Explorer. Даже в браузере IE,P3P
Он также не приносит никаких визуальных эффектов пользователю, ему просто нужно разрешить доступ к сторонним файлам cookie в iframe. Некоторые сайты даже устанавливают нестандартное правило P3P, например, приведенное выше, хотя это и нежелательно.незаконный.
Излишне говорить, что чтение сторонних файлов cookie, как правило, не рекомендуется, поэтому вам также не нужно устанавливать их, если вы планируете этого не делать.P3P
информация заголовка
Expires
Популярность достигла невероятного состояния, представьте себе такую ситуацию,Cache-Control
Срок действия истекает через 20 лет. еслиCache-Control
информация заголовка содержитmax-age
инструкция, то любая на тот же ответExpires
информация заголовка будет проигнорирована. Но существует большое количество веб-сайтов, которые устанавливают и то, и другое.Expires
Информация заголовка обычно устанавливается по Гринвичу --Thu, 01 Dec 1994 16:00:00
. Многие люди делают это, потому что не хотят, чтобы содержимое сайта кэшировалось и копировалось, поэтому они простоиз спецификацииСкопируйте эту дату экземпляра для заполнения.
На самом деле мы не должны. если вы установитеExpires
информацию заголовка и установить для него прошедшее время, то вы можете установить его следующим образом, чтобы заменить предыдущую практику:
Cache-Control: no-cache, private
Некоторые инструменты, которые проверяют ваш сайт, позволяют добавить значение «SAMEORIGIN».X-Frame-Options
информация заголовка. Это сообщает браузеру, что вы отказываетесь от фреймов других веб-сайтов, что также является мерой предосторожности.нажмите атакураспространенный метод.
Тем не менее, следующая более последовательная поддержка и более надежное определение поведения могут достичь того же эффекта:
Content-Security-Policy: frame-ancestors 'self'
В рамках информации заголовка (csp) вы также получаете другие преимущества (подробнее об этом позже). так что у тебя может не бытьX-Frame-Options
информация заголовка.
Данные отладки (X-ASPNet-версия, X-кэш)
Удивительно, но некоторые из наиболее часто используемых заголовков не имеют никакого стандарта. На практике это означает, что тысячи веб-сайтов спонтанно соглашаются использовать определенные заголовки http определенным образом.
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).
Особенно,X-Cache
На самом деле он добавляется Fastly (другие CDN также делают это) и некоторая другая информация заголовка, связанная с Fastly, такая какX-Cache-Hits
иX-Served-By
. Когда отладка включена, мы добавляем больше заголовков, напримерFastly-Debug-Path
иFastly-Debug-TTL
.
Эти заголовки не распознаются ни одним браузером, и их удаление не повлияет на отрисовку страницы. Однако, поскольку эти заголовки могут предоставлять полезную информацию для разработчиков, вы можете сохранить некоторые средства информирования разработчиков.
Неправильно распознается (Прагма)
Я не собирался писать статью о заголовке «Pragma» в 2018 году, но он по-прежнему занимает 11-е место по данным нашего HTTP-архива. Pragma устарела еще в 1997 году, и она никогда не предназначалась для использования в качестве заголовка ответа — как указано, она имеет смысл только как часть запроса.
Pragma: no-cache
Тем не менее, он настолько широко используется в качестве заголовка ответа, что некоторые браузеры также распознают его. Теперь ваш ответ пройдет идентификациюPragma
кеш без распознаванияCache-Control
вероятность мала. Если вы хотите убедиться, что что-то не кэшировано, вам просто нужноCache-Control: no-cache, private
.
Без браузера (тег X-Robots)
Один из 30 лучших заголовков не является браузерным заголовком.X-Robots-Tag
Используется против поисковых роботов, таких как боты Google и Bing. Поскольку для браузера он не имеет никакого значения, вы можете установить этот заголовок только тогда, когда вам нужно иметь дело со сканерами. В то же время это может затруднить тестирование или нарушить условия обслуживания поисковой системы.
Bugs
Наконец, стоит упомянуть о простых ошибках. впроситьсередина,Host
Есть смысл в том, что заголовок есть, но если он присутствует в ответе, вероятно, ваша служба неправильно настроена (мне бы хотелось знать, как это произошло). Тем не менее, упомянутый выше HTTP-архив вернул 68 доменов.Host
информация заголовка.
удалить информацию заголовка
Если ваш сайт использует услуги Fastly, поздравляем, используйтеVCLУдобно удалять информацию заголовка. Возможно, вы захотите сохранить действительно полезные отладочные данные для своей команды разработчиков, но скрыть их от публичных пользователей, что имеет большой смысл, что вы можете легко сделать, проверив файлы cookie или передав заголовки HTTP:
unset resp.http.Server;
unset resp.http.X-Powered-By;
unset resp.http.X-Generator;
if (!req.http.Cookie:debug && !req.http.Debug) {
unset resp.http.X-Amzn-RequestID;
unset resp.http.X-Cache;
}
В следующей статье этой серии я расскажу о лучших методах настройки заголовков HTTP и о том, как их включить.
Программа перевода самородковэто сообщество, которое переводит высококачественные технические статьи из ИнтернетаНаггетсДелитесь статьями на английском языке на . Охват контентаAndroid,iOS,внешний интерфейс,задняя часть,блокчейн,продукт,дизайн,искусственный интеллектЕсли вы хотите видеть более качественные переводы, пожалуйста, продолжайте обращать вниманиеПрограмма перевода самородков,официальный Вейбо,Знай колонку.