Статус данного документа
Этот документ определяет протокол дорожки стандартов Интернета (Internet standards track protocol) для семейства Интернета, и предназначен для обсуждения и предложений по усовершенствованию. Пожалуйста обратитесь к текущему изданию "Официальных стандартов протоколов Интернет" (STD 1) для выяснения состояния стандартизации и статуса этого протокола. Распространение данного документа неограничено.
Тезисы
Протокол передачи Гипертекста (HTTP) — протокол прикладного уровня для распределенных, совместных, многосредных информационных систем. Это общий, платформно-независимый, объектно-ориентированный протокол, который может использоваться во многих задачах, таких как сервера имен и распределенные системы управления объектами, посредством расширения методов запроса.
Возможность HTTP — это печать и обсуждение представления данных, позволяющее строить системы независимо от передаваемых данных. HTTP используется в World Wide Web (WWW) начиная с 1990 года. Эта спецификация определяет протокол, упоминаемый как "HTTP/1.1".
Содержание
- 1. Введение
- 1.1. Цель
- 1.2. Требования
- 1.3. Терминология
- 1.4. Общее описание
- 2. Письменные соглашения и обобщенная грамматика
- 2.1. Увеличенная нормальная запись Бекуса-Наура (BNF)
- 2.2. Основные правила
- 3. Параметры протокола
- 3.1. Версия HTTP
- 3.2. Универсальные Идентификаторы Ресурсов (URI)
- 3.2.1. Общий синтаксис
- 3.2.2. HTTP URL
- 3.2.3. Сравнение URI
- 3.3. Форматы даты/времени
- 3.3.1. Полная дата
- 3.3.2. Разность секунд (delta seconds)
- 3.4. Кодовые таблицы (character sets)
- 3.5. Кодирование содержимого (content codings)
- 3.6. Кодирование передачи (transfer codings)
- 3.7. Медиа типы (Media Types)
- 3.7.1. Канонизация и предопределенные значения типа text
- 3.7.2. Типы Multipart
- 3.8. Лексемы программ (Product Tokens)
- 3.9. Качественные значения (Quality Values)
- 3.10. Метки языков (Language Tags)
- 3.11. Метки объектов (Entity Tags)
- 3.12. Единицы измерения диапазонов (Range Units)
- 4. HTTP сообщение (HTTP Message)
- 4.1. Типы сообщений
- 4.2. Заголовки сообщений
- 4.3. Тело cообщения
- 4.4. Длина сообщения
- 4.5. Общие поля заголовка
- 5. Запрос (Request)
- 5.1. Строка запроса (Request-Line)
- 5.1.1. Метод (Method)
- 5.1.2. Запрашиваемый URI (Request-URI)
- 5.2. Ресурс, идентифицируемый запросом
- 5.3. Поля заголовка запроса
- 6. Ответ (Response)
- 6.1. Строка состояния (Status-Line)
- 6.1.1. Код состояния и поясняющая фраза
- 6.2. Поля заголовка ответа
- 7. Объект (Entity)
- 7.1. Поля заголовка объекта
- 7.2. Тело объекта
- 7.2.1. Тип (Type)
- 7.2.2. Длина (Length)
- 8. Соединения (Connections)
- 8.1. Постоянные соединения (Persistent Connections)
- 8.1.1. Цель
- 8.1.2. Общее описание
- 8.1.3. Прокси-сервера (Proxy Servers)
- 8.1.4. Практические cоглашения
- 8.2. Требования к передаче сообщений
- 9. Определения методов (Method Definitions)
- 9.1. Безопасные и Idempotent Методы
- 9.1.1. Безопасные методы
- 9.1.2. Idempotent методы (Idempotent Methods)
- 9.2. OPTIONS
- 9.3. GET
- 9.4. HEAD
- 9.5. POST
- 9.6. PUT
- 9.7. DELETE
- 9.8. TRACE
- 10. Описания кодов состояния
- 10.1. 1xx — Информационные коды
- 10.1.1. 100 Продолжать, Continue
- 10.1.2. 101 Переключение протоколов, Switching Protocols
- 10.2. 2xx — Успешные коды
- 10.2.1. 200 ОК
- 10.2.2. 201 Создан, Created
- 10.2.3. 202 Принято, Accepted
- 10.2.4. 203 Не авторская информация, Non-Authoritative Information
- 10.2.5. 204 Нет содержимого, No Content
- 10.2.6. 205 Сбросить содержимое, Reset Content
- 10.2.7. 206 Частичное содержимое, Partial Content
- 10.3. 3xx — Коды перенаправления
- 10.3.1. 300 Множественный выбор, Multiple Choices
- 10.3.2. 301 Постоянно перенесен, Moved Permanently
- 10.3.3. 302 Временно перемещен, Moved Temporarily
- 10.3.4. 303 Смотреть другой, See Other
- 10.3.5. 304 Не модифицирован, Not Modified
- 10.3.6. 305 Используйте прокси-сервер, Use Proxy
- 10.4. 4xx — Коды ошибок клиента
- 10.4.1. 400 Испорченный Запрос, Bad Request
- 10.4.2. 401 Несанкционированно, Unauthorized
- 10.4.3. 402 Требуется оплата, Payment Required
- 10.4.4. 403 Запрещено, Forbidden
- 10.4.5. 404 Не найден, Not Found
- 10.4.6. 405 Метод не дозволен, Method Not Allowed
- 10.4.7. 406 Не приемлем, Not Acceptable
- 10.4.8. 407 Требуется установление подлинности через прокси-сервер, Proxy Authentication Required
- 10.4.9. 408 Истекло время ожидания запроса, Request Timeout
- 10.4.10. 409 Конфликт, Conflict
- 10.4.11. 410 Удален, Gone
- 10.4.12. 411 Требуется длина, Length Required
- 10.4.13. 412 Предусловие неверно, Precondition Failed
- 10.4.14. 413 Объект запроса слишком большой, Request Entity Too Large
- 10.4.15. 414 URI запроса слишком длинный, Request-URI Too Long
- 10.4.16. 415 Неподдерживаемый медиа тип, Unsupported Media Type
- 10.5. 5xx — Коды ошибок сервера
- 10.5.1. 500 Внутренняя ошибка сервера, Internal Server Error
- 10.5.2. 501 Не реализовано, Not Implemented
- 10.5.3. 502 Ошибка шлюза, Bad Gateway
- 10.5.4. 503 Сервис недоступен, Service Unavailable
- 10.5.5. 504 Истекло время ожидания от шлюза, Gateway Timeout
- 10.5.6. 505 Не поддерживаемая версия HTTP, HTTP Version Not Supported
- 11. Установление подлинности доступа (Access Authentication)
- 11.1. Базовая схема установления подлинности (Basic Authentication Scheme)
- 11.2. Обзорная схема установления подлинности (Digest Authentication Scheme)
- 12. Обсуждение содержимого (Content Negotiation)
- 12.1. Управляемое сервером обсуждение
- 12.2. Управляемое агентом обсуждение
- 12.3. Прозрачное обсуждение
- 13. Кэширование в HTTP
- 13.1.1. Правильность кэширования
- 13.1.2. Предупреждения
- 13.1.3. Механизмы управления кэшем
- 13.1.4. Явные предупреждения User Agent
- 13.1.5. Исключения из правил и предупреждений
- 13.1.6. Контроллируемое клиентом поведение
- 13.2. Модель устаревания
- 13.2.1. Устаревание, определеяемое сервером
- 13.2.2. Эвристическое устаревание
- 13.2.3. Вычисление возраста
- 13.2.4. Вычисление устаревание
- 13.2.5. Значения однозначного устаревания
- 13.2.6. Disambiguating Multiple Responses
- 13.3. Модель сравнения (validation model)
- 13.3.1. Даты последнего изменения (Last-modified Dates)
- 13.3.2. Объектные отметки сравнения кэша
- 13.3.3. Слабое и сильное сравнение
- 13.3.4. Правила когда использовать объектные отметки (Entity Tags) и даты последнего изменения (Last-modified Dates)
- 13.3.5. Непроверяемые условия
- 13.4. Cachability ответа
- 13.5. Построение ответов из кэшей
- 13.5.1. Сквозные (End-to-end) и промежуточные (Hop-by-hop) заголовки
- 13.5.2. Немодифицируемые заголовки
- 13.5.3. Объединение заголовков
- 13.5.4. Объединнение диапазонов байтов
- 13.6. Кэширование переговорных ответов (Negotiated Responses)
- 13.7. Общедоступные и необщедоступные кэши
- 13.8. Поведение кеша при ошибочных или незавершенных ответах
- 13.9. Побочные эффекты GET и HEAD
- 13.10. Ошибки после модификаций или стирания
- 13.11. Write-Through Mandatory
- 13.12. Замена кэша
- 13.13. Списки history
- 14. Определения полей заголовка
- 14.1. Accept
- 14.2. Accept-Charset
- 14.3. Accept-Encoding
- 14.4. Accept-Language
- 14.5. Accept-Ranges
- 14.6. Age
- 14.7. Allow
- 14.8. Authorization
- 14.9. Cache-Control
- 14.9.1. Что кэшируемо (Cachable)
- 14.9.2. Что может быть сохранено кэшем
- 14.9.3. Модификации основного механизма устаревания
- 14.9.4. Перепроверки правильности кэша и средства управления перезагрузкой
- 14.9.5. Директива No-Transform
- 14.9.6. Расширения средств управления кэшем
- 14.10. Connection
- 14.11. Content-Base
- 14.12. Content-Encoding
- 14.13. Content-Language
- 14.14. Content-Length
- 14.15. Content-Location
- 14.16. Content-MD5
- 14.17. Content-Range
- 14.18. Content-Type
- 14.19. Date
- 14.20. ETag
- 14.21. Expires
- 14.22. From
- 14.23. Host
- 14.24. If-Modified-Since
- 14.25. If-Match
- 14.26. If-None-Match
- 14.27. If-Range
- 14.28. If-Unmodified-Since
- 14.29. Last-Modified
- 14.30. Location
- 14.31. Max-Forwards
- 14.32. Pragma
- 14.33. Proxy-Authenticate
- 14.34. Proxy-Authorization
- 14.35. Public
- 14.36. Range
- 14.36.1. Диапазоны байт (byte ranges)
- 14.36.2. Запросы диапазонов (Range Retrieval Requests)
- 14.37. Referer
- 14.38. Retry-After
- 14.39. Server
- 14.40. Transfer-Encoding
- 14.41. Upgrade
- 14.42. User-Agent
- 14.43. Vary
- 14.44. Via
- 14.45. Warning
- 14.46. WWW-Authenticate
- 15. Положения о защите
- 15.1. Установления подлинности клиентов
- 15.2. Предложение выбрать схему установления подлинност
- 15.3. Неправильное обращение с информацией файла регистрации сервера (Log)
- 15.4. Передача чувствительной (sensitive) информации
- 15.5. Атаки, основанные именах файлов и путей
- 15.6. Персональная информация
- 15.7. Проблемы секретности, связанные с Accept заголовками
- 15.8. Подмена DNS-адресов (DNS Spoofing)
- 15.9. Расположение заголовков и Spoofing
- 16. Подтверждения
- 17. Литература
- 18. Адреса авторов
- 19. Приложения
- 19.1. Медиа тип Интернет message/http
- 19.2. Медиа тип Интернет multipart/byteranges
- 19.3. Допустимые приложения
- 19.4. Различия между HTTP объектами и MIME объектами
- 19.4.1. Преобразование к канонической форме
- 19.4.2. Преобразование форматов дат
- 19.4.3. Введение Content-Encoding
- 19.4.4. Никакого Content-Transfer-Encoding
- 19.4.5. Поля HTTP заголовка в Multipart Body-Parts
- 19.4.6. Введение Transfer-Encoding
- 19.4.7. Версия MIME
- 19.5. Изменения после HTTP/1.0
- 19.5.1. Изменения упрощаущие много-homed сервера и сохраняющие IP адреса
- 19.6. Дополнительные возможности
- 19.6.1. Дополнительные методы запросов
- 19.6.2. Дополнительные определения полей заголовка
- 19.7. Совместимость с предыдущими версиями
- 19.7.1. Совместимость с постоянными соединениями, определяемыми HTTP/1.0
1 Введение
1.1. Цель
Протокол передачи Гипертекста (HTTP) — протокол прикладного уровня для распределенных, совместных, многосредных информационных систем. HTTP используется в World Wide Web (WWW) начиная с 1990 года. Первой версией HTTP, известной как HTTP/0.9, был простой протокол для передачи необработанных данных через Интернет. HTTP/1.0, как определено в RFC 1945 [6], был улучшением этого протокола, позволяя сообщениям иметь MIME-подобный формат, содержащий метаинформацию о передаваемых данных и имел модифицированную семантику запросов/ответов. Однако, HTTP/1.0 недостаточно хорошо учитывал особенности работы с иерархическими прокси-серверами (hierarchical proxies), кэшированием, постоянными соединениями, и виртуальными хостами (virtual hosts). Кроме того, быстрое увеличение не полностью совместимых приложений, называющих тот протокол, который они использовали "HTTP/1.0", потребовало введения версии протокола, в которой были бы заложены возможности, позволяющие приложениям определять истинные возможности друг друга.
Эта спецификация определяет протокол "HTTP/1.1". Этот протокол содержит более строгие требования, чем HTTP/1.0, гарантирующие надежную реализацию возможностей.