Різниця між заголовками HTTP Accept і Content-Type


118

Отже, Acceptзаголовок повідомляє серверу тип MIME ресурсу, який шукає браузер. Наприклад, сервер може надсилати звичайний текст, HTML, JSON тощо.

Гаразд, це має сенс, але коли я дивлюся на Content-Typeзаголовок, і, здається , робиться те саме. Наприклад, він повідомляє серверу, що він хоче текст або JSON.

То в чому різниця між заголовками Acceptта Content-TypeHTTP?

Відповіді:


155

Як ви правильно зазначаєте, HTTP-клієнти використовують заголовок Accept, щоб повідомити серверу, які типи вмісту вони приймуть. Потім сервер поверне відповідь, яка буде містити заголовок типу "Вміст", який повідомляє клієнтові, яким саме є тип вмісту повернутого контенту.

Однак, як ви могли помітити, HTTP-запити також можуть містити заголовки типу вмісту. Чому? Ну, подумайте про POST або PUT запити. За допомогою цих типів запитів клієнт фактично надсилає купу даних на сервер як частину запиту, а заголовок Content-Type повідомляє серверу, якими є дані насправді (і таким чином визначає, як сервер буде їх розбирати).

Зокрема, для запиту POST, отриманого в результаті подання форми HTML, тип вмісту запиту (як правило) є одним із стандартних типів вмісту форми нижче, як зазначено enctypeатрибутом у <form>тегу:

  • application/x-www-form-urlencoded (за замовчуванням, старший, простіший, трохи менше накладних витрат для невеликої кількості простого тексту ASCII, без підтримки завантаження файлів)
  • multipart/form-data (новіше, додає підтримку для завантаження файлів; ефективніше для великої кількості бінарних даних або не ASCII тексту)

22
  • Прийняти : це те, що браузер здатний перетравити, наприклад, усі мови, які хтось може зрозуміти.
  • Тип вмісту : це формат фактичних даних, наприклад, якою мовою хтось говорить. Оскільки комп'ютери не можуть (ну, тепер вони можуть) розпізнавати інші типи, як люди можуть сказати "о, він німець!" або "вона говорить китайською!"

1
Не обов’язково браузер, але будь-який http-клієнт.
Джим Ахо

20

Прийняти - це як

Ось мій запит, і я хотів би (прийняти) цей формат відповідей

Тип вмісту схожий

Ось мій запит (або відповідь), і це (Тип вмісту) - це формат вмісту, який я надсилаю у своєму запиті (або відповіді)


Я знаю, що я запізнююсь тут, але мені цікаво, що буде, якщо формат відповіді не буде надісланий сервером у форматі "Прийняти" редакцію?
крик

1
Клієнт повинен вирішити @shriek. Я думаю, що більшість клієнтів http (або браузерів) "розумно" переглянуть реальні дані і побачать, що це справді. Можливо, один клієнт також може відкинути відповідь, якщо це повинен бути JSON, але аналіз не вдається, оскільки, здається, це щось інше.
Джим Ахо

5

Це розмова на запит-відповідь, тому клієнт

  • надсилає запит "Content-Type" і
  • розраховує отримати відповідь типу "Прийняти".

Неправильно. Accept - заголовок запиту. Дивіться прийняту відповідь.
Даррон

2
@darron Ні, ця відповідь правильна. Він не каже, що це не заголовок запиту, він говорить, що його мета - повідомити серверу, яку відповідь він очікує отримати. Вигляд надмірний з іншими відповідями, але я думаю, що це найбільш стисло. +1.
Тодд Меньє

0

Прийміть

Заголовок HTTP запиту реклами рекламує, які типи вмісту, виражені у вигляді MIME, клієнт може зрозуміти. Використовуючи узгодження контенту, сервер потім вибирає одну з пропозицій, використовує її та інформує клієнта про свій вибір за допомогою заголовка відповіді Content-Type. Браузери встановлюють адекватні значення для цього заголовка залежно від контексту, де виконується запит: при добутці таблиці стилів CSS для запиту встановлюється інше значення, ніж при отриманні зображення, відео чи сценарію.

( джерело: developer.mozilla.org )

Тип вмісту

Заголовок сутності типу Content-Type використовується для вказівки типу носія ресурсу.

У відповідях заголовок Content-Type повідомляє клієнтові, яким є власне тип повернутого контенту. У деяких випадках браузери виконуватимуть нюхання MIME і не обов'язково слідкуватимуть за цим заголовком; щоб запобігти такій поведінці, параметри заголовка X-Content-Type-Options можна встановити на ноніфік.

У запитах (таких як POST або PUT) клієнт повідомляє серверу, який тип даних насправді надсилається.

( джерело: developer.mozilla.org )

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.