Mam starą aplikację internetową, którą muszę obsługiwać (której nie napisałem).
Kiedy wypełniam formularz i przesyłam, a następnie sprawdzam kartę „Sieć” w Chrome, widzę „Poproś o ładunek”, gdzie normalnie widziałbym „Dane formularza”. Jaka jest różnica między tymi dwoma terminami i kiedy jeden zostanie wysłany zamiast drugiego?
Googlowałem to, ale tak naprawdę nie znalazłem żadnych informacji wyjaśniających to (tylko ludzie próbują dostać aplikacje javascript do wysyłania „Formularzy danych” zamiast „Żądaj ładunku”.
Odpowiedzi:
Żądanie ładunku - a ściślej: treść ładunku żądania HTTP - to dane zwykle wysyłane przez żądanie POST lub PUT . Jest to część po nagłówkach i tym
CRLF
o żądaniu HTTP .Żądanie z
Content-Type: application/json
może wyglądać następująco:Jeśli prześlesz to na AJAX, przeglądarka po prostu pokaże ci, co przesyła jako treść ładunkową. To wszystko, co może zrobić, ponieważ nie ma pojęcia, skąd pochodzą dane.
Jeśli prześlesz formularz HTML za pomocą
method="POST"
iContent-Type: application/x-www-form-urlencoded
lubContent-Type: multipart/form-data
Twoja prośba może wyglądać następująco:W tym przypadku dane formularza to ładunek żądania. Tutaj przeglądarka wie więcej: wie, że słupek jest wartością foo pola wejściowego przesłanego formularza. I to wam pokazuje.
Różnią się
Content-Type
więc sposobem przesyłania danych, ale nie sposobem. W obu przypadkach dane znajdują się w treści wiadomości. Chrome rozróżnia sposób prezentowania danych w Narzędziach programisty.źródło
json
lubx-www-form-urlencoded
. Pierwszy wysyła dane jako ładunek żądania, a drugi koduje je jako zapytanie URL. Oba wydają się działać dobrze. Czy istnieje powód, aby preferować jeden z nich? Widzę większość witryn takich jak Twitter, Google, Facebook, Stackoverflow ustawia typ zawartości jakox-www-form-urlencoded
. Czy jest jakiś konkretny powód?W Chrome żądanie z „Content-Type: application / json” pokazuje się jako Request PayedLoad i wysyła dane jako obiekt json.
Ale zapytanie z „Content-Type: application / x-www-form-urlencoded” pokazuje dane formularza i wysyła dane jako parę klucz: wartość , więc jeśli masz tablicę obiektów w jednym kluczu, to zmienia wartość tego klucza:
wysyła
źródło