Listonosz Chrome: jaka jest różnica między danymi formularza, x-www-form-urlencoded i raw

222

Używam rozszerzenia Postman Chrome do testowania usługi internetowej.

Dostępne są trzy opcje wprowadzania danych.

Sądzę, że rawjest to wysyłanie JSON.

Jaka jest różnica między pozostałymi dwoma form-datai x-www-form-urlencoded?

Rohan
źródło
11
Na dzień dzisiejszy istnieje również czwarta opcja publikowania danych w narzędziu listonosz - binary.
RBT

Odpowiedzi:

237

Są to różne typy zawartości formularza zdefiniowane przez W3C. Jeśli chcesz wysyłać proste dane tekstowe / dane ASCII, zadziała x-www-form-urlencoded . To jest domyślne.

Ale jeśli musisz wysłać tekst inny niż ASCII lub duże dane binarne, dane formularza są do tego przeznaczone.

Możesz użyć Raw, jeśli chcesz wysłać zwykły tekst, JSON lub dowolny inny ciąg. Jak sama nazwa wskazuje, Postman wysyła nieprzetworzone dane ciągu bez modyfikacji. Rodzaj przesyłanych danych można ustawić za pomocą nagłówka typu zawartości z menu rozwijanego.

Plik binarny może być używany, gdy chcesz dołączyć dane nietekstowe do żądania, np. Plik wideo / audio, obrazy lub inny plik danych binarnych.

Więcej informacji można znaleźć pod tym linkiem: Formularze w dokumentach HTML

Basant Singh
źródło
co z binariami?
RBT
mam formularz z 4 polami tekstowymi i 1 polem do przesłania pliku, proszę zasugerować mi, która opcja (dane formularza lub x-www-formularz-urlencoded) zostanie użyta do przesłania wartości tych 5 pól w listonoszu? Z góry dziękuję.
Kamlesh
@Kamlesh, przepraszam za późną odpowiedź, pole klucza danych formularza w Postman ma menu rozwijane, w którym możesz wybrać, czy jest to pole tekstowe, czy plik. Możesz ustawić plik na plik, a następnie przeglądać plik, aby dołączyć go do treści. Mam nadzieję, że to pomaga.
Basant Singh
87

To wyjaśnia lepiej: dokumenty listonosza

Żądaj treści

Podczas konstruowania żądań miałbyś do czynienia z edytorem treści żądania. Listonosz umożliwia wysyłanie niemal każdego żądania HTTP (jeśli nie możesz czegoś wysłać, daj nam znać!). Edytor treści jest podzielony na 4 obszary i ma różne elementy sterujące w zależności od typu ciała.

tworzyć dane

multipart / form-data to domyślne kodowanie używane przez formularz internetowy do przesyłania danych. To symuluje wypełnienie formularza na stronie internetowej i przesłanie go. Edytor danych formularzy pozwala ustawić pary klucz / wartość (za pomocą edytora klucz-wartość) dla danych. Możesz także dołączyć pliki do klucza. Należy pamiętać, że z powodu ograniczeń specyfikacji HTML5 pliki nie są przechowywane w historii ani kolekcjach. Będziesz musiał wybrać plik ponownie w momencie wysyłania żądania.

urlencoded

To kodowanie jest takie samo, jak stosowane w parametrach URL. Wystarczy wprowadzić pary klucz / wartość, a Postman poprawnie zakoduje klucze i wartości. Pamiętaj, że nie można przesyłać plików w tym trybie kodowania. Może istnieć pewne zamieszanie między danymi formularza a kodem URL, więc najpierw sprawdź interfejs API.

surowy

Surowe żądanie może zawierać wszystko. Listonosz nie dotyka ciągu wprowadzonego w edytorze raw, z wyjątkiem zamiany zmiennych środowiskowych. Cokolwiek umieścisz w polu tekstowym, zostanie wysłane z żądaniem. Edytor raw pozwala ustawić typ formatowania wraz z poprawnym nagłówkiem, który należy wysłać wraz z surowym ciałem. Możesz także ustawić nagłówek Content-Type ręcznie. Zwykle wysyłasz tutaj dane XML lub JSON.

dwójkowy

dane binarne pozwalają wysyłać rzeczy, których nie można wprowadzić w Listonoszu. Na przykład pliki obrazów, audio lub wideo. Możesz również wysyłać pliki tekstowe. Jak wspomniano wcześniej w sekcji danych formularza, musisz ponownie dołączyć plik, jeśli ładujesz żądanie poprzez historię lub kolekcję.

AKTUALIZACJA

Jak wskazał VKK , specyfikacja WHATWG mówi, że urlencoded jest domyślnym typem kodowania formularzy.

Niepoprawną wartością domyślną dla tych atrybutów jest stan application / x-www-form-urlencoded. Brakującą wartością domyślną dla atrybutu enctype jest również stan application / x-www-form-urlencoded.

avck
źródło
5
Dokument listonosza jest błędny. Specyfikacja HTML5 WHATWG dostępna na html.spec.whatwg.org/multipage/… wyraźnie określa domyślną wartość „application / x-www-form-urlencoded” dla atrybutu enctype elementu formularza. Innymi słowy, „application / x-www-form-urlencoded” to domyślne kodowanie (w języku HTTP Content-Type), którego używa formularz internetowy do przesyłania danych, a nie danych wieloczęściowych / formularzy. Aby wysłać żądanie HTTP post po przesłaniu formularza z typem zawartości danych wieloczęściowych / formularzy, należy jawnie określić to jako wartość typu kodu.
VKK
Jaka jest różnica między danymi formularza (wprowadzonymi parami klucz-wartość w interfejsie użytkownika Postmana) wysyłanymi z Content-Type: application/jsonnagłówkiem; i nieprzetworzone dane wprowadzone jako Json jak {foo: bar}z tym samym Content-Type: application/jsonnagłówkiem?
Inigo
Z danymi formularza jako kluczowymi parami wartości typ treści to wieloczęściowe dane formularza, nawet jeśli określisz nagłówki, a surowym typem treści będzie tekst lub cokolwiek podałeś w nagłówkach.
avck
20

multipart / form-data

Uwaga. Proszę zapoznać się z RFC2388, aby uzyskać dodatkowe informacje na temat przesyłania plików, w tym problemów ze zgodnością wsteczną, związku między „danymi wieloczęściowymi / formularzem” a innymi typami treści, problemami z wydajnością itp.

Informacje na temat problemów związanych z bezpieczeństwem formularzy można znaleźć w dodatku.

Typ zawartości „application / x-www-form-urlencoded” jest nieefektywny w przypadku wysyłania dużych ilości danych binarnych lub tekstu zawierającego znaki spoza ASCII. Do przesyłania formularzy zawierających pliki, dane inne niż ASCII i dane binarne należy używać typu treści „multipart / form-data”.

Typ zawartości „multipart / form-data” jest zgodny z regułami wszystkich wieloczęściowych strumieni danych MIME zgodnie z RFC2045 . Definicja „danych wieloczęściowych / formularzy” jest dostępna w rejestrze [IANA].

Komunikat „multipart / form-data” zawiera serię części, z których każda reprezentuje udaną kontrolę. Części są wysyłane do agenta przetwarzania w tej samej kolejności, w której odpowiednie formanty pojawiają się w strumieniu dokumentów. Granice części nie powinny występować w żadnym z danych; sposób, w jaki to się odbywa, nie wchodzi w zakres niniejszej specyfikacji.

Podobnie jak w przypadku wszystkich wieloczęściowych typów MIME, każda część ma opcjonalny nagłówek „Content-Type”, który domyślnie ma wartość „text / plain”. Programy klienckie powinny dostarczyć nagłówek „Content-Type” wraz z parametrem „charset”.

application / x-www-form-urlencoded

To jest domyślny typ zawartości. Formularze przesłane z tym typem treści muszą być zakodowane w następujący sposób:

Nazwy i wartości kontrolne są zmieniane. Znaki spacji są zastępowane przez +', and then reserved characters are escaped as described in [RFC1738], section 2.2: Non-alphanumeric characters are replaced by% HH ', znak procentu i dwie cyfry szesnastkowe reprezentujące kod ASCII znaku. Podziały linii są reprezentowane jako pary „CR LF” (tj. %0D%0A'). The control names/values are listed in the order they appear in the document. The name is separated from the value by= = I pary nazwa / wartość są oddzielone od siebie przez „&”.

application/x-www-form-urlencodedtreść wiadomości HTTP wysyłanej do serwera to zasadniczo jeden gigantyczny ciąg zapytania - pary nazwa / wartość są oddzielone znakiem ampersand (&), a nazwy są oddzielone od wartości symbolem równości (=). Przykładem tego może być:

MyVariableOne=ValueOne&MyVariableTwo=ValueTwo

Typ zawartości „application / x-www-form-urlencoded” jest nieefektywny w przypadku wysyłania dużych ilości danych binarnych lub tekstu zawierającego znaki spoza ASCII. Do przesyłania formularzy zawierających pliki, dane inne niż ASCII i dane binarne należy używać typu treści „multipart / form-data”.

Mohideen bin Mohammed
źródło
15

Oto kilka dodatkowych przykładów, aby zobaczyć nieprzetworzony tekst, który Postman przekazuje w żądaniu. Możesz to zobaczyć, otwierając konsolę Listonosza:

wprowadź opis zdjęcia tutaj

tworzyć dane

nagłówek

content-type: multipart/form-data; boundary=--------------------------590299136414163472038474

Ciało

key1=value1key2=value2

x-www-form-urlencoded

nagłówek

Content-Type: application/x-www-form-urlencoded

Ciało

key1=value1&key2=value2

Surowy tekst / zwykły

nagłówek

Content-Type: text/plain

Ciało

This is some text.

Raw Json

nagłówek

Content-Type: application/json

Ciało

{"key1":"value1","key2":"value2"}
Suragch
źródło