Сжатие Gzip через SSL с Safari?

Сегодня утром я столкнулся с очень странной проблемой при попытке получить доступ к веб-приложению, которое я создаю с помощью iPad (Safari Mobile / Webkit). Во внешнем интерфейсе веб-приложение в значительной степени полагается на запросы XHR / Ajax. На внутренней стороне сервер настроен на gzip-сжатие ответов, если «Accept-Encoding» включает «gzip».

Все работало отлично, пока я не переключил сервер на SSL. Затем я начал получать периодические ошибки «CFURLErrorDomain: 303» в Safari.

После быстрого поиска я нашел эту ссылку:

http://beyondrelational.com/modules/2/blogs/45/posts/12034/failed-to-load-resource-safari-issue.aspx.

Согласно ссылке, Safari требует заголовок длины содержимого при выполнении запроса XHR (ajax) через SSL / HTTPS. В моем случае сервер gzip-архивирует содержимое непосредственно в выходной поток, поэтому я не могу узнать, какой будет окончательная длина содержимого.

В качестве обходного пути я добавил на сервер следующую логику:

    if (request.isEncrypted()) gzip =
        !request.getHeader("User-Agent").toLowerCase().contains("webkit");

Другими словами, если соединение зашифровано через SSL, а браузер является производным от webkit (например, Safari, Chrome и т. Д.), Не сжимайте вывод. Кажется, это работает, но действительно замедляет работу.

Итак, мой вопрос таков:

Поддерживает ли Safari сжатые ответы gzip через SSL, или я создаю неправильное дерево?


person Peter    schedule 19.10.2012    source источник


Ответы (1)


Оказалось, что ошибка, которую я видел, была ошибкой на сервере и не имела ничего общего с Safari. Сервер полагался на кодирование передачи по частям при сжатии больших массивов байтов. Отдельные «чанки» были разбиты на части (заголовок, тело, трейлер) и отправлены клиенту в отдельных сообщениях. Клиент SSL (сафари) ожидал одного непрерывного «фрагмента», поэтому он не знал, что делать, когда увидел неполный фрагмент. Сервер был пропатчен, и теперь проблема решена.

person Peter    schedule 08.01.2013
comment
Думаю, у меня такая же проблема. Как именно вы пропатчили свой сервер, чтобы это исправить? Я думаю, мне нужно сделать что-то подобное, и похоже, что вы тоже используете Java. - person chubbsondubs; 12.07.2014
comment
Даже в июле 2020 года сжатые с помощью gzip страницы не могут отображаться в Safari (Desktop) на Mac, если они доставляются по HTTPS. Как именно вы пропатчили свой сервер, чтобы это исправить? - person ThirstForKnowledge; 26.07.2020