ServiceStack: uso de la compresión gzip / deflate con solicitudes JSONP
Tengo un servicio ServiceStack que comprime la respuesta usandoRequestContext.ToOptimizedResult()
, p.ej.:
[Route("/numbers/search")]
public class FindNumbers
{
}
public object Get(FindNumbers query)
{
var data = new List<string> { "One", "Two", "Three" };
return RequestContext.ToOptimizedResult(data);
}
Esto funciona perfectamente cuando se emite una solicitud como:
GET http://myhost:13487/numbers/search.json
Y se comprime como se espera con elAccept-Encoding
encabezado de solicitud:
Accept-Encoding: gzip,deflate,sdch
También puedo emitir una solicitud JSONP:
GET http://myhost:13487/numbers/search?callback=func
que devuelve correctamente unapplication/javascript
devolución de llamada (sin comprimir).
Cuando agrego elAccept-Encoding
solicitar el encabezado a la solicitud JSONP, la respuesta son los datos JSON comprimidos según la solicitud JSON original, y no una información comprimidaapplication/javascript
llamar de vuelta.
¿Hay alguna razón obvia que me esté perdiendo para este comportamiento, o es simplemente un error en ServiceStack? Mi expectativa sería recibir una devolución de llamada JSONP comprimida en la respuesta, pero estoy bastante verde con JSONP y puede haber una buena razón para la recuperación.
Tenga en cuenta que estoy en proceso de trabajar con la fuente de ServiceStack, pero me di cuenta de que obtendría esto porque más cerebros son mejores que uno ...
Gracias por adelantado
EDITAR
Por lo tanto, he rastreado el problema en la siguiente fuente
y
if (doJsonp && !(response is CompressedResult))
return httpRes.WriteToResponse(httpReq, response, (callback + "(").ToUtf8Bytes(),")".ToUtf8Bytes());
return httpRes.WriteToResponse(httpReq, response);
Entonces, si la respuesta es un resultado comprimido, entonces, independientemente del requisito para JSONP a través de?callback=func
la respuesta simplemente contendrá el json comprimido (en el caso del ejemplo anterior), que coincide con mis conclusiones anteriores. Así que parece que la envoltura de devolución de llamada jsonp debe aplicarse antes en la pila de llamadas.