Отказался от применения стиля, потому что его тип MIME "text / html" не поддерживается типом таблицы стилей MIME, и включена строгая проверка MIME - PullRequest
0 голосов
/ 12 июня 2018

У нас есть сайт, запущенный в производство с веб-мастерами XYZ.Ниже приведены два снимка экрана веб-консоли, когда ошибка возникает в двух разных случаях.

enter image description here enter image description here

Мы сталкиваемсяэтот вопрос периодически и не последовательно.Кроме того, это происходит с несколькими пользователями, а не со всеми пользователями (я не знаю, связано ли это с регионом или нет).Когда эта проблема возникает, страница не загружается должным образом.После нескольких попыток обновления страница загружается правильно, а все остальное работает как положено.

Известно, что веб-мастера включили строгую проверку типов 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>

Насколько я понимаю, поток запросов работает, как на этой маленькой диаграмме.

enter image description here

Я подозреваю, что проблема вызвана серверами веб-мастеров, когда они отправляют ответ обратно в браузер клиента (шаг 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.На данном этапе я не знаю, так ли это.Я ищу все возможные области для решения проблемы !!!

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Единственный способ, который я нашел, чтобы избавиться от этой проблемы, - это сделать стили и файлы сценариев встроенными в файл jsp.

Я уменьшил каждый файл css и .js и добавил их в файл jsp.

Это решило проблему !!

0 голосов
/ 20 июня 2018

То, что клиент запрашивает (HTML / XML), который инициирует запрос, в целом почти бессмысленно и безнадежно для установки пантомимы другого запроса файла.Ответ сервера - это то, что в конечном итоге определяет, каким будет ответ типа mime.Обычно это можно сделать двумя способами.

В большинстве случаев с серверами Apache HTTP все файлы с одинаковыми расширениями имеют одинаковые типы MIME, поэтому все файлы * .js будут иметь тип MIME application/javascript..

Установка типа MIME через файл Apache .htaccess:

AddType text/css .css
AddType application/javascript .js

Иногда люди используют переписывание Apache или другие расширенные методы, а иногда нет никаких расширений файлов.Типы MIME могут быть добавлены в файлы по отдельности.

Установка типа MIME с помощью PHP:

header('Content-Type: text/css; charset=UTF-8');//Use only in .css files.
header('Content-Type: application/javascript; charset=UTF-8');//Use only in .js files.

Если по какой-то причине вам нужно запустить PHP внутри файла .css, который вы 'd используйте это в файле .htaccess, а затем используйте приведенный выше код, чтобы убедиться, что заголовок файла сообщает браузеру, каков правильный тип MIME.

AddType application/x-httpd-php5 .css .html

Что касается того, что вызывает периодически возникающие проблемы, яЯ не уверен, так как я пишу всего своего собственного кода, чтобы избежать этой и других проблем, с которыми вы сталкиваетесь.Конечно, большинство людей не имеют такой возможности.Таким образом, наилучший сценарий, который я могу порекомендовать при поиске причины проблемы, состоит в том, чтобы определить, что задает заголовок для файлов (например, файл CSS, используемый в качестве HTML).Если у вас уже есть серверный код, такой как PHP, работающий в этих файлах, вам нужно его переопределить (например, с помощью PHP выше). критически важно понять, что заголовки должны быть отправлены в первую очередь перед отправкой любого контента, в противном случае заголовки в лучшем случае останутся невидимыми, а в худшем случае испортят запрос файла.Я подозреваю, что файл, с которым у вас проблемы, вероятно, содержит код серверной части;если это , а не , я рекомендую загрузить их через FTP и посмотреть, чтобы убедиться, что то, что находится на вашем живом сервере, совпадает с тем, что находится на вашем компьютере разработчика (например, взломаны ли эти файлы).

Кроме того, опубликованный вами XML не будет влиять ни на что, запрашиваемое с сервера (если только это не указано как официально поддерживаемое серверами Amazon).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...