Сегодня утром я столкнулся с очень странной проблемой при попытке получить доступ к веб-приложению, которое я создаю с помощью 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, или я создаю неправильное дерево?