Różnica między nagłówkami HTTP Accept i Content-Type

118

Tak więc Acceptnagłówek informuje serwer o typie MIME zasobu, którego szuka przeglądarka. Na przykład serwer może wysyłać zwykły tekst, HTML, JSON itp.

OK, to ma sens, ale kiedy patrzę na Content-Typenagłówek i wydaje się, że robi to samo. Na przykład informuje serwer, że chce tekstu lub JSON.

Jaka jest różnica między nagłówkami HTTP Accepta Content-Type?

JohnMerlino
źródło

Odpowiedzi:

155

Jak słusznie zauważysz, nagłówki Accept są używane przez klientów HTTP do informowania serwera, jakie typy treści będą akceptowane. Serwer odeśle następnie odpowiedź, która będzie zawierać nagłówek Content-Type informujący klienta, jaki jest faktycznie typ treści zwracanej treści.

Jednak, jak być może zauważyłeś, żądania HTTP mogą również zawierać nagłówki Content-Type. Dlaczego? Pomyśl o żądaniach POST lub PUT . W przypadku tych typów żądań klient faktycznie wysyła wiązkę danych do serwera jako część żądania, a nagłówek Content-Type informuje serwer o tym, czym są dane (a tym samym określa, w jaki sposób serwer je przeanalizuje).

W szczególności w przypadku żądania POST wynikającego ze złożenia formularza HTML typ treści żądania (zwykle) będzie jednym ze standardowych typów zawartości formularza poniżej, określonych przez enctypeatrybut na <form>znaczniku:

  • application/x-www-form-urlencoded (domyślnie, starszy, prostszy, nieco mniejszy nakład na małe ilości prostego tekstu ASCII, brak obsługi przesyłania plików)
  • multipart/form-data (nowszy, dodaje obsługę przesyłania plików, bardziej wydajny dla dużych ilości danych binarnych lub tekstu spoza ASCII)
Ilmari Karonen
źródło
22
  • Zaakceptuj : to, co przeglądarka jest w stanie przetworzyć, na przykład wszystkie języki, które ktoś może zrozumieć.
  • Content-Type : to format, w jakim znajdują się rzeczywiste dane, na przykład w jakim języku ktoś mówi. Ponieważ komputery nie mogą (cóż, teraz potrafią) rozpoznawać inne typy, takie jak ludzie mogą powiedzieć „och, on jest Niemcem!” lub „ona mówi po chińsku!”
ionFish
źródło
1
Niekoniecznie przeglądarka, ale dowolny klient HTTP.
Jim Aho
20

Zaakceptuj to jak

Oto moja prośba i chciałbym (zaakceptować) ten format odpowiedzi

Typ zawartości jest podobny

Oto moje zapytanie (lub odpowiedź), a ten (Content-Type) jest formatem treści, którą wysyłam w moim żądaniu (lub odpowiedzi)

JRomio
źródło
Wiem, że się tu spóźniłem, ale jestem ciekawy, co by się stało, gdyby format odpowiedzi nie był wysyłany przez serwer w formacie „Akceptuj”?
wrzask
1
To od klienta zależy decyzja @shriek. Myślę, że większość klientów HTTP (lub przeglądarek) „inteligentnie” spojrzy na prawdziwe dane i zobaczy, co to naprawdę jest. Być może jeden klient może również odrzucić odpowiedź, jeśli ma to być JSON, ale parsowanie kończy się niepowodzeniem, ponieważ wygląda na coś innego.
Jim Aho
5

Jest to rozmowa żądanie-odpowiedź, więc klient

  • wysyła żądanie „Content-Type” i
  • oczekuje odpowiedzi typu „Akceptuj”.
Waldemar
źródło
Błędny. Zaakceptuj to nagłówek żądania. Zobacz zaakceptowaną odpowiedź.
darron
2
@darron Nie, ta odpowiedź jest poprawna. Nie twierdzi, że nie jest to nagłówek żądania, mówi, że jego celem jest poinformowanie serwera, jakiej odpowiedzi oczekuje na zwrot. Trochę zbędne z innymi odpowiedziami, ale myślę, że jest to najbardziej zwięzłe. +1.
Todd Menier
0

Zaakceptować

Nagłówek HTTP żądania żądania reklamuje, które typy treści wyrażone jako typy MIME są w stanie zrozumieć klient. Korzystając z negocjacji treści, serwer wybiera następnie jedną z propozycji, wykorzystuje ją i informuje klienta o swoim wyborze za pomocą nagłówka odpowiedzi Content-Type. Przeglądarki ustawiają odpowiednie wartości dla tego nagłówka w zależności od kontekstu, w którym żądanie jest wykonywane: podczas pobierania arkusza stylów CSS dla żądania ustawiana jest inna wartość niż podczas pobierania obrazu, wideo lub skryptu.

( źródło: developer.mozilla.org )

Typ zawartości

Nagłówek encji Content-Type służy do wskazania typu nośnika zasobu.

W odpowiedziach nagłówek Content-Type informuje klienta, jaki jest typ zawartości zwracanej treści. W niektórych przypadkach przeglądarki wykonują wąchanie MIME i niekoniecznie muszą podążać za wartością tego nagłówka; Aby temu zapobiec, w nagłówku X-Content-Type-Options można ustawić wartość nosniff.

W żądaniach (takich jak POST lub PUT) klient mówi serwerowi, jaki typ danych jest faktycznie wysyłany.

( źródło: developer.mozilla.org )

Wład
źródło