Ресурс заблоковано через невідповідність типу MIME (X-Content-Type-Options: nosniff)


90

Я розробляю веб-сторінку з використанням JavaScript та HTML, все працювало добре, коли я отримав цей список помилок зі своєї HTML-сторінки:

The resource from “https://raw.githubusercontent.com/dataarts/dat.gui/master/build/dat.gui.min.js”
  was blocked due to MIME type mismatch (X-Content-Type-Options: nosniff).
The resource from “https://raw.githubusercontent.com/mrdoob/three.js/dev/build/three.js” was
  blocked due to MIME type mismatch (X-Content-Type-Options: nosniff).
The resource from “https://raw.githubusercontent.com/mrdoob/three.js/master/examples/js/renderers/CanvasRenderer.js”
  was blocked due to MIME type mismatch (X-Content-Type-Options: nosniff).
The resource from “https://raw.githubusercontent.com/mrdoob/three.js/master/examples/js/renderers/Projector.js”
  was blocked due to MIME type mismatch (X-Content-Type-Options: nosniff).
The resource from “https://raw.githubusercontent.com/mrdoob/three.js/dev/build/three.js” was
  blocked due to MIME type mismatch (X-Content-Type-Options: nosniff).

Ці помилки з’явилися після автоматичного оновлення браузера (Mozilla Firefox), можливо, щось було змінено в налаштуваннях. Чи знаєте ви будь-який спосіб вирішення цієї проблеми?


10
Не завантажуйте файли з GitHub. Натомість використовуйте CDN.
— Слакс

Відповіді:


72

Перевірте, чи шлях до файлу правильний, і файл існує - у моєму випадку це було проблемою - коли я це виправив, помилка зникла


Я також стикаюся з тією ж проблемою, і файл також відсутній у каталозі pub. Що я повинен зробити? Це власний файл теми.
— saiid

@SaiidatRLTSquare, якщо файл не існує, його слід десь знайти і покласти туди - або якщо цей файл не важливий - просто видаліть рядок, що його включає (або створіть порожній файл), щоб він не видав помилку
— дав

Використання Passenger with Node відкинуло мої шляхи побудови, оновивши шляхи, що їх виправили. Дякую!
— Аарон Белчамбер,

28

Це можна виправити, змінивши URL-адресу, приклад bad:

https://raw.githubusercontent.com/svnpenn/bm/master/yt-dl/yt-dl.js
Content-Type: text/plain; charset=utf-8

Приклад хорошого:

https://cdn.rawgit.com/svnpenn/bm/master/yt-dl/yt-dl.js
content-type: application/javascript;charset=utf-8

rawgit.com - це кешуючий проксі-сервіс для github. Ви також можете зайти туди та інтерактивно отримати відповідну URL-адресу для вихідної URL-адреси raw.githubusercontent.com . Перегляньте відповіді на поширені запитання


3
Адреса raw.githubusercontent.comзамінюється на cdn.rawgit.comякий відповість правильним mime-типом.
— Axel Guilmin

врятував мені життя. Дякую!!
— Меган Байерс

rawgit вимикається. Ви можете використовувати jsdeliver , як описано в наступному відповіді - stackoverflow.com/a/64456518/9640177
— mayank1513

14

Ми почали стикатися з цією помилкою у виробництві після того, як наша команда devops змінила конфігурацію веб-сервера, додавши X-Content-Type-Options: nosniff. Тепер завдяки цьому браузер був змушений інтерпретувати ресурси, як це було згадано в content-typeпараметрі заголовків відповідей.

Тепер, з самого початку, наш сервер додатків явно встановлював тип вмісту файлів js як text/plain. Оскільки,X-Content-Type-Options: nosniff браузер не був встановлений на веб-сервері, браузер автоматично інтерпретував файли js як файли JavaScript, хоча тип вмісту згадувався як text / plain. Це називається MIME-нюханням. Тепер, після встановлення X-Content-Type-Options: nosniff, браузер був змушений не робити MIME-нюхання і приймати тип вмісту, як зазначено в заголовках відповідей. Через це він інтерпретував файли js як текстові файли та відмовляв виконувати їх або заблокував. Те саме відображається у ваших помилках.

Рішення: це зробити так, щоб ваш сервер встановлював content-typeфайли JS як

application/javascript;charset=utf-8

Таким чином, він завантажить усі файли JS нормально, і проблема вирішиться.


Там, де мені потрібно встановити тип вмісту сервера, я маю на увазі, який файл мені потрібно зберегти, я використовую сервер tomcat 8.5
— Bhaskara

Все залежить від архітектури додатків. У нашому випадку це було звичайне старе сервлетне застосування на основі моноліту. Отже, це було налаштування прямо там, у методі обслуговування.
— Manish Bansal,

А як щодо заміни HTML замість цього?
— Аарон Франке,

Вибачте. Я вас не зрозумів. Тут не було html. У нас був додаток на основі сервлетів. Яку зміну ви пропонуєте в html?
— Маніш


6

Ви використовуєте експрес?

Перевірте свій шлях (зверніть увагу на " /" після / public /):

app.use(express.static(__dirname + "/public/"));

// примітка: вам не потрібно "/" перед "css", оскільки він уже включений вище:

rel="stylesheet" href="css/style.css

Сподіваюся, це допомагає


5

Для Wordpress

У моєму випадку я просто пропустив скісну риску "/" після get_template_directory_uri (), тому результат / згенерований шлях був неправильним:

Мій неправильний код:

wp_enqueue_script( 'retina-js', get_template_directory_uri().'js/retina.min.js' ); 

Мій виправлений код:

wp_enqueue_script( 'retina-js', get_template_directory_uri().'/js/retina.min.js' );

3

Це може бути тому, що браузер не може отримати доступ до файлу. Я наткнувся на такий тип помилок під час створення програми з node.js. Ви можете спробувати безпосередньо запросити файл сценарію (копіюючи та вставляючи URL-адресу) і перевірити, чи можете ви його отримати. Тоді ви бачите, в чому справжня проблема. Це може бути через дозвіл папки, в якій знаходиться файл, або браузер просто не може його знайти через неправильний шлях до нього. У node.js після вказівки маршруту до файлу все працює.


Згідно з цією сторінкою MS, це здається проблемою типу MIME. Але як вказати MIMEтип у Node.js? (Не потрібно вказувати повні шляхи до всіх файлів, а лише до каталогів активів, ні?)
— not2qubit

3

Це може бути неправильний шлях. Переконайтеся, що у вашому головному файлі програми є:

app.use(express.static(path.join(__dirname,"public")));

Приклад посилання на ваш css як:

<link href="/css/clean-blog.min.css" rel="stylesheet">

схоже на посилання на js-файли:

<script src="/js/clean-blog.min.js"></script>

2

Я вирішив цю проблему, змінивши набір символів у js-файлах з UTF-8 без специфікації на простий UTF-8 у Notepad ++


1

У мене виникла ця помилка, коли я використовував лазурне сховище як статичний веб-сайт, скопійовані файли js мали тип вмісту, text/plain; charset=utf-8і я змінив тип вмісту наapplication/javascript

Це почало працювати.


0

Див. Протоколи HTTPS та HTTP

Іноді, якщо ви використовуєте змішані протоколи [це відбувається переважно із зворотними викликами JSONP], ви можете потрапити в цю ПОМИЛКУ.

Переконайтесь, що і веб-сторінка, і сторінка ресурсу мають однакові протоколи HTTP.


0

Я також стикаюся з цією ж проблемою на сервері django, тому я змінив DEBUG = True у файлі settings.py, що працює


0

Це трапилося зі мною за неправильний тег. Помилково я додаю файл js у linkтег.

Приклад: (Неправильний)

<link rel="stylesheet" href="plugins/timepicker/bootstrap-timepicker.min.js">

Це вирішено за допомогою правильного тегу для javascript. Приклад:

<script src="plugins/timepicker/bootstrap-timepicker.min.js"></script>

0

https://cdn.rawgit.com вимикається. Таким чином, може бути використаний один із альтернативних варіантів. JSDeliver - це безкоштовний cdn, який можна використовувати.

// завантажуємо будь-який випуск, коміт або гілку GitHub

// примітка: ми рекомендуємо використовувати npm для проектів, які його підтримують

https://cdn.jsdelivr.net/gh/user/repo@version/file

// завантажуємо jQuery v3.2.1

https://cdn.jsdelivr.net/gh/jquery/jquery@3.2.1/dist/jquery.min.js

// використовуємо діапазон версій замість конкретної версії

https://cdn.jsdelivr.net/gh/jquery/jquery@3.2/dist/jquery.min.js

https://cdn.jsdelivr.net/gh/jquery/jquery@3/dist/jquery.min.js

// повністю опустити версію, щоб отримати останню

// ви НЕ повинні використовувати це у виробництві

https://cdn.jsdelivr.net/gh/jquery/jquery/dist/jquery.min.js

// додаємо ".min" до будь-якого файлу JS / CSS, щоб отримати мінімізовану версію

// якщо такого не існує, ми створимо його для вас

https://cdn.jsdelivr.net/gh/jquery/jquery@3.2.1/src/core.min.js

// додаємо / в кінці, щоб отримати список каталогів

https://cdn.jsdelivr.net/gh/jquery/jquery/

посилання - https://www.jsdelivr.com/?docs=gh

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.