Perbedaan antara tajuk HTTP Terima dan Jenis-Konten

119

Jadi Acceptheader memberi tahu server tipe MIME dari sumber daya yang dicari oleh browser. Misalnya, server dapat mengirim teks biasa, HTML, JSON, dll.

OK, itu masuk akal, tetapi ketika saya melihat Content-Typeheader dan sepertinya melakukan hal yang sama. Sebagai contoh, ia memberi tahu server bahwa ia menginginkan teks atau JSON.

Jadi apa perbedaan antara Acceptdan Content-Typeheader HTTP?

JohnMerlino
sumber

Jawaban:

155

Seperti yang Anda perhatikan dengan benar, header Terima digunakan oleh klien HTTP untuk memberi tahu server jenis konten apa yang akan mereka terima. Server kemudian akan mengirim kembali respons, yang akan mencakup header Tipe-Konten yang memberi tahu klien apa tipe konten dari konten yang dikembalikan.

Namun, seperti yang mungkin telah Anda perhatikan, permintaan HTTP juga dapat berisi tajuk Jenis Konten. Mengapa? Nah, pikirkan tentang permintaan POST atau PUT . Dengan tipe-tipe permintaan itu, klien sebenarnya mengirim banyak data ke server sebagai bagian dari permintaan, dan header Tipe-Konten memberi tahu server apa data sebenarnya (dan dengan demikian menentukan bagaimana server akan menguraikannya).

Secara khusus, untuk permintaan POST yang dihasilkan dari pengiriman formulir HTML, Tipe-Konten dari permintaan akan (biasanya) menjadi salah satu tipe konten bentuk standar di bawah ini, sebagaimana ditentukan oleh enctypeatribut pada <form>tag:

  • application/x-www-form-urlencoded (default, lebih lama, lebih sederhana, sedikit overhead untuk sejumlah kecil teks ASCII sederhana, tidak ada dukungan unggah file)
  • multipart/form-data (lebih baru, menambahkan dukungan untuk unggahan file, lebih efisien untuk sejumlah besar data biner atau teks non-ASCII)
Ilmari Karonen
sumber
22
  • Terima : adalah apa yang dapat dicerna oleh browser, misalnya, semua bahasa yang dapat dipahami seseorang.
  • Content-Type : adalah format data aktual apa, misalnya bahasa apa yang digunakan seseorang. Karena komputer tidak dapat (yah, sekarang mereka dapat) mengenali tipe lain seperti orang dapat mengatakan "oh, dia orang Jerman!" atau "dia berbicara bahasa Cina!"
ionFish
sumber
1
Tidak harus browser, tetapi klien http.
Jim Aho
20

Terima itu seperti

Ini permintaan saya dan saya ingin (untuk menerima) format tanggapan ini

Jenis Konten seperti

Ini adalah permintaan saya (atau tanggapan) dan ini (Tipe-Konten) adalah format konten yang saya kirim dalam permintaan saya (atau tanggapan)

JRomio
sumber
Saya tahu saya terlambat ke sini tetapi saya ingin tahu, apa yang akan terjadi jika format respons tidak dikirim dalam format "Terima" oleh server?
pekik
1
Itu tergantung pada klien untuk memutuskan @shriek. Saya kira sebagian besar klien http (atau browser) akan "cerdas" melihat data nyata dan melihat apa itu sebenarnya. Mungkin satu klien juga dapat mengabaikan respons jika seharusnya JSON, tetapi penguraian gagal karena tampaknya ada sesuatu yang lain.
Jim Aho
5

Ini adalah percakapan permintaan-respons, demikian klien

  • mengirimkan permintaan "Tipe Konten" dan
  • mengharapkan untuk menerima respons dari jenis media "Terima".
Waldemar
sumber
Salah. Terima adalah tajuk permintaan. Lihat jawaban yang diterima.
darron
2
@dron Tidak, jawaban ini benar. Dia tidak mengatakan itu bukan header permintaan, dia mengatakan tujuannya adalah untuk memberi tahu server respons seperti apa yang diharapkan untuk kembali. Agak mubazir dengan jawaban yang lain, tapi saya pikir itu yang paling ringkas. +1.
Todd Menier
0

Menerima

Header Terima permintaan HTTP mengiklankan jenis konten mana, yang dinyatakan sebagai jenis MIME, yang dapat dipahami klien. Menggunakan negosiasi konten, server kemudian memilih salah satu proposal, menggunakannya dan menginformasikan klien tentang pilihannya dengan tajuk respons Tipe-Konten. Peramban menetapkan nilai yang memadai untuk tajuk ini tergantung pada konteks tempat permintaan dilakukan: ketika mengambil lembar gaya CSS, nilai yang berbeda ditetapkan untuk permintaan dibandingkan saat mengambil gambar, video, atau skrip.

( sumber: developer.mozilla.org )

Jenis konten

Header entitas Tipe-Konten digunakan untuk menunjukkan jenis media dari sumber daya.

Sebagai tanggapan, header Tipe-Konten memberi tahu klien apa tipe konten dari konten yang dikembalikan. Browser akan melakukan sniffing MIME dalam beberapa kasus dan tidak harus mengikuti nilai header ini; untuk mencegah perilaku ini, header X-Content-Type-Options dapat diatur ke nosniff.

Dalam permintaan, (seperti POST atau PUT), klien memberi tahu server jenis data apa yang sebenarnya dikirim.

( sumber: developer.mozilla.org )

Wlad
sumber