2012-09-11 10 views
5

Kilka dni temu zapytałem o numer this question i nie zrobiłem na nim dużej aktywności. I pomyślałem, że może dlatego, że moje pytanie było bezsensowne.Czy zgodnym z zasadami http/rest jest żądanie skompresowania?

Moje rozumienie http polega na tym, że klient (typowa przeglądarka) wysyła żądanie (otrzymanie) do serwera, w moim przypadku IIS. Częścią tego żądania jest nagłówek akceptujący kodowanie, który wskazuje serwerowi, jakiego rodzaju kodowania klient chce, aby zwracany był zasób. Zazwyczaj może to być gzip. A jeśli serwer jest poprawnie skonfigurowany, zwróci żądany zasób w żądanym kodowaniu.

Odpowiedź zawiera nagłówek Content-Encoding wskazujący, jaka kompresja została zastosowana do zasobu. W odpowiedzi znajduje się również nagłówek Content-Type, który wskazuje typ mime zasobu. Jeśli więc odpowiedź obejmuje zarówno Content-Type: application/json, jak i Content-Encoding: gzip, klient wie, że zasób to json, który został skompresowany przy pomocy gzip.

Obecnie scenariusz, w którym stoję, polega na tym, że opracowuję usługę internetową dla klientów, którzy nie są przeglądarkami, ale urządzeniami mobilnymi, i że zamiast żądać zasobów, urządzenia te będą publikować dane do usługi, którą będą obsługiwać.

Zaimplementowałam usługę Restfull, która przyjmuje żądanie post z jsonem w treści. A moi klienci wysyłają swoje zapytania pocztowe za pomocą Content-Type: Application/json. Ale niektórzy z moich klientów zażądali, aby chcieli skompresować swoją prośbę o przyspieszenie transmisji. Ale rozumiem, że nie ma możliwości wskazania w żądaniu, że treść żądania została zakodowana przy pomocy gZip.

To znaczy, że nie ma zawartości - Nagłówek kodowania dla żądań, tylko odpowiedzi.

Czy tak jest w tym przypadku?

Czy niepoprawne użycie protokołu http powoduje próbę skompresowania żądań?

Odpowiedz

3

Zgodnie z another answer here on SO, w standardzie HTTP znajduje się nagłówek Content-Encoding w żądaniu i wysłanie obiektu deflowanego.

Wygląda na to, że żaden serwer automatycznie nie zawyża danych dla ciebie, więc będziesz musiał sam napisać kod po stronie serwera (sprawdź nagłówek żądania i odpowiednio postępuj).

Powiązane problemy