Apa yang termasuk dalam tajuk permintaan HTTP vs. badan permintaan?

51

Saya sedang mengerjakan serangkaian layanan web untuk klien seluler, dan persyaratannya meminta id perangkat unik untuk disertakan dengan semua permintaan, untuk disimpan dalam permintaan tertentu, dan digunakan untuk memfilter hasil pada yang lain.

Sebuah saran dibuat agar dimasukkan ke header HTTP khusus karena akan disertakan dengan semua permintaan, jadi saya mulai bertanya-tanya kriteria apa yang mungkin digunakan untuk menentukan apakah sepotong data tertentu termasuk dalam header atau bersama dengan data lainnya di badan permintaan.

Apakah ada kriteria seperti itu?

Mike Partridge
sumber

Jawaban:

51

Ketika informasi itu penting, Anda harus memasukkannya ke dalam tubuh.

Mengapa?

  1. server proxy diizinkan untuk memodifikasi tajuk. Banyak yang dikonfigurasi untuk menghapus setiap header yang tidak mereka ketahui. Namun, ini hanya berlaku ketika Anda menggunakan HTTP yang tidak terenkripsi. Saat Anda menggunakan HTTPS, proksi tidak dapat mengubah header karena dienkripsi.
  2. Ketika Anda menggunakan layanan web, Anda biasanya melakukannya untuk interoperabilitas dengan perangkat, layanan, dan alat lain. Sebagian besar API dan alat yang berfungsi dengan layanan web dapat dengan mudah mengubah permintaan, tetapi banyak yang menyulitkan atau bahkan tidak mungkin untuk menambahkan header khusus. Ini, tentu saja, hanya berlaku ketika interoperabilitas menjadi perhatian. Tetapi ketika Anda tidak peduli, Anda mungkin ingin bertanya pada diri sendiri mengapa Anda menggunakan layanan web di tempat pertama daripada hanya membangun protokol Anda sendiri pada TCP mentah.
Philipp
sumber
JAWABAN HEBAT - dua pertimbangan yang masuk akal bagi saya tetapi saya belum pernah diajarkan sebelumnya.
R Claven
1
IK ini sudah lama tetapi saya bergabung dengan komunitas ini hanya untuk meningkatkan jawaban ini. Pujian.
Potassium Ion
22

Sementara garis agak kabur, bagi saya aturan praktis adalah: data yang logika bisnis Anda bekerja harus ada di tubuh, metadata bisa / harus dimasukkan ke dalam header.

Cara lain untuk melihatnya adalah: data yang hanya muncul dalam jenis permintaan tertentu harus ada di badan sementara data yang ditangani secara konsisten di seluruh aplikasi harus dimasukkan ke header.

Namun sudut pandang lain adalah: dapatkah Anda membayangkan bahwa sepotong data ditangani secara global, misalnya oleh router / firewall daripada oleh aplikasi Anda? Jika ya, itu mungkin harus di header daripada di tubuh.

Beberapa contoh penerapan aturan ini adalah:

  • Kredensial keamanan masuk ke header karena kemungkinan besar mereka akan ditangani sama di semua tempat aplikasi; pada tingkat implementasi mungkin akan ada beberapa filter permintaan yang menolak permintaan tanpa kredensial yang valid terlepas dari titik akhir yang sebenarnya menangani permintaan jika itu melewati filter.
  • Jika, di sisi lain, Anda memiliki titik akhir yang memungkinkan admin untuk menambahkan pengguna ke sistem Anda, login pengguna yang akan dibuat harus ada di badan permintaan karena: a) ditangani oleh logika bisnis aplikasi Anda, b) muncul di titik akhir khusus ini tetapi tidak pada orang lain.
  • Opsi yang mengontrol caching mungkin cocok dengan header (kecuali caching adalah bagian inti dari logika bisnis aplikasi Anda).

Kembali ke pertanyaan Anda tentang ID perangkat unik: jika digunakan secara konsisten di mana-mana, mis. Hanya untuk masuk, itu bisa dimasukkan ke dalam header. Tetapi jika digunakan untuk menyaring permintaan dengan cara yang berbeda tergantung pada titik akhir, lebih baik berada di tubuh. Tentu saja jika Anda memiliki kedua kasus penggunaan, mungkin lebih baik tetap menggunakan hanya satu cara untuk melewatinya (mungkin tajuk) daripada memaksa pengguna API untuk meletakkan data yang sama di dua tempat, memberi Anda dilema jika memungkinkan input yang tidak konsisten atau menerapkan semacam validasi.

Michał Kosmulski
sumber
0

Konten permintaan klien; yang tidak akan diubah di beberapa permintaan ke server yang sama akan menjadi bagian dari HEADER misalnya kredensial, yang lain yang sering diubah per permintaan akan menjadi bagian dari BODY.

ATAU

properti pesan / isi tubuh akan masuk ke header. mis. jenis pengkodean, panjang konten, tipe konten.

DAN

Dalam kasus Anda seperti parameter filter harus ditambahkan sebagai permintaan / permintaan params di url.

/mobiles?type=MOTO&colour=black

Dalam layanan yang tenang, url itu sendiri akan merujuk ke suatu objek

/conferences/{conference_id} -> merujuk konferensi tertentu

Kanagavelu Sugumar
sumber
Apakah ini kutipan? Dari mana ? Mengapa Anda menyarankan ini? Harap edit beberapa jawaban Anda, untuk membuatnya lebih baik.
Machado