Archiwa tagu: content-type

Content-Type i GET

Niby nic ciekawego, a jednak postanowiłem się wyżalić

Podczas jednej ze swoich przygód które nazywam „znajdź i zabij potwora„, znalazłem czające się zło właśnie w content-type.

Co się stało? Bardzo prosty przypadek – aplikacja A i B pytała serwis REST o dane metodą GET. Zapytanie do serwisu wyglądało prawie tak samo.

A wysyłała w nagłówku Content-Type -> application/json, a B już nie.

To wystarczyło do zmącenia równowagi wsczechświata w aplikacji B, która powinna dostać taką samą odpowiedź co aplikacja A.

Istotne fakty:

  1. REST wystawiony na Sharepoint, który twierdzi, że brak content-type jest nie w porządku (dostałem w odpowiedzi piękny komunikat „bad request – we forgive you”…)
  2. Aplikacja B woła serwis przy użyciu metody HttpClient, która nie pozwala na tak perwersyjne tworzenie żądań (przynajmniej ja, nie znalazłem na to sposobu)

I co dalej? No właśnie. Aplikacja B mogłaby użyć innego sposobu komunikowania się z serwisem, ale… dlaczego mam to zmieniać skoro nie do końca wiadomo czyja jest to wina?

I tak rozpoczęło się przeszukiwanie dokumentacji HTTP

Żeby móc zagłębić się w temat najpierw trzeba się dowiedzieć do czego służy ten HEADER. Można sobie przetłumaczyć Content-Type na PL i wyjdzie nam „typ zawartości”… lub poszperać w RFC i wyjdzie na to samo.. albo nie

The Content-Type entity-header field indicates the media type of the entity-body sent to the recipient or, in the case of the HEAD method, the media type that would have been sent had the request been a GET.

Interesuje nas pierwsza część zdania. W moim tłumaczeniu brzmi to tak:

Pole nagłówka wskazuje jaki typ mediów znajduje się w ciele wiadomości wysyłanej do odbiorcy.

No właśnie -> w ciele/body wiadomości. A jakie metody HTTP umożliwiają wysłanie ciała? Kilka, ale na pewno nie GET.

I teraz pytanie za milijon.

Skoro GET nie ma body to po co w HTTP GET ustawiać Content-Type który mówi jakiego typu jest body? Żeby powiedzieć jaki byłby to typ gdyby tam coś było?