ServiceStack - Używanie kompresji gzip / deflate z żądaniami JSONP
Mam usługę ServiceStack, która kompresuje odpowiedź za pomocąRequestContext.ToOptimizedResult()
np .:
[Route("/numbers/search")]
public class FindNumbers
{
}
public object Get(FindNumbers query)
{
var data = new List<string> { "One", "Two", "Three" };
return RequestContext.ToOptimizedResult(data);
}
Działa to doskonale podczas wysyłania żądania, takiego jak:
GET http://myhost:13487/numbers/search.json
I jest skompresowany zgodnie z oczekiwaniamiAccept-Encoding
nagłówek żądania:
Accept-Encoding: gzip,deflate,sdch
Mogę również wysłać prośbę JSONP:
GET http://myhost:13487/numbers/search?callback=func
który poprawnie zwracaapplication/javascript
wywołanie zwrotne (nieskompresowane).
Kiedy dodamAccept-Encoding
żądanie nagłówka do żądania JSONP, odpowiedź to skompresowane dane JSON zgodnie z pierwotnym żądaniem JSON, a nie skompresowaneapplication/javascript
oddzwonić.
Czy są jakieś oczywiste powody, dla których brakuje mi tego zachowania, czy jest to po prostu błąd w ServiceStack? Oczekiwałem, że otrzymam skompresowane wywołanie zwrotne JSONP w odpowiedzi, ale jestem dość zielony w przypadku JSONP i może istnieć dobry powód dla tej zmiany.
Zauważ, że pracuję nad źródłem ServiceStack, ale pomyślałem, że dostanę to tam, bo więcej mózgów jest lepszych niż jeden ...
Z góry dziękuję
EDYTOWAĆ
Prześledziłem więc problem w następującym źródle
i
if (doJsonp && !(response is CompressedResult))
return httpRes.WriteToResponse(httpReq, response, (callback + "(").ToUtf8Bytes(),")".ToUtf8Bytes());
return httpRes.WriteToResponse(httpReq, response);
Więc jeśli odpowiedź jest wynikiem skompresowanym, to niezależnie od wymagań dla JSONP przez?callback=func
odpowiedź będzie po prostu zawierać skompresowany json (w przypadku powyższego przykładu), który dzwoni prawdziwie z moimi ustaleniami powyżej. Wygląda więc na to, że opakowanie zwrotne jsonp musi zostać zastosowane wcześniej w pakiecie wywołań.