У нас есть сайт, запущенный в производство с веб-мастерами XYZ.Ниже приведены два снимка экрана веб-консоли, когда ошибка возникает в двух разных случаях.
Мы сталкиваемсяэтот вопрос периодически и не последовательно.Кроме того, это происходит с несколькими пользователями, а не со всеми пользователями (я не знаю, связано ли это с регионом или нет).Когда эта проблема возникает, страница не загружается должным образом.После нескольких попыток обновления страница загружается правильно, а все остальное работает как положено.
Известно, что веб-мастера включили строгую проверку типов MIME.
Пути URL всех ресурсов (.js& .css файлы) являются точными.Тип MIME, установленный в источнике для этих файлов, является правильным.Ниже приведен фрагмент кода страницы .jsp, на которую ссылаются эти файлы.
<link rel="stylesheet" href="${pageContext.request.contextPath}/static/css/bootstrap/bootstrap.min.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/static/css/jquery/jquery-ui.css" type="text/css" />
<script src="${pageContext.request.contextPath}/static/js/jquery/jquery.min.js" type="text/javascript" ></script>
<script src="${pageContext.request.contextPath}/static/js/bootstrap/bootstrap.min.js" type="text/javascript"></script>
<script src="${pageContext.request.contextPath}/static/js/jquery/jquery.slimscroll.min.js" type="text/javascript"></script>
<script src="${pageContext.request.contextPath}/static/js/jquery/jquery.dataTables.min.js" type="text/javascript"> </script>
Насколько я понимаю, поток запросов работает, как на этой маленькой диаграмме.
Я подозреваю, что проблема вызвана серверами веб-мастеров, когда они отправляют ответ обратно в браузер клиента (шаг 4).После того, как они прочитали ответ от сервера приложений, я подозреваю, что их сервер не может поддерживать тот же тип содержимого файла (.css / .js).Прежде чем заявить об этом, я хочу подтвердить свое понимание, но мне не хватает инструментов, чтобы доказать это, поскольку это происходит только в производстве.Мы не видим эту проблему в нашей среде разработки для отладки !!!
Что касается веб-мастеров, проблема заключается в коде приложения.В нашем коде я вижу тип каждого файла .js / .css в файле .jsp.Я вижу, что браузер НЕ принимает ответ от веб-мастеров.Поскольку мы поддерживаем rel = "stylesheet" type = "text / css" для файлов CSS и type = "text / javascript" для всех файлов JavaScript , я не вижу проблемы на сервере приложений !!
Заранее спасибо за ваши советы.
Редактировать 1: Добавлены mimetypes в web.xml, как показано ниже:
<mime-mapping>
<extension>js</extension>
<mime-type>application/javascript</mime-type>
</mime-mapping>
<mime-mapping>
<extension>css</extension>
<mime-type>text/css</mime-type>
</mime-mapping>
Добавлены mimetypes в server.xml на свободном сервере, как показано ниже для справки.
<mimeTypes>
<type>js=application/javascript</type>
<type>css=text/css</type>
</mimeTypes>
Несмотря на это, мы часто получаем несоответствие типов пантомимы в браузере.Команда веб-мастеров утверждает, что сервер приложений должен отправлять неправильный контент без какой-либо разумной информации.
Редактировать 2: Затем я проверил, какие заголовки ресурсов (js/ CSS файлы) отправляются с помощью команды ниже.
curl -I https://myapplication/static/js/angular/angular.min.js Ниже ответ я получаю.Он последовательно возвращает один и тот же ответ, когда я запускаю цикл 100 раз.
HTTP/1.1 200 OK
X-Backside-Transport: OK OK
Content-Language: en-US
Content-Length: 168517
**Content-Type: application/javascript**
Date: Tue, 19 Jun 2018 10:38:25 GMT
Last-Modified: Tue, 29 May 2018 17:04:10 GMT
X-Powered-By: Servlet/3.1
X-Global-Transaction-ID: 1178221711
Connection: close
Итак, я не вижу никаких проблем на стороне сервера приложений.
- Изменить 3: Когда веб-мастера предположили, что устаревший кеш может создавать проблемы такого рода, кеш отключается с их стороны.Я дополнительно написал код на стороне сервера, чтобы гарантировать, что кеш отключен.Ниже приведен фрагмент кода для справки:
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setHeader("Expires", "0"); // Proxies.
Чтобы убедиться, что ресурс загружен с сервера, а не из кэша, посмотрите вкладку сети в инструментах разработчика.Если ресурс указывает 200 кодов состояния, он успешно загружен с сервера.Если код состояния равен 304, он загружается из кэша.
- Изменить 4: Я не знаю, как веб-мастера устанавливают соединение ssl.Когда SSL-соединение не установлено должным образом, оно выдает содержимое в виде text / html.На данном этапе я не знаю, так ли это.Я ищу все возможные области для решения проблемы !!!