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).

DAS PROBLEM

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

https://github.com/ServiceStack/ServiceStack/blob/5d09d439cd1a13712411552e2b3ede5a71af2ee5/src/ServiceStack/Host/Handlers/GenericHandler.cs#L79

und

https://github.com/ServiceStack/ServiceStack/blob/5d09d439cd1a13712411552e2b3ede5a71af2ee5/src/ServiceStack/Host/RestHandler.cs#L107

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.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage