Zasób interpretowany jako arkusz stylów, ale przesyłany za pomocą tekstu / html typu MIME (wydaje się, że nie jest powiązany z serwerem WWW)

191

Mam ten problem. Chrome nadal zwraca ten błąd

Zasób interpretowany jako arkusz stylów, ale przesyłany za pomocą typu MIME text / html

Pliki dotknięte tym błędem to po prostu styl, wybrane i jquery-gentleselect (inne pliki CSS importowane do indeksu w ten sam sposób działają dobrze i bezbłędnie). Sprawdziłem już mój typ MIME, a text / css jest już w CSS.

Szczerze mówiąc, chciałbym zacząć od zrozumienia problemu (wydaje się, że nie mogę tego zrobić sam).

Max
źródło
Czy możesz podać adres URL tego arkusza stylów?
Pan Lister,
Na wypadek, gdyby ktoś tego potrzebował. Działo się to ze względu na kompresję pliku css. I jakoś po dwóch czasach kompresji, jeden w lokalnym, jeden od mojego dostawcy CDN, serwer nie może go już rozpoznać.
LYu,
Stało się tak, gdy żądanie tagu arkusza stylów było przekierowywane na serwer z powodu problemu z zamówieniem oprogramowania pośredniego (autoryzacja oprogramowania pośredniego przed podaniem statycznego pliku). Komunikat o błędzie w konsoli Resource interpreted as Stylesheet but transferred with MIME type text/html: "http://localhost:3000/login". login:1 Uncaught SyntaxError: Unexpected token <pokazywał przekierowany adres URL strony zamiast oryginalnego żądania css, co utrudniało odnalezienie.
vaughan
Ja też doświadczyłem, na co wpadł @vaughan. Stało się tak, ponieważ arkusz stylów wymagał uwierzytelnienia. . . na stronie, która próbowała przeprowadzić uwierzytelnienie. Naprawdę trudny problem do rozwiązania, ale kiedy to rozwiążesz, wydaje się to dość oczywiste.
Todd R
Wiele osób dodało różne rozwiązania tego problemu w różnych środowiskach. Musiałem dużo przewijać, zanim znalazłem mój (Reactjs). Nie poddawaj się, jeśli nie znajdujesz się u szczytu jak zwykle w SO.
Juan Lanus

Odpowiedzi:

87

chciałbym zacząć od zrozumienia problemu

Przeglądarki przesyłają żądania HTTP do serwerów. Serwer następnie wysyła odpowiedź HTTP.

Zarówno żądania, jak i odpowiedzi składają się z kilku nagłówków i (czasem opcjonalnego) treści z zawartością.

Jeśli istnieje Content-Typetreść , to jednym z nagłówków jest opis tego, czym jest treść (czy jest to dokument HTML? Obraz? Zawartość formularza? Itd.).

Gdy poprosisz o arkusz stylów, serwer informuje przeglądarkę, że jest to dokument HTML ( Content-Type: text/html) zamiast arkusza stylów ( Content-Type: text/css).

Sprawdziłem już mój plik myme.type, a text / css jest już na css.

Następnie coś innego na twoim serwerze sprawia, że ​​arkusz stylów ma niewłaściwy typ zawartości.

Użyj karty Net w narzędziach programistycznych przeglądarki, aby sprawdzić żądanie i odpowiedź.

Quentin
źródło
4
myślę, że jestem pewien, że problem jest w moim .htaccess, którym jest pastebin.com/w8UnqFs8 (zapomniałem wspomnieć, że ten błąd daje mi tylko w podkatalogu i dopiero po odświeżeniu strony). Dziękuję za wyjaśnienie, było bardzo pomocne w zrozumieniu problemu. :)
Max
Upewnij się, że możesz uzyskać dostęp do pliku bez logowania.
Waqar
1
@Max, dlaczego nie umieścisz tych informacji w rzeczywistym pytaniu? :)
myrdd
102

Używasz Angulara?

Jest to bardzo ważne zastrzeżenie do zapamiętania.

Tag podstawowy musi znajdować się nie tylko w głowie, ale we właściwej lokalizacji.

Miałem tag podstawowy w niewłaściwym miejscu w głowie, powinien pojawić się przed tagami z żądaniami adresów URL. Zasadniczo umieszczenie go jako drugiego znacznika pod tytułem rozwiązało dla mnie.

<base href="/">

Tutaj napisałem o tym mały post

Sten Muchow
źródło
2
stosując ng-hrefzamiast hrefrozwiązać go dla mnie!
Peter Wilson,
Otrzymywałem błąd analizy OTS: niepoprawny tag wersji, ale znalazłem to, kiedy szukałem rozwiązania i o mój boże, to mnie uratowało.
Patrick Graham,
1
W moim przypadku użyłem reguły przepisywania .htaccess, aby zmienić katalog na zmienną ciągu zapytania, taką jak:RewriteRule ^my_dir/(.+)$ /new_dir/?my_var=$1 [L,QSA]
lincolnberryiii
Podobnie jak Max, rozwiązało to mój problem, mimo że nie używam Angulara. Najpierw umieściłem obrażający link / href, przed wszystkimi innymi linkami, w sekcji głowy - i ostrzeżenie zniknęło.
może chcieć zmienić nazwę twojego tytułu w swoim artykule. Nawet nie używam Angulara. Używam Swift + Leaf i to rozwiązało mój problem.
szybki nub
40

Miałem również problem z tym błędem i znalazłem rozwiązanie. Nie wyjaśnia to, dlaczego wystąpił błąd, ale w niektórych przypadkach wydaje się to naprawić.

Dołącz ukośnik / przed ścieżką do pliku css, tak jak to:

<link rel="stylesheet" href="https://stackoverflow.com/css/bootstrap.min.css">

Trilochan
źródło
czy w tym przypadku jest to istotne?
Gilles Gouaillardet
2
Miałem za dużo czasu na ten mały błąd. Jeśli ktoś przeczyta moją odpowiedź i to mu pomoże, będzie to miało znaczenie w tym przypadku.
Trilochan,
2
To, co się faktycznie wydarzyło, to serwer, na którym plik został podany /css/bootstrap.min.css, ale jeśli go nie uwzględniłeś, /to po prostu przegląda go w bieżącym katalogu, na przykład, jeśli yoursite.com/hello/trilochanprzejdziesz do , to będzie wyglądał pod hello/css/bootsrap.min.css, ale tak naprawdę jest poniżej yoursite.com/css/bootsrap.min.css, mam nadzieję, że wyczyściłem to /odnosi się do korzeni i bez /, to wygląda w bieżącym katalogu.
Suraj Jain,
1
@GillesGouaillardet To było bardzo istotne, miałem ten sam problem.
Suraj Jain,
Gorąco polecam Wam programistę bootcamp na udemy autorstwa Colta Steele, pomoże to rozwiać wasze wątpliwości.
Suraj Jain,
17

Mój problem był prostszy niż wszystkie odpowiedzi w tym poście.

Musiałem skonfigurować IIS, aby zawierał zawartość statyczną.

wprowadź opis zdjęcia tutaj

JEuvin
źródło
10

Spróbuj tego <link rel="stylesheet" type="text/css" href="../##/yourcss.css">

gdzie ##jest twój folder, w którym znajduje się plik .CSS

Nie zapomnij o: ..(podwójnych kropkach).

seq
źródło
Dodałem podwójne kropki i ukośnik (../ ścieżka_pliku). zadziałało dla mnie. dzięki
Vidhya
Jaki jest powód dodania tych dwóch..
Pardeep Jain
10

Ustawienie anonimowych poświadczeń uwierzytelnienia na tożsamość puli aplikacji załatwiło sprawę.

wprowadź opis zdjęcia tutaj

Felipe Cruz
źródło
9

Miałem również ten sam problem. Po przeprowadzeniu prac badawczo-rozwojowych odkryłem, że problem dotyczy nazwy pliku. Właściwy plik nazywał się „lightgallery.css”, ale podczas łączenia wpisałem „lightGallery.css” .

Więcej informacji:

Działa dobrze na moim lokalnym hoście (system operacyjny: Windows 8.1 i serwer: Apache). Ale kiedy przesłałem moją aplikację na zdalny serwer (inny system operacyjny i serwer WWW niż mój localhost), to nie działało, dając mi ten sam błąd co twój.

Problem polegał na rozróżnianiu wielkości liter (w odniesieniu do nazw plików) serwera.

Sandeshwar Sharma
źródło
Dzięki, łamałem sobie głowę z powodu błędu w pisowni.
Nischal Kumar BC
7

Na podstawie innych odpowiedzi wydaje się, że ta wiadomość ma wiele przyczyn. Pomyślałem, że podzielę się moim indywidualnym rozwiązaniem na wypadek, gdyby ktoś miał mój problem w przyszłości.

Nasza strona ładuje pliki CSS z dystrybucji AWS Cloudfront, która używa źródła S3 jako źródła. Ten konkretny segment S3 był synchronizowany z serwerem Linux z systemem Jenkins. syncPolecenia za pośrednictwem s3cmdzestawów Content-Type dla obiektu S3 automatycznie w oparciu o to, co mówi OS (prawdopodobnie na podstawie rozszerzenia pliku). Z jakiegoś powodu na naszym serwerze wszystkie typy były ustawione poprawnie, z wyjątkiem .cssplików, które nadał typowi text/plain. W S3, gdy sprawdzasz metadane we właściwościach pliku, możesz ustawić typ na cokolwiek chcesz. Ustawienie text/cssumożliwiające naszej witrynie poprawną interpretację plików jako CSS i prawidłowe ładowanie.

nicolashahn
źródło
6

Jeśli podajesz statyczny css z nginx, powinieneś dodać

location ~ \.css {
    add_header  Content-Type    text/css;
}
location ~ \.js {
    add_header  Content-Type    application/x-javascript;
}

lub

location ~ \.css{
    default_type text/css;
}
location ~ \.js{
    default_type application/x-javascript;
}

do nginx conf

Ryabchenko Alexander
źródło
5

Odpowiedź @Roba Sedgwicka dała mi wskazówkę, jednak w moim przypadku moja aplikacja była aplikacją Spring Boot . Właśnie dodałem wyjątki w mojej konfiguracji zabezpieczeń dla ścieżek do danych plików ...

UWAGA - To rozwiązanie jest oparte na SpringBoot ... To, co może być konieczne, może się różnić w zależności od używanego języka programowania i / lub używanego frameworka

Należy jednak zwrócić uwagę na;

Zasadniczo problem może powstać, gdy każde żądanie, w tym dotyczące treści statycznej, jest uwierzytelniane.

Powiedzmy, że niektóre ścieżki do mojej zawartości statycznej, które powodowały błędy, są następujące;

Ścieżka zwana „wtyczkami”

http: // localhost: 8080 / plugins / styles / css / file-1.css

http: // localhost: 8080 / plugins / styles / css / file-2.css

http: // localhost: 8080 / plugins / js / script-file.js

I ścieżka zwana „stronami”

http: // localhost: 8080 / pages / styles / css / style-1.css

http: // localhost: 8080 / pages / styles / css / style-2.css

http: // localhost: 8080 / pages / js / scripts.js

Następnie po prostu dodaję wykluczenia w następujący sposób w mojej konfiguracji Spring Boot Security;

@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers(<comma separated list of other permitted paths>, "/plugins/**", "/pages/**").permitAll()
            // other antMatchers can follow here
    }

}


Wykluczenie tych ścieżek "/plugins/**"i "/pages/**"uwierzytelnienia sprawiło, że błędy zniknęły.


Twoje zdrowie!

SourceVisor
źródło
@Ben Rhys-Lewis ... Zastanawiam się, dlaczego uważasz, że jest to Pytanie, a nawet wygląda na to w tej sprawie. Być może chcesz przeczytać moją odpowiedź wystarczająco uważnie, aby zobaczyć, że w rzeczywistości jest to ODPOWIEDŹ - niestety taka, która zadziałała w moim przypadku ... i zdecydowanie NIE jest pytaniem.
SourceVisor
Przepraszam moja wina. Nie jestem pewien, jak to się stało, zrobiłem boo-boo. Proszę przyjmij moje przeprosiny.
Ben Rhys-Lewis
4

Korzystanie z Angulara

W moim przypadku użycie ng-hrefzamiast hrefrozwiązania dla mnie.

Uwaga :

Pracuję z laravel jako zapleczem

Peter Wilson
źródło
Ale gdzie to dodać?
Pardeep Jain
w tagu link
Peter Wilson
3

miałem do czynienia z tym samym, z czymś w rodzaju tego samego pliku .htaccess do tworzenia ładnych adresów URL. po kilku godzinach rozglądania się i eksperymentowania. dowiedziałem się, że błąd był spowodowany względnym łączeniem plików.

przeglądarka rozpocznie pobieranie tego samego źródłowego pliku HTML dla wszystkich plików css, js i plików graficznych, gdy przejrzę kilka kroków w głąb serwera.

aby temu zaradzić, możesz użyć <base>tagu w źródle HTML,

<base href="http://localhost/assets/">

i link do plików takich jak,

<link rel="stylesheet" type="text/css" href="css/style.css" />
<script src="js/script.js"></script>

lub użyj bezwzględnych linków do wszystkich swoich plików.

<link rel="stylesheet" type="text/css" href="http://localhost/assets/css/style.css" />
<script src="http://localhost/assets/js/script.js"></script>
<img src="http://localhost/assets/images/logo.png" />
Light93
źródło
3

Jeśli korzystasz z JSP, ten problem może wynikać z mapowania serwletu. jeśli twoje mapowanie bierze URL przez defaut w następujący sposób:

@WebServlet("/")

następnie kontener interpretuje adres URL css i przechodzi do serwletu zamiast do pliku css.

miałem ten sam problem, zmieniłem mapowanie i teraz wszystko działa

Greg Artisi
źródło
2

Mam podobny problem w MVC4 przy użyciu uwierzytelniania formularzy. Problemem była ta linia w pliku web.config,

<modules runAllManagedModulesForAllRequests="true">

Oznacza to, że każde żądanie, w tym dotyczące treści statycznej, jest uwierzytelniane.

Zmień ten wiersz na:

<modules runAllManagedModulesForAllRequests="false">
Rob Sedgwick
źródło
2

wprowadź opis zdjęcia tutaj Ostatnio mam ten problem także na Chrome . Podaję tylko bezwzględną ścieżkę rozwiązania mojego problemu z plikiem CSS.

<link rel="stylesheet" href="<?=SS_URL?>arica/style.css" type="text/css" />
Zaid Bin Khalid
źródło
Żartujesz sobie ze mnie. Odrzucił to rozwiązanie 3 razy. Pojawiłem się na tej stronie wiele razy, ale po wypróbowaniu wszystkiego innego i już się poddałem, powiedziałem: „do diabła, co może pójść nie tak”. Zadziałało!!! Tajemnica życia
Kermit_ice_tea
1

Chcę rozwinąć kwestię Todda R. w OP. Na stronach asp.net web.configplik określa uprawnienia potrzebne do uzyskania dostępu do każdego pliku lub folderu w aplikacji. W naszym przypadku folder plików CSS nie zezwalał na dostęp nieautoryzowanym użytkownikom, powodując awarię strony logowania przed autoryzacją użytkownika. Zmiana wymaganych uprawnień w web.configuprawnionych nieautoryzowanych użytkownikach dostępu do plików CSS i rozwiązanie tego problemu.

Sandy Gettings
źródło
0

W przypadku, gdy ktoś przyjdzie do tego postu i ma podobny problem. Właśnie spotkałem podobny problem, ale rozwiązanie było dość proste.

Deweloper błędnie upuścił kopię pliku web.config do katalogu CSS. Po usunięciu wszystkie błędy zostały rozwiązane, a strona poprawnie wyświetlona.

Ohydny 1
źródło
Dzięki @Rohit Gupta za edycję. Pisałem szybciej niż mój wewnętrzny menedżer gramatyki! =)
Hideous1
3
Jest to rozwiązanie specyficzne dla ASP.NET, które nie jest oczywistą częścią pytania.
dakab
@dakab, więc co? Wiele innych odpowiedzi jest również specyficznych dla frameworka i pomogły one osobom używającym frameworków, które mają ten sam problem.
jsabrooke
0

Ten sam problem natrafiłem na wznowienie pracy nad starym projektem stosu MEAN. Używałem nodemonjako mojego lokalnego serwera programistycznego i dostałem ten sam błąd Resource interpreted as stylesheet but transferred with MIME type text/html. Zmieniłem z nodemonna http-serverktóry można znaleźć tutaj . Od razu zadziałało dla mnie.

Captainkirk
źródło
0

Jest tak, ponieważ musisz ustawić typ zawartości jako text / html zamiast text / css dla swojej strony serwera (php, node.js itp.)

Ayush Agarwal
źródło
1
ten problem dotyczył pliku css, a nie html
Max
0

Stało się tak, gdy usunąłem protokół z linku css dla arkusza stylów css obsługiwanego przez Google CDN.

Nie powoduje to błędu:

<link rel="stylesheet" href="//fonts.googleapis.com/css?family=Architects+Daughter">

Ale to daje błąd Zasób interpretowany jako arkusz stylów, ale przesyłany za pomocą tekstu / html typu MIME :

<link rel="stylesheet" href="fonts.googleapis.com/css?family=Architects+Daughter">
steampowered
źródło
0

Miałem podobny problem. I odkrywanie rozwiązań na tej fantastycznej stronie przepełnienia stosu.

odpowiedź użytkownika 54861 ​​(niedopasowanie nazw w przypadku wrażliwości na wielkość liter) powoduje, że jestem ciekawy, aby ponownie sprawdzić kod i zdałem sobie sprawę, że „ nie przesłałem dwóch plików js, które załadowałem do tagu head ”. :-)

Po ich przesłaniu problem mija! Kod działa i strona jest renderowana bez żadnego innego błędu!

Morał tej historii nie polega na tym, aby upewnić się, że wszystkie pliki js są przesyłane tam, gdzie strona ich szuka.

Hossein Khalesi
źródło
To tak naprawdę nie odpowiada na pytanie. Jeśli masz inne pytanie, możesz je zadać, klikając Zadaj pytanie . Możesz także dodać nagrodę za zwrócenie większej uwagi na to pytanie, gdy będziesz mieć wystarczającą reputację . - Z recenzji
Lemon Kazi
Czy nie może być wskazówką dla projektantów skryptów ecma, aby dodać odpowiedni błąd lub wyjątek do javascript, jeśli programista nie załadował zasobu na serwer? Mam na myśli „Zasób interpretowany jako arkusz stylów, ale przesyłany za pomocą tekstu / html typu MIME” jest nieco mylący, prawda?
Hossein Khalesi
0

Ten sam problem natrafiłem na aplikację .NET, open source CMS o nazwie MojoPortal. W jednym z moich motywów i skórki dla konkretnej witryny podczas przeglądania lub testowania zgrzyta i zwalnia, jakby się dusiła.

Mój problem nie dotyczył atrybutu „typ” dla CSS, ale „inną rzecz”. Moja dokładna zmiana dotyczyła Web.Config . Zmieniłem wszystkie wartości na FALSE dla MinifyCSS, CacheCssOnserver i CacheCSSinBrowser.

Po tym ustawieniu strona internetowa znów była szybka w produkcji.

HI360
źródło
0

Miałem ten sam błąd, ponieważ pierwszy raz zapomniałem wysłać poprawny nagłówek

header("Content-type: text/css; charset: UTF-8");
print 'body { text-align: justify; font-size: 2em; }';
Juergen
źródło
0

Używając ReactJs, kiedy dodam plik stylu do index.html używając względnego linku, takiego jak

<link rel="stylesheet" href="./css/style.css">

a następnie nawiguję do trasy powiedz; localhost:3000/artisti odświeżam, pojawia się błąd.

Błąd zniknął po zastąpieniu linku względnego linkiem bezwzględnym powiedz;

<link rel="stylesheet" href="http://localhost/project/public/css/style.css".

Frank Fotangs
źródło
Miałem ten problem, to samo środowisko i wypróbowałem twoje rozwiązanie bez powodzenia. Ale pokazałeś mi ścieżkę badań :-) Wiadomości zniknęły po przeniesieniu plików CSS do folderu publicznego. Kiedyś to zrobiłem, nie było potrzeby absolutnych ścieżek.
Juan Lanus
0

Napotkałem ten problem podczas ładowania CSS dla modułu układu React, który zainstalowałem z npm. Musisz zaimportować dwa pliki .css, aby uruchomić ten moduł, więc początkowo zaimportowałem je w następujący sposób:

@import "../../../../node_modules/react-grid-layout/css/styles.css";

ale okazało się, że rozszerzenie pliku należy usunąć, więc zadziałało:

@import "../../../../node_modules/react-grid-layout/css/styles";
Greg Holst
źródło
0

Jeśli nodejs i przy użyciu ekspresowego kodu poniżej działa ...

res.set('Content-Type', 'text/css');
George Livingston
źródło
Komentowanie tutaj, ponieważ jest powiązane z Node.JS. Musiałem ponownie uruchomić aplikację na moim dostawcy hostingu
Reed
0

Mam dokładnie ten sam problem i po kilku minutach wygłupiania się odszyfrowałem, że przegapiłem dodanie rozszerzenia pliku do mojego nagłówka. więc zmieniłem następujący wiersz:

<link uic-remove rel="stylesheet" href="css/bahblahblah">

do

<link uic-remove rel="stylesheet" href="css/bahblahblah.css"> 
KF2
źródło
0

Zacząłem dostawać ten problem dzisiaj tylko na chrome, a nie safari dla tego samego projektu / adresu URL dla mojego kontenera dla goormide (node.js)

Po wypróbowaniu kilku powyższych sugestii, które nie działały, i ponownym śledzeniu niektórych zmian kodu, które wprowadziłem od wczoraj do dzisiaj, co również nie miało znaczenia, wylądowałem w ustawieniach chrome, klikając:

1. ustawienia;

2. przewiń w dół, wybierz: „Zaawansowane”;

3. przewiń w dół, wybierz: „Przywróć ustawienia do pierwotnych ustawień domyślnych”;

Wydaje się, że to rozwiązało problem, ponieważ nie otrzymuję już ostrzeżenia / błędu w konsoli, a strona wyświetla się tak, jak powinna. Po przeczytaniu powyższych postów problem może wystąpić z dowolnej liczby źródeł, więc resetowanie ustawień jest potencjalną ogólną poprawką. Twoje zdrowie

Max Pietrzak
źródło
0

Jeśli udostępniasz aplikację w prod, upewnij się, że podajesz pliki statyczne pracownikowi serwisu. Miałem ten błąd, gdy obsługiwałem tylko statyczny podfolder React build na Django (bez zasobów, które mają style)

Zapalenie wątroby
źródło
0

Korzystanie z React

Ten błąd wystąpił w mojej aplikacji reagowania na profile. Moja aplikacja zachowywała się tak, jakby próbowała odwołać się do adresu URL, który nie istnieje. Wierzę, że ma to coś wspólnego z tym, jak zachowuje się webpack.

Jeśli łączysz pliki w folderze publicznym, musisz pamiętać, aby użyć% PUBLIC_URL% przed zasobem takim jak ten:

<link type="text/css" rel="stylesheet" href="%PUBLIC_URL%/bootstrap.min.css" />
ArrowKneeous
źródło