Почему мы должны установить тип контента запроса заголовка
Я хочу знать, что такое тип контента, зачем нам нужно устанавливать тип контента запроса заголовка и сколько типов контента заголовка можно установить? Пожалуйста, предоставьте документацию, если это возможно.
2 ответа
Content-Type
в заголовке HTTP-запроса указывает серверу, какие данные ему следует ожидать. Если сервер разрешает и принимает несколько типов контента, он может использовать это поле, чтобы знать, как интерпретировать тело запроса.
Например: если сервер допускает данные XML и JSON в одной и той же конечной точке, то установка Content-Type
как:
Тип контента: приложение / JSON
сообщит серверу, что он должен ожидать, что тело запроса будет содержать JSON. Принимая во внимание, что:
Тип содержимого: текст /xml
сообщит серверу, чтобы ожидать XML в теле.
RFC7321 - протокол передачи гипертекста (HTTP/1.1): определение семантики и содержимого Content-Type
в разделе 3.1.1.5:
Поле заголовка "Content-Type" указывает тип мультимедиа связанного представления: либо представление, заключенное в полезную нагрузку сообщения, либо выбранное представление, как определено семантикой сообщения. Указанный тип мультимедиа определяет как формат данных, так и то, как эти данные предназначены для обработки получателем в рамках семантики принятого сообщения после декодирования любых кодировок контента, указанных в Content-Encoding.
В IANA зарегистрировано более 1500 типов носителей, которые можно установить как Content-Type
для запроса.
Последний абзац раздела 3.1.1.5 объясняет, что если Content-Type
не установлен, сервер может предположить, что данные application/octet-stream
или интерпретировать запрос так, как он хочет. Но:
Клиенты, которые делают это, рискуют сделать неправильные выводы, которые могут подвергнуть дополнительным рискам безопасности (например, "повышение привилегий").
Когда сервер делает это, он называется Content Sniffing, и его можно отключить, установив:
X-Content-Type-Options: nosniff
Если вы не установите Content-Type, ваше приложение может не работать.
Например, если вы создаете приложение, которое ожидает данные в формате JSON, и вы не включаете Content-Type: application/json
в вашем заголовке, то в большинстве случаев ваше приложение будет работать со сбоями.