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

  1. задать значение типовых заголовков;
  2. добавить свои произвольные заголовки;
  3. указать версию HTTP-протокола: 1.0, 1.1, 2 (проверяет поддерживается ли HTTP/2);
  4. указать метод запроса, время ожидания и данные postdata для отправки на сервер;
  5. также пузомерка проверяет корректность ответа на запросы If-Modified-Since, If-None-Match, если в ответе сервера есть Last-Modified или ETag.

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

Обязательные заголовки


  • Date
  • Content-Type с указанием charset для текстового контента желательно utf-8
  • Content-Encoding сжатие для текстового контента

Устаревшие и ненужные заголовки


  • Server с детальной версией веб-сервера
  • X-Power-By
  • X_ASPNET-Version
  • Expires
  • Pragma
  • P3P
  • Via
  • X-UA-Compatible

Желательные заголовки для безопасности


  • X-Content-Type-Options
  • X-XSS-Protection
  • Strict-Transport-Security
  • Referrer-Policy
  • Feature-Policy
  • Content-Security-Policy или Content-Security-Policy-Report-Only для запрета встроенных скриптов и стилей.

Заголовки для кэширования


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

  • Last-Modified
  • ETag
  • Cache-Control
  • Vary
  • Важно, чтобы сервер корректно отвечал на заголовки: If-Modified-Since и If-None-Match

HTTP/2


Сейчас сервер должен поддерживать HTTP/2. По умолчанию сервис проверяет работу сервера по HTTP/2. Если ваш сервер не поддерживает HTTP/2, то выбирайте HTTP/1.1.