Chrome geliştirici araçları Ağ sekmesinde görüldüğü gibi "Yük Talebi İste" ile "Form Verileri" arasındaki fark nedir?


244

Desteklemem gereken eski bir web uygulamam var (yazmadım).

Bir formu doldurup gönderdiğimde Chrome'daki "Ağ" sekmesini kontrol ettiğimde, normalde "Form Verileri" ni görebileceğim "Yük İsteği" ni görüyorum. İkisi arasındaki fark nedir ve biri diğeri yerine ne zaman gönderilir?

Bunu Google'da aradı, ancak bunu açıklayan herhangi bir bilgi bulamadı (yalnızca javascript uygulamalarını "Talep Yükü" yerine "Form Verileri" göndermeye çalışan kişiler).




2
Hala ikisi arasındaki farkın ne olduğunu anlamıyorum. "Talep Yükü" yalnızca bir türle kodlanmamış bir istek midir?
red888

Yanıtlar:


274

İstek Yükü - ya da daha kesin olarak söylemek gerekirse: HTTP İsteğinin yük yükü gövdesi - normalde POST veya PUT İsteği ile gönderilen verilerdir . Bu başlıkları ve sonrasında parçası CRLFa HTTP isteği .

İle yapılan bir istek Content-Type: application/jsonşöyle görünebilir:

POST /some-path HTTP/1.1
Content-Type: application/json

{ "foo" : "bar", "name" : "John" }

Bunu AJAX başına gönderirseniz, tarayıcı size yük kapasitesi olarak ne gönderdiğini gösterir. Yapabileceği tek şey bu, çünkü verilerin nereden geldiği hakkında hiçbir fikri yok.

İle bir HTML Formu gönderirseniz method="POST" ve Content-Type: application/x-www-form-urlencodedya Content-Type: multipart/form-dataisteğinize bu gibi görünebilir:

POST /some-path HTTP/1.1
Content-Type: application/x-www-form-urlencoded

foo=bar&name=John

Bu durumda form verileri istek yüküdür. Burada Tarayıcı daha fazlasını biliyor: çubuğun gönderilen formun giriş alanı foo değeri olduğunu biliyor. Ve size bunu gösteriyor.

Bu nedenle, Content-Typeverilerin sunulma biçiminde farklılık gösterirler, ancak verilerin sunulma şekli farklı değildir. Her iki durumda da veriler ileti gövdesinde bulunur. Chrome, verilerin Geliştirici Araçları'nda size nasıl sunulduğunu ayırt eder.


3
Boyut vb. Bakımından diğerini tercih etmek için bir neden var mı? Özellikle hafif AJAX çağrıları için?
kullanıcı

@buffer üzgünüm, sorunuzu anlamıyorum.
lefloh

3
AJAX çağrısı gönderiyorsam, içerik türünü jsonveya olarak ayarlayabilirim x-www-form-urlencoded. Birincisi verileri istek yükü olarak gönderirken, ikincisi url sorgusu olarak kodlar. Her ikisi de iyi çalışıyor gibi görünüyor. Bunlardan birini tercih etmek için bir neden var mı? Twitter, Google, Facebook, Stackoverflow gibi çoğu web sitesinin içerik türünü ayarladığını görüyorum x-www-form-urlencoded. Belirli bir nedeni var mı?
kullanıcı

2
Bu gerçekten OP ile ilgili değil ama belki bu cevap yardımcı olur .
lefloh

13

Chrome'da, 'Content-Type: application / json' ile yapılan istek PayedLoad İsteği olarak gösterilir ve verileri json nesnesi olarak gönderir.

Ama birlikte isteği 'İçerik Türü: application / x-www-form-urlencoded' gösterileri Formu Data ve verileri gönderir Key: Değer Pair bir anahtarla nesnenin dizisi varsa, bu yüzden o yassı o anahtarın değerini:

{ Id: 1, 
name:'john', 
phones:[{title:'home',number:111111,...},
        {title:'office',number:22222,...}]
}

gönderir

{ Id: 1, 
name:'john', 
phones:[object object]
phones:[object object]
}

PHP elbette kötüdür. Application / x-www-form-urlencoded'ın popülerliği PHP'nin popülaritesi ile tanımlanır.
Brian Haak

4
"json nesnesi" diye bir şey olmadığı için indirildi. gönderilen json verileri düz bir dize olarak gönderilir, çünkü json aslında bir dizedir. tabii ki json_encode ile standart bir "nesneye" dönüştürebilirsiniz ama bu da "json nesnesi" yapmaz.
Volkan Ulukut

Tamam, javascript json şablon nesnesi veya sadece javascript nesnesi daha iyi olduğunu düşünüyorum
Mohammadreza

1
Sadece "json" veya vurgulamak istiyorsanız "json string" yazın iyi olurdu.
Volkan Ulukut
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.