Saya kesulitan menemukan spesifikasi yang pasti tentang ini dalam standar. Saya memiliki klien HTTP yang tidak termasuk Content-Length: 0
tajuk saat melakukan permintaan PUT di mana saya tidak menentukan badannya, dan server yang menjadi bingung dengan permintaan tersebut, dan saya bertanya-tanya program mana yang harus saya salahkan.
92
Jawaban:
Permintaan HTTP memiliki isi jika memiliki header Panjang Konten atau Transfer-Encoding ( RFC 2616 4.3 ). Jika permintaan tidak memiliki keduanya, ia tidak memiliki isi, dan server Anda harus memperlakukannya seperti itu.
Yang mengatakan itu tidak biasa untuk permintaan PUT untuk tidak memiliki tubuh, jadi jika saya merancang klien yang benar-benar ingin mengirim tubuh kosong, saya akan melewati Content-Length: 0. Memang, tergantung pada pembacaan POST seseorang dan definisi metode PUT ( RFC 2616 9.5, 9.6 ) orang mungkin berpendapat bahwa tubuh tersirat diperlukan - tetapi cara yang masuk akal untuk menangani tidak ada benda adalah dengan menganggap benda dengan panjang nol.
sumber
PUT
permintaan pada dasarnya adalah untuk membuat atau memperbarui file di server. Dan tidak ada yang tidak sah tentang file yang kosong, bukan?disable
danenable
adalah kata kerja. Saya mungkin lebih suka menggunakanPATCH
di/users/{id}
titik akhir dalam kasus itu.Tidak menjawab pertanyaan, tetapi menegaskan bagaimana jaxrs memungkinkan saya untuk sering menggunakan PUT tanpa tubuh:
Contoh put bodyless: Beri pengguna izin tambahan.
PUT / admin / pengguna / {nama pengguna} / izin / {izin}
sumber
Badan tidak diwajibkan oleh standar IETF, meskipun panjang konten harus 0 jika tidak ada badan. Gunakan metode yang sesuai untuk apa yang Anda lakukan. Jika Anda memasukkannya ke dalam kode, diberikan
dan variabel jarak jauh disebut
r
.Sebuah pos setara dengan
Put setara dengan
dan get setara dengan
sumber
int f(int* resource, int body);
dan kemudian POST akan memanggilf(&r, x);
- yang mungkin melakukan atau tidak melakukanr
apa pun yang dianggap sesuai oleh server. Tapi itu juga bisa mengembalikan barang, jadi ... mungkin lebih sukay = f(&r, x);
.Apa yang menjadi PUT (dalam arti kata kerja) ke server jika tidak ada konten? The spesifikasi mengacu pada konten sebagai "entitas tertutup", tetapi permintaan tanpa konten tidak akan memiliki entitas tertutup, dan karena itu tidak ada untuk menempatkan di server.
Kecuali, tentu saja, Anda tidak ingin MENEMPATKAN apa pun ke server, dalam hal ini Anda mungkin ingin HAPUS.
sumber
Content-Length: 0
atau{ }
di JSON sebagai tubuh?Bidang panjang konten diperlukan sesuai dengan bagian berikut dalam standar HTTP / 1.1 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13
sumber