ServiceStack - Verwenden der gzip / deflate-Komprimierung mit JSONP-Anforderungen
Ich habe einen ServiceStack-Dienst, mit dem die Antwort komprimiert wirdRequestContext.ToOptimizedResult()
, z.B.:
[Route("/numbers/search")]
public class FindNumbers
{
}
public object Get(FindNumbers query)
{
var data = new List<string> { "One", "Two", "Three" };
return RequestContext.ToOptimizedResult(data);
}
Dies funktioniert perfekt, wenn Sie eine Anfrage wie folgt stellen:
GET http://myhost:13487/numbers/search.json
Und wird wie erwartet mit dem komprimiertAccept-Encoding
Anfragekopfzeile:
Accept-Encoding: gzip,deflate,sdch
Ich kann auch eine JSONP-Anfrage stellen:
GET http://myhost:13487/numbers/search?callback=func
die korrekt eine zurückgibtapplication/javascript
Rückruf (unkomprimiert).
Wenn ich das hinzufügeAccept-Encoding
Anforderungsheader der JSONP-Anforderung, die Antwort sind die komprimierten JSON-Daten gemäß der ursprünglichen JSON-Anforderung und keine komprimiertenapplication/javascript
Ruf zurück.
Gibt es offensichtliche Gründe, die ich für dieses Verhalten vermisse, oder ist es einfach ein Fehler in ServiceStack? Meine Erwartung wäre, in der Antwort einen komprimierten JSONP-Rückruf zu erhalten, aber ich bin mit JSONP einigermaßen zufrieden und es könnte einen guten Grund für den Rückruf geben.
Beachten Sie, dass ich gerade die ServiceStack-Quelle durcharbeite, aber ich dachte mir, dass ich das herausbekomme, da mehr Köpfe besser sind als einer ...
Danke im Voraus
BEARBEITEN
Daher habe ich das Problem in der folgenden Quelle nachverfolgt
und
if (doJsonp && !(response is CompressedResult))
return httpRes.WriteToResponse(httpReq, response, (callback + "(").ToUtf8Bytes(),")".ToUtf8Bytes());
return httpRes.WriteToResponse(httpReq, response);
Wenn die Antwort also ein komprimiertes Ergebnis ist, dann unabhängig von der Anforderung für JSONP über?callback=func
Die Antwort enthält einfach den komprimierten JSON-Wert (im obigen Beispiel), der mit meinen obigen Ergebnissen übereinstimmt. Es sieht also so aus, als müsste der jsonp-Callback-Wrapper früher im Callstack angewendet werden.