Що належить до заголовка запиту HTTP проти тіла запиту?


51

Я працюю над набором веб-служб для мобільного клієнта, і вимоги вимагають, щоб унікальний ідентифікатор пристрою був включений у всі запити, щоб він зберігався в певних запитах і використовувався для фільтрації результатів в інших.

Була запропонована, щоб він був розміщений у власному HTTP-заголовку, оскільки він буде включений у всі запити, тому я почав цікавитись, які критерії можуть бути використані для визначення того, чи належить дана частина даних у заголовку чи разом з іншими даними у орган запиту.

Чи є такі критерії?


Також дивіться stackoverflow.com/questions/40492782/…
Мед

Відповіді:


51

Коли інформація важлива, слід вносити її в організм.

Чому?

  1. проксі-сервери можуть змінювати заголовки. Багато хто налаштований знімати будь-які заголовки, яких вони не знають. Це, однак, застосовується лише тоді, коли ви використовуєте незашифрований HTTP. Під час використання HTTPS проксі не може змінити заголовки, оскільки вони зашифровані.
  2. Під час використання веб-сервісу зазвичай це робиться для сумісності з іншими пристроями, службами та інструментами. Більшість API та інструментів, які працюють із веб-сервісами, можуть легко змінювати запити, але багато хто ускладнює або навіть неможливо додавати власні заголовки. Це, звичайно, застосовується лише тоді, коли інтероперабельність викликає занепокоєння. Але коли вам все одно, ви можете запитати себе, чому ви використовуєте веб-сервіси в першу чергу, а не просто будувати власний протокол на сирому TCP.

ВЕЛИКИЙ ВІДПОВІДЬ - два міркування, які мають для мене сенс, але мене раніше не вчили.
R Клавен

1
IK це старе, але я приєднався до цієї спільноти лише для того, щоб підтвердити цю відповідь. Кудос.
Калій Іон

22

Хоча рядок дещо розмитий, для мене головним правилом є: дані, над якими працює ваша логіка бізнесу, повинні бути в тілі, метадані можуть / повинні бути поміщені в заголовки.

Ще один спосіб його розгляду: дані, які відображаються лише в конкретних видах запитів, повинні бути в тілі, тоді як дані, які обробляються послідовно в усьому додатку, повинні надходити в заголовки.

Ще одна точка зору: чи можете ви уявити, що частина даних обробляється глобально, наприклад, маршрутизатором / брандмауером, а не вашою програмою? Якщо так, то, ймовірно, це має йти в заголовках, а не в тілі.

Деякі приклади застосування цих правил:

  • Вхідні дані безпеки надходять у заголовки, оскільки, швидше за все, вони будуть оброблятися однаково у всіх місцях програми; на рівні впровадження, ймовірно, буде якийсь фільтр запитів, який відхиляє запити без дійсних облікових даних, незалежно від фактичної кінцевої точки, що обробляє запит, якщо він потрапить через фільтр.
  • Якщо, з іншого боку, у вас є кінцева точка, яка дозволяє адміністратору додавати користувачів до вашої системи, логін користувача, який буде створений, повинен знаходитись у тілі запиту, оскільки: вона з’являється в цій конкретній кінцевій точці, але не в інших.
  • Параметри керування кешуванням цілком можуть вписуватися в заголовки (якщо тільки кешування не є основною частиною бізнес-логіки вашої програми).

Повертаючись до свого питання про унікальний ідентифікатор пристрою: якщо він використовується послідовно скрізь, наприклад лише для ведення журналу, він може бути поміщений у заголовки. Але якщо він використовується для фільтрації запитів різними способами залежно від кінцевої точки, то краще буде в тілі. Звичайно, якщо у вас є обидва випадки використання, можливо, краще дотримуватися лише одного способу передачі їх (можливо, заголовків), а не змушувати користувача API розміщувати однакові дані у двох місцях, що дає вам дилему чи дозволяти непослідовні входи або реалізація певної перевірки.


0

Зміст запиту клієнта; який не буде змінено через кілька запитів на один і той же сервер, буде частиною HEADER, наприклад, облікові дані, інші, які часто змінюються на запит, будуть частиною BODY.

АБО

властивість повідомлення / вмісту тіла перейде в заголовок. наприклад) тип кодування, довжина вмісту, тип вмісту.

І

У вашому випадку подібні параметри фільтра повинні бути додані як параметри запиту / запиту в URL-адресі.

/mobiles?type=MOTO&colour=black

У спокійних службах URL-адреса сама посилатиметься на об’єкт

/conferences/{conference_id} -> стосується конкретної конференції


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