O ile zrozumiałem, istnieją dwa miejsca, w których można ustawić typ treści:
- Klient ustawia typ treści dla treści, które wysyła na serwer (np. Dla postu)
- Serwer ustawia typ treści dla odpowiedzi.
Czy to oznacza, że nie muszę lub nie powinienem ustawiać typu zawartości dla wszystkich moich żądań pobierania (po stronie klienta). A jeśli mogę lub powinienem, jaki to byłby rodzaj treści?
W kilku postach przeczytałem również, że rodzaj treści klienta określa, jakiego rodzaju treść klient chciałby otrzymywać. Więc może mój punkt 1 nie jest słuszny?
źródło
SHOULD NOT
zawierają Content-Type. Czy mamy wyraźny cytat?Żądania pobierania nie powinny mieć typu zawartości, ponieważ nie mają jednostki żądania (czyli treści)
źródło
Żądania GET mogą mieć nagłówki „Accept”, które informują, jakie typy treści klient rozumie. Na tej podstawie serwer może następnie zdecydować, który typ zawartości ma odesłać.
Są jednak opcjonalne.
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.1
źródło
Przyjęta odpowiedź jest błędna. Cytat jest poprawny, twierdzenie, że PUT i POST muszą go mieć, jest niepoprawne. Nie ma wymogu, aby PUT lub POST faktycznie zawierały dodatkowe treści. Nie ma też zakazu, aby GET faktycznie posiadało treści.
Dokumenty RFC mówią dokładnie, co mają na myśli. IFF Twoja strona (klient LUB serwer pochodzenia) będzie wysyłać dodatkową zawartość, poza nagłówkami HTTP, POWINNA określać nagłówek Content-Type. Należy jednak pamiętać, że dopuszczalne jest pominięcie Content-Type i nadal dołączanie treści (powiedzmy, używając nagłówka Content-Length).
źródło
Krótka odpowiedź: Najprawdopodobniej nie, nie potrzebujesz nagłówka typu zawartości dla żądań HTTP GET. Jednak specyfikacja nie wydaje się wykluczać nagłówka typu zawartości dla HTTP GET.
Materiały pomocnicze:
„Typ treści” jest częścią metadanych reprezentacji (tj. Ładunku). Cytat z RFC 7231 sekcja 3.1 :
Cytat z RFC 7231 sekcja 3.1.1.5 (przy okazji, aktualnie wybrana odpowiedź miała literówkę w numerze sekcji):
W tym sensie
Content-Type
nagłówek tak naprawdę nie dotyczy żądania HTTP GET (lub żądania POST lub PUT, jeśli o to chodzi). Chodzi o ładunek wewnątrz takiego dowolnego żądania. Tak więc, jeśli nie będzie ładunku, nie ma potrzebyContent-Type
. W praktyce część wdrożenia poszła do przodu i przyjęła to zrozumiałe założenie. Cytat z komentarza Adama :Jednak, ściśle mówiąc, sama specyfikacja nie wyklucza możliwości, że HTTP GET zawiera ładunek. Cytat z RFC 7231, sekcja 4.3.1 :
Tak więc, jeśli zdarzy się, że twój HTTP GET zawiera ładunek z jakiegokolwiek powodu,
Content-Type
nagłówek też jest prawdopodobnie rozsądny.źródło
Problem z nieprzekazywaniem typu zawartości w komunikacie GET polega na tym, że typ zawartości jest nieistotny, ponieważ strona serwera i tak określa zawartość. Problem, który napotkałem, polega na tym, że jest teraz wiele miejsc, które konfigurują swoje usługi sieciowe, aby były wystarczająco inteligentne, aby odebrać przekazany typ treści i zwrócić odpowiedź w „typie”, o który prosisz. Na przykład. obecnie wysyłamy wiadomość z miejscem, które domyślnie ma format JSON, jednak ustawili oni swoją usługę sieciową tak, że jeśli przekażesz typ zawartości xml, zwrócą następnie xml zamiast domyślnego JSON. Myślę, że pójście naprzód to świetny pomysł
źródło