ServiceStack - использование сжатия gzip / deflate с запросами JSONP
У меня есть сервис ServiceStack, который сжимает ответ, используяRequestContext.ToOptimizedResult()
Например:
[Route("/numbers/search")]
public class FindNumbers
{
}
public object Get(FindNumbers query)
{
var data = new List<string> { "One", "Two", "Three" };
return RequestContext.ToOptimizedResult(data);
}
Это прекрасно работает при выдаче запроса, как:
GET http://myhost:13487/numbers/search.json
И сжимается, как и ожидалось сAccept-Encoding
заголовок запроса:
Accept-Encoding: gzip,deflate,sdch
Я также могу выдать запрос JSONP:
GET http://myhost:13487/numbers/search?callback=func
который правильно возвращаетapplication/javascript
обратный вызов (без сжатия).
Когда я добавляюAccept-Encoding
заголовок запроса на запрос JSONP, ответ - сжатые данные JSON в соответствии с исходным запросом JSON, а не сжатыйapplication/javascript
Перезвони.
Существуют ли очевидные причины, по которым мне не хватает такого поведения, или это просто ошибка в ServiceStack? Я ожидал бы получить сжатый обратный вызов JSONP в ответе, но я довольно зеленый с JSONP, и может быть веская причина для отката.
Обратите внимание, я работаю через источник ServiceStack, но я решил, что получу это, так как больше мозгов лучше, чем один ...
заранее спасибо
РЕДАКТИРОВАТЬ
Итак, я проследил проблему в следующем источнике
а также
if (doJsonp && !(response is CompressedResult))
return httpRes.WriteToResponse(httpReq, response, (callback + "(").ToUtf8Bytes(),")".ToUtf8Bytes());
return httpRes.WriteToResponse(httpReq, response);
Таким образом, если ответ является сжатым результатом, то независимо от требования к JSONP через?callback=func
Ответ будет просто содержать сжатый JSON (в случае примера выше), что соответствует моим выводам выше. Таким образом, похоже, что оболочку обратного вызова jsonp нужно применять ранее в стеке вызовов.