Zasób zablokowany z powodu niezgodności typu MIME (X-Content-Type-Options: nosniff)


90

Tworzę stronę internetową przy użyciu JavaScript i HTML, wszystko działało dobrze, gdy otrzymałem tę listę błędów z mojej strony 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).

Te błędy pojawiły się po automatycznej aktualizacji przeglądarki (Mozilla Firefox), być może coś zostało zmienione w konfiguracji. Czy znasz jakiś sposób na rozwiązanie tego problemu?


10
Nie ładuj plików z GitHub. Zamiast tego użyj CDN.
SLaks

Odpowiedzi:


72

Sprawdź, czy ścieżka pliku jest poprawna i plik istnieje - w moim przypadku to był problem - jak to naprawiłem, błąd zniknął


Mam też ten sam problem, a pliku również nie ma w katalogu pub. Co powinienem zrobić? Jest to niestandardowy plik motywu.
saiid

@SaiidatRLTSquare jeśli plik nie istnieje, powinieneś go gdzieś znaleźć i umieścić tam - lub jeśli ten plik nie jest ważny - po prostu usuń wiersz, który go zawiera (lub utwórz pusty plik), aby nie wystąpił błąd
dav

Używanie Pasażera z Node wyrzuciło moje ścieżki kompilacji, aktualizując ścieżki, naprawiłem to. Dziękuję Ci!
Aaron Belchamber

28

Można to naprawić, zmieniając adres URL, na przykład zły:

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

Przykład dobry:

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

rawgit.com to usługa buforowania proxy dla github. Możesz tam również przejść i interaktywnie uzyskać odpowiedni adres URL dla oryginalnego adresu URL raw.githubusercontent.com . Zobacz jego FAQ


3
W adresie raw.githubusercontent.comzostanie zastąpiony przez cdn.rawgit.comktóry odpowie poprawnym typem MIME.
Axel Guilmin

uratował mi życie. Dziękuję Ci!!
Megan Byers

Rawgit jest zamykany. możesz użyć jsdeliver, jak wyjaśniono w następującej odpowiedzi - stackoverflow.com/a/64456518/9640177
mayank1513

14

Zaczęliśmy napotykać ten błąd w środowisku produkcyjnym po tym, jak nasz zespół devops zmienił konfigurację serwera internetowego, dodając X-Content-Type-Options: nosniff. Teraz z tego powodu przeglądarka została zmuszona do interpretacji zasobów tak, jak zostało to wymienione w content-typeparametrze nagłówków odpowiedzi.

Od samego początku nasz serwer aplikacji jawnie ustawiał typ zawartości plików js na text/plain. Ponieważ X-Content-Type-Options: nosniffnie został ustawiony na serwerze internetowym, przeglądarka automatycznie interpretowała pliki js jako pliki JavaScript, chociaż typ zawartości został wymieniony jako tekst / zwykły. Nazywa się to wykrywaniem MIME. Teraz, po ustawieniu opcji X-Content-Type-Options: nosniff, przeglądarka została zmuszona do rezygnacji z wykrywania MIME i pobrania typu zawartości wymienionego w nagłówkach odpowiedzi. Z tego powodu zinterpretował pliki js jako zwykłe pliki tekstowe i odmówił ich wykonania lub zablokował. To samo widać w twoich błędach.

Rozwiązanie: polega na ustawieniu na serwerze content-typeplików JS jako

application/javascript;charset=utf-8

W ten sposób załaduje wszystkie pliki JS normalnie i problem zostanie rozwiązany.


Tam, gdzie muszę ustawić typ zawartości serwera, mam na myśli, który plik muszę zachować, używam serwera Tomcat 8.5
Bhaskara Arani

Wszystko zależy od architektury aplikacji. W naszym przypadku była to zwykła, stara monolityczna aplikacja oparta na serwletach. W związku z tym ustawiano to właśnie w metodzie serwisowej.
Manish Bansal

A co ze zmianą kodu HTML?
Aaron Franke

Przepraszam. Nie rozumiem cię. Tutaj nie było html. Mieliśmy aplikację opartą na serwletach. Jaką zmianę sugerujesz w html?
Manish Bansal


6

Czy używasz ekspresu?

Sprawdź swoją ścieżkę (zwróć uwagę na „ /” po / public /):

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

// uwaga: nie potrzebujesz znaku „/” przed „css”, ponieważ jest już uwzględniony powyżej:

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

Mam nadzieję że to pomoże


5

Dla Wordpress

W moim przypadku właśnie przegapiłem ukośnik „/” po get_template_directory_uri (), więc wynikowa / wygenerowana ścieżka była nieprawidłowa:

Mój zły kod:

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

Mój poprawiony kod:

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

3

Może to być spowodowane tym, że przeglądarka nie może uzyskać dostępu do pliku. Na tego typu błąd natknąłem się podczas tworzenia aplikacji z node.js. Możesz spróbować bezpośrednio zażądać pliku skryptu (kopiowanie i wklejanie adresu URL) i sprawdzić, czy możesz go odzyskać. Możesz wtedy zobaczyć, jaki jest prawdziwy problem. Może to być spowodowane uprawnieniami folderu, w którym znajduje się plik, lub przeglądarka po prostu nie może go znaleźć z powodu nieprawidłowej ścieżki do niego. W node.js po określeniu trasy do pliku wszystko działa.


Według tej strony MS wydaje się, że jest to problem typu MIME. Ale jak określić MIMEtyp w Node.js? (Nie należy podawać pełnych ścieżek do wszystkich plików, ale tylko do katalogów zasobów, nie?)
not2qubit

3

To może być zła ścieżka. Upewnij się, że w głównym pliku aplikacji masz:

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

Przykładowy link do twojego css jako:

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

podobne do linków do plików js:

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

2

Rozwiązałem ten problem, zmieniając zestaw znaków w plikach js z UTF-8 bez BOM na prosty UTF-8 w Notepad ++


1

Wystąpił ten błąd, gdy korzystałem z magazynu Azure jako statycznej witryny sieci Web, skopiowane pliki js miały typ zawartości as text/plain; charset=utf-8i zmieniłem typ zawartości naapplication/javascript

Zaczęło działać.


0

Zobacz protokoły HTTPS i HTTP

Czasami, jeśli używasz mieszanych protokołów [zdarza się to głównie w przypadku wywołań zwrotnych JSONP], możesz skończyć na tym BŁĘDZIE.

Upewnij się, że zarówno strona internetowa, jak i strona zasobów mają te same protokoły HTTP.


0

napotykam ten sam problem na serwerze django, więc zmieniłem DEBUG = True w pliku settings.py, aby działał


0

Zdarzyło mi się to przez niewłaściwy tag. Przez pomyłkę dodaję plik js w linktagu.

Przykład: (Niewłaściwy)

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

Rozwiązano go przy użyciu prawidłowego tagu dla javascript. Przykład:

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

0

Serwis https://cdn.rawgit.com jest zamykany. W ten sposób można użyć jednej z alternatywnych opcji. JSDeliver to darmowy CDN, którego można używać.

// załaduj dowolne wydanie, zatwierdzenie lub gałąź GitHub

// uwaga: zalecamy używanie npm do projektów, które go obsługują

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

// załaduj jQuery v3.2.1

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

// użyj zakresu wersji zamiast konkretnej wersji

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

// całkowicie pomiń wersję, aby uzyskać najnowszą

// NIE powinieneś używać tego w produkcji

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

// dodaj „.min” do dowolnego pliku JS / CSS, aby uzyskać zminimalizowaną wersję

// jeśli taki nie istnieje, wygenerujemy go dla Ciebie

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

// dodaj / na końcu, aby uzyskać listę katalogów

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

ref - https://www.jsdelivr.com/?docs=gh

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.