Это регрессия .NET4, которая has been reported to Microsoft on Connect (пожалуйста, проголосуйте), но на данный момент у Microsoft нет никаких исправлений. На данный момент мы написали несколько правил F5, которые переписывают протокол в контенте на обратном пути. Отстой, но не позволяет изменять что-либо на уровне приложения (например, писать пользовательский HttpModule).
Прежде всего, мы проверяем, нужно ли нам обрабатывать запрос, если это так, мы отмечаем и удаляем заголовок Accept-Encoding от клиента, потому что иначе мы не сможем связать контент, если он получил GZipped on обратный путь:
when HTTP_REQUEST
{
set normalizedPath [string toupper [HTTP::path]]
if {$normalizedPath ends_with ".SVC/JS" || $normalizedPath ends_with ".SVC/JSDEBUG"}
{
set needToFixSvcReference 1
if {[HTTP::header exists "Accept-Encoding"]}
{
HTTP::header remove "Accept-Encoding"
}
}
else
{
set needToFixSvcReference 0
}
}
Тогда для обработки ответа мы проверяем, если мы должны были возиться с ответом, и если да, мы собираем содержание:
when HTTP_RESPONSE {
if($needToFixSvcReference equals 1)
{
# grab the response
if { [HTTP::header exists "Content-Length"] }
{
set content_length [HTTP::header "Content-Length"]
}
else
{
set content_length 20000
}
if { $content_length > 0 }
{
HTTP::collect $content_length
}
}
}
Тогда мы еще раз проверить, если мы должен сделать что-нибудь с этим ответом и заменить любой set_path("http
с set_path("https
.
when HTTP_RESPONSE_DATA {
if { $needToFixSvcReference equals 1 }
{
HTTP::payload replace 0 [HTTP::payload length] [string map {set_path("http set_path("https}[HTTP::payload]]
HTTP::release
}
}