Почему мы должны установить тип контента запроса заголовка

Я хочу знать, что такое тип контента, зачем нам нужно устанавливать тип контента запроса заголовка и сколько типов контента заголовка можно установить? Пожалуйста, предоставьте документацию, если это возможно.

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 в вашем заголовке, то в большинстве случаев ваше приложение будет работать со сбоями.

Другие вопросы по тегам