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?

Sim81
źródło
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ął

dav
źródło
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

Steven Penny
źródło
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.

Manish Bansal
źródło
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
12

sprawdź swoją ścieżkę, ten błąd pojawi się, jeśli plik nie istnieje w podanej ścieżce.

Priyanka Acharya
źródło
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

JPaulino
źródło
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' );
Sabir Hussain
źródło
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.

Vadi
źródło
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>
Mwongera808
źródło
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 ++

Siergiej
źródło
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ć.

Karthikeyan VK
źródło
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.

Clain Dsilva
źródło
0

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

satish kumar
źródło
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>
smartrahat
źródło
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/[email protected]/dist/jquery.min.js

// użyj zakresu wersji zamiast konkretnej wersji

https://cdn.jsdelivr.net/gh/jquery/[email protected]/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/[email protected]/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

mayank1513
źródło