Таблиця стилів не завантажується через тип MIME


381

Я працюю над веб-сайтом, який використовує gulpдля компіляції та синхронізації браузера, щоб підтримувати синхронізацію браузера зі своїми змінами.

Завдання gulp компілює все належним чином, але на веб-сайті я не можу побачити жодного стилю, і на консолі відображається це повідомлення про помилку:

Відмовлено в застосуванні стилю з ' http: // localhost: 3000 / properties / styles / custom-style.css ', оскільки його тип MIME ('text / html') не підтримується MIME-таблицею стилів, і включена сувора перевірка MIME.

Зараз я не дуже розумію, чому це відбувається.

HTML включає такий файл (який я впевнений, правильно):

<link rel="stylesheet" type="text/css" href="assets/styles/custom-style.css"/>

А таблиця стилів - це злиття Bootstrap & font-awesome стилів на даний момент (поки що нічого спеціального).

Шлях також правильний, оскільки це структура папки:

index.html
assets
|-styles
  |-custom-style.css

Але я продовжую отримувати помилку.

Що це може бути? Це щось (може бути, налаштування?) Для gulp / Browsersync?


Я отримував це, коли мій пов'язаний таблицю стилів починався з тега html <style ... замість того, щоб просто переходити до правил стилю. Це я також отримав під час посилання на пізніше завантажений файл HTML (AngularJS), тому я перейшов на динамічне завантаження при завантаженні сторінки через JavaScript, і проблема усунулася.
Ньюклік

82
Це трапляється, якщо ви вказали неправильну URL-адресу для файлу або коли ваш сервер не налаштований належним чином. У результаті браузер НЕ отримує таблицю стилів, але він отримує деякий HTML зі статусом 404 та із заголовком "Тип вмісту". Оскільки браузер щось отримує від сервера, він не каже вам, що немає відповіді, але він повідомляє, що тип файлу MIME невірний. Найшвидший спосіб перевірити це просто спробувати відкрити файл безпосередньо http://localhost:3000/assets/styles/custom-style.cssна новій вкладці.
RussCoder

6
Для мене це був випадок, описаний RussCoder. Причиною цього було те, що я використав Angular і забув додати файл css до упаковки стилів у angular.json. Тож це було ігноровано під час створення програми.
Яна

1
Мені вдалося виправити це питання за допомогою весняних конфігурацій безпеки. Це блокувало доступ до папки ресурсів.
sndu

2
Неправильна proxy.conf.jsonнастройка призвела нас до цієї дивної помилки, оскільки пересилання запиту до API заздалегідь не працює належним чином, таким чином, відповідь на помилку HTML.
ktsangop

Відповіді:


137

Для програм Node.js перевірте конфігурацію:

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

Зауважте, що /publicв кінці немає похилої черти в кінці, тому вам потрібно буде включити її у свій href варіант вашого HTML:

href="/css/style.css">

Якщо ви включили косу рису вперед ( /public/), то можете просто зробити href="css/style.css".


href = "/ tools / style.css"> у моєму випадку вирішив проблему!
Серхіо Герджик

127

Думаю, проблема була з бібліотекою CSS, починаючи з коментарів.

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

Вилучення бібліотеки та розміщення її у файлі постачальника (який ЗАВЖДИ мінімізований без коментарів) вирішив проблему.

Знову ж таки, я не на 100% впевнений, що це виправлення, але це все одно виграш для мене, оскільки він працює так, як очікувалося зараз.


4
Половина виправлення, тому що якщо ви не хочете ставити весь цей css у постачальника, що вам робити? Мінімізуйте node_modules щоразу, коли ви тестуєте додаток? Да ... Ви знайшли щось, щоб просто скласти певний модуль?
SteamFire

1
У моєму процесі компіляції файл постачальника створюється лише під час збирання, і тоді я просто спостерігаю за змінами у файлах, над якими я працюю (що, як правило, нічого, що переходить у постачальника). Це означає, що перша збірка трохи повільніше, але потім я просто збираю свої файли без мінімізації, що не уповільнює процес для мене
Нік

3
Я зіткнувся з цим самим випуском і виявив, що намагаюся завантажити мінімізовану версію файлу, який був присутній на сервері як нескорочений файл. Отже, я намагався завантажити "custom-style.min.css", коли файл на сервері був "custom-style.css". Як тільки я змінив своє посилання, щоб завантажити правильний ресурс, все працювало нормально.
програміст Дан

Проблема не обмежується CSS. Я також отримав 404 у файлі JS, який був викликаний коментарем у першому рядку.
Чорний

80

Ця помилка також може виникнути, коли ви неправильно не посилаєтесь на файл CSS.

Наприклад, якщо є тег посилання

<link rel="stylesheet" href="styles.css">

але ваш файл CSS названий style.css(без другого s), то є хороший шанс, що ви побачите цю помилку.


4
Саме так сталося зі мною. Я перепробував тут кожну відповідь (змінити міметик, видалити коментарі CSS, змінити конфігурацію node.js ...). Все, що мені потрібно було зробити, - це виправити помилку друку у назві CSS. До!
AJPerez

5
Щоб додати цю відповідь, переконайтеся, що gulp фактично знайшов файл css і переніс його у свій дистрибутив. Щоразу, коли я отримую цю помилку, це тому, що я якось перекрутив свій шлях до файлів css, і він просто не існує в каталозі збірки.
LAdams87

5
Так, для мене простий і дурний друк. Я думаю, що це робить, що сервер надсилає сторінку відповіді 404, тож ваш браузер отримує цю сторінку 404 і повідомляє вам, що це не правильний css ... що правда.
tanou

62

У більшості випадків це може бути просто неправильний шлях файлу CSS . Таким чином, веб-сервер повертається status: 404з деяким типом Not Foundкорисного вмісту html.

Браузер слідує цьому (неправильному) шляху від <link rel="stylesheet" ...>тегу з наміром застосувати стилі CSS. Але повернений тип вмісту суперечить, так що він реєструє помилку.

Введіть тут опис зображення


Моє питання полягало в тому, що шлях недійсний. Але цей поганий шлях був спричинений тим, що базовий href, встановлений для мого кутового проекту, був невірним. Якщо хтось інший почав бачити цю помилку після оновлення базового href, це може бути причиною.
Крейко

1
Дякуємо за те, що ви повністю і чітко задокументували, як помилка 404 у файлі CSS може призвести до цього (спочатку)
дивовижного

1
ще один спосіб усунення несправностей, вставте URL-адресу, з яким ви отримуєте цю помилку, на іншу вкладку, якщо ви не бачите CSS, це, швидше за все, проблема
BlackICE

Чим вам за натяк
Джейсон Чжоу

52

Створіть папку трохи нижче / над файлом style.css відповідно до кутової структури та надайте посилання на зразок <link href="vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">.

Введіть тут опис зображення


23
Чому це працює? Помилка стверджує, що "text / html" не підтримується MIME-тип.
Джеймс Бейтсон

6
У моєму випадку помилка пішла, але css-стилі, однак, не застосовуються ..: /
Андру,

2
Я витрачав дещо більше часу на читання цієї проблеми і зміна типу файлу css ibto щось інше може спричинити серйозні проблеми, як, наприклад, css читається як html на сервері
Нік

В AngularDart коренем для index.html є папка "web", а не головна папка проекту. Отже всі файли css повинні знаходитися всередині веб-папки. Як це "[папка проекту] \ web [вашаcssfileshere]". Тож якщо ви спробуєте імпортувати файл css, розташований за межами веб-папки, він не знайдеться.
Ваель

40

У мене виникла помилка для шаблону Bootstrap.

<link href="starter-template.css" rel="stylesheet">

Потім я видалив rel="stylesheet"посилання, тобто:

<link href="starter-template.css">

І все працює добре. Спробуйте це, якщо ви використовуєте шаблони Bootstrap.


3
Хороший улов. Помилка зараз відсутня.
Багатий

1
Відповідно до життєвого стандарту (4.2.4) , "елемент зв'язку повинен мати атрибут rel або атрибут itemprop, але не обидва". Таким чином, видалення relатрибуту просто видаляє функціональність, включаючи таблицю стилів.
Artjom B.

це досить дивно працювало для мене.

34

Я змінив 'href' -> 'src'. Отже, з цього:

<link rel="stylesheet" href="dist/photoswipe.css">

до цього:

<link rel="stylesheet" src="dist/photoswipe.css">

Це спрацювало. Не знаю чому, але це зробило роботу.


1
Хоча це і для мене спрацювало, чи це дійсний атрибут?
sr9yar

1
@ sr9yar Ви маєте рацію, що згідно з validator.w3.org невірно мати src посилання, тому це добре як швидке виправлення, але як тільки у вас є трохи більше часу, я б запропонував знайти ще один дійсне рішення.
Себастьян Ворач

20

Коментарі у вашому файлі відключать це. Деякі мініфішери не будуть видаляти коментарі.

ТАКОЖ

Якщо ви використовуєте Node.js і встановлюєте статичні файли, використовуючи expressтакі:

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

Вам потрібно правильно адресувати файли.

У моєму випадку і те й інше було проблемою, тому я встановив свої CSS-посилання на "/css/styles.css".

Приклад:

<link type="text/css" rel="stylesheet" href='/css/styles.css">

Це рішення є ідеальним, оскільки шлях є основною проблемою для CSS, що не отримує візуалізацію


18

Я просто посилався на файл CSS (кутова тема в моєму випадку) у розділі стилів моєї конфігурації збірки Angular 6 у angular.json:

Введіть тут опис зображення

Це не дає відповіді на запитання, але це може бути підходящим рішенням, як це було для мене.


3
Це правильна відповідь для проектів Angular-CLI 6
Torsten Barthel

14

Як згадувалося в цій публікації, деякі рішення працювали на мене, але CSS не застосовується на сторінці.

Просто я просто перемістив каталог "css" в каталог "Assest /" і все працює добре.

<link rel="stylesheet" type="text/css" href="assets/css/bootstrap.css">
<link rel="stylesheet" type="text/css" href="assets/css/site.css" >

Awesome (Y) вирішив мою проблему
Чакри

12

Також для інших, хто використовує Angular-CLI та публікує підпапку на веб-сервері, перевірте цю відповідь:

Під час розгортання до некорінного шляху в домені вам потрібно буде вручну оновити <base href="https://stackoverflow.com/">тег у вашому доменіdist/index.html.

У цьому випадку вам потрібно буде оновити до <base href="https://stackoverflow.com/sub-folder/">

https://github.com/angular/angular-cli/isissue/1080


10

Моя проблема полягає в тому, що я використовував webpack і в своєму посиланні HTML CSS у мене був відносний шлях, і в будь-який час я переходив би до вкладеної сторінки, яка вирішила б неправильний шлях:

<link rel="stylesheet" href='./index.css'>

тому простим рішенням було видалити, .оскільки шахта є односторінковою програмою .

Подобається це:

<link rel="stylesheet" href='/index.css'>

тому завжди вирішується на /index.css


Так, у моєму випадку я забув видалити ці відносні шляхи з мого файлу index.html і запускав webpack у виробничому режимі. Ці шляхи не потрібні, оскільки webpack динамічно посилає файли css через webpack.prod.js.
Kewal Shah

10

У мене була ця проблема із сайтом, який я знав, що працював в Інтернеті, коли переніс його на localhost та PhpStorm.

Це добре працювало в Інтернеті:

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

Але для localhost мені потрібно було позбутися від косої риси:

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

Тому я наголошую на декількох відповідях, які вже тут наводяться - це, скоріше, помилка в шляху чи написання, а не будь-яка складна проблема налаштування сервера. Помилка в консолі - це червона оселедець; мережеву вкладку потрібно спочатку перевірити на 404.

Серед наданих тут відповідей є кілька невідповідних рішень. Додавання type="text/html"або зміна hrefдоsrc не є відповіддю.

Якщо ви хочете мати всі атрибути, щоб він перевірявся на найвиборчіші валідатори та ваш IDE, тоді слід надати медіа-значення та relбути stylesheet, наприклад:

    <link rel="stylesheet" href="css/additional.css" type="text/css" media="all">

9

Я знаю, що це може бути поза контекстом, але з'єднання неіснуючого файлу може спричинити цю проблему, як це сталося зі мною раніше.

<!-- bootstrap grid -->
<link rel="stylesheet" href="./css/bootstrap-grid.css" />

Якщо цього файлу не існує, ви зіткнетеся з цією проблемою.


8

У мене була така ж проблема.

Якщо структура вашого проекту подібна наступному дереву:

index.html
assets
|-styles
  |-custom-style.css
server
  |- server.js

Рекомендую додати такий код у server.js:

var path = require('path')
var express = require('express')
var app = express()

app.use('/assets', express.static(path.join(__dirname, "../assets")));

Примітка: Шлях - це вбудований модуль Node.js, тому не потрібно встановлювати цей пакет через npm.


7

Додавши до довгого списку відповідей, це питання трапилося і зі мною, оскільки я не розумів, що шлях з точки зору синхронізації браузера був неправильним.

Враховуючи цю просту структуру папок:

package.json
app
  |-index.html
  |-styles
      |-style.css

hrefатрибут всередині <link>в index.htmlповинен бути app/styles/style.cssі неstyles/style.css


Дійсно, просто помилка на шляху дала мені цю саму помилку.
Julesezaar

вау, це працювало для мене, велике спасибі Я буквально збирався відмовитись
Vash

7

Ви можете відкрити інструменти Google Chrome, вибрати вкладку мережі, перезавантажити сторінку та знайти запит на файл CSS та шукати, що він містить у файлі.

Можливо, ви зробили щось не так, коли ви об’єднали дві бібліотеки у вашому файлі, включаючи деякі символи чи заголовки, неправильно для CSS?


1
на жаль, я спробував це, але це не дуже допомагає, запит виходить з ладу миттєво, і у нього є лише URL-адреса запиту (що правильно)
Нік

6

Якщо ви використовуєте Express без JS, спробуйте:

app.use(express.static('public'));

Наприклад, мій файл CSS знаходиться на public/stylesheets/app.css


5

Для програми Node.js просто використовуйте це після імпорту всіх необхідних модулів у файл вашого сервера:

app.use(express.static("."));
  • express.static вбудована функція середнього програмного забезпечення в Express та ця у вашому .html файлі: <link rel="stylesheet" href="style.css">

3
Ви насправді не хочете подавати код сервера громадськості?
Кі Джей

5

У мене з'явився той самий випуск, а потім я перевірив, що написав:

<base href="./"> в index.html

Потім я змінився на

<base href="/">

І тоді це справно працювало.



4

У моєму випадку, коли я розгортав пакет у прямому ефірі, я мав його із загальнодоступної папки HTML. Це було чомусь.

Але, мабуть, була активована сувора перевірка типу MIME, і я не надто впевнений, чи є вона на моєму боці чи від компанії, в якій я приймаю участь.

Але як тільки я перемістив папку стилізації в ту саму директорію, що і файл index.php, я перестав отримувати помилку, і стилізація була активована ідеально.


4

Стилі завантаження не завантажуються # 3411

https://github.com/angular/angular-cli/isissue/3411

  1. Я встановив Bootstrap v. 3.3.7

    npm install bootstrap --save
  2. Потім я додав потрібні файли сценаріїв apps[0].scriptsу файл angular-cli.json:

    "scripts": [
        "../node_modules/bootstrap/dist/js/bootstrap.js"
    ],
    
    // And the Bootstrap CSS to the apps[0].styles array
    
    "styles": [
        "styles.css",
        "../node_modules/bootstrap/dist/css/bootstrap.css"
    ],
  3. Я перезапустив сервіс

Це працювало для мене.


4

якщо браузер не може знайти пов'язаний файл css, це може призвести до цієї помилки.

Якщо ви використовуєте програму Angular, вам не потрібно ставити шлях до файлу css до index.html

 <link href="xxx.css" rel="stylesheet"> -->

Ви можете поставити пов'язаний шлях до файлу css до файлу styles.css.

@import "../node_modules/material-design-icons-iconfont/dist/material-design-icons.css";

Це було виправленням для мене, видаліть посилання href з index.html та застосував метод імпорту в styles.scss.
IronWorkshop

3

Однією з головних причин виникнення проблеми є CSS-файл, який намагається завантажити не допустимий файл CSS.

Причини:

  • Недійсний тип MIME
  • Маючи код JavaScript у таблиці стилів - (може виникнути через неправильну конфігурацію постачальника веб-пакетів)

Перевірте, чи файл, який ви намагаєтеся завантажити, є дійсним аркушем стилю CSS (отримайте URL-адресу сервера файлу на вкладці мережі та натисніть на новій вкладці та перевірте).

Корисна інформація для розгляду при використанні <link> всередині тегу body.

Хоча linkтег усередині тіла не є стандартним способом використання тегу. Але ми можемо використовувати його для оптимізації сторінки (додаткова інформація: https://developers.google.com/speed/docs/insights/OptimizeCSSDelivery ) / якщо вимагає випадок використання бізнесу (коли ви обслуговуєте тіло вмісту та сервер, налаштований на повинні надати HTML-сторінку із наданим вмістом).

Зберігаючи всередині тегу body, ми повинні додати атрибут itemPropertyу linkтег, як

<body>
    <!--  -->
      <link itemprop="url" href="http://en.wikipedia.org/wiki/The_Catcher_in_the_Rye" />
    <!--  -->
</body>`

Більш детальну інформацію про itemPropertyце можна переглянути у /webmasters/55130/can-i-use-link-tags-in-the-body-of-an-html-document .


3

зайшовши в консоль браузера> мережа> style.css ... натиснув на неї, і вона показала "не можу потрапити / шлях / до / мій / CSS", це мені сказало, що моє посилання було неправильним. я змінив це на шлях мого файлу CSS.

Оригінальний шлях до зміни був localhost: 3000 / Example / public / style.css змінивши його на localhost: 3000 / style.css вирішив це.

якщо ви подаєте файл з app.use (express.static (path.join (__ dirname, "public")); або app.use (express.static ("загальнодоступний")); ваш сервер передасть "ту папку" до браузера, тому додавання посилання "/yourCssName.css" у вашому браузері вирішує це

Додаючи інші маршрути у посилання CSS свого браузера, ви б повідомили браузеру шукати css у вказаному маршруті.

підсумово ... перевірте, куди вказує посилання CSS вашого браузера.


2

Якщо Ви встановлюєте Стилі в JavaScript як:

    var cssLink = document.createElement("link");
    cssLink.href = "./content.component.scss";
    cssLink.rel = "stylesheet";
   --> cssLink.type = "html/css";
    (iframe as HTMLIFrameElement).contentDocument.head.appendChild(cssLink);

Потім просто змініть cssLint.type (позначений стрілкою у вище описі) на "MIME":

   cssLink.type = "MIME";

Це допоможе вам позбутися від помилки.


2

Ця проблема виникає, коли ви використовуєте інструмент cli для reactjs або angular, тому ключовим є копіювання всієї остаточної збірки з цих інструментів, оскільки вони ініціалізують, що вони є власними послугами Lite, що плутає ваші URL-адреси з створеним вами заднім сервером. ... візьміть цілу папку збірки та скиньте її в папку ресурсів проекту заднього кінця сервера та перекажіть їх на своєму сервері заднього кінця, а не на сервері, який постачається з Angular або Reactjs. Інакше ви використовуєте його як передній з певного API-сервер


2

У цій проблемі я зіткнувся з тією ж проблемою, що додає користувальницький потік Azure B2C для користувальницького вигляду та відчуття. Я виявив, що корінь, на який згадувалася html-сторінка, був ../oauth/v2 (тобто шлях до сервера oauth), а не шлях до мого файлу зберігання.

Внесення повної URL-адреси сторінок вирішило для мене проблему.


2

Перевірте, чи увімкнено або вимкнено стиснення. Якщо ви користуєтесь ним або хтось увімкнув це, app.use(express.static(xxx))це не допоможе. Переконайтеся, що ваш сервер дозволяє стиснути.

Я почав бачити подібну помилку, коли додав модулі Brotli та Compression Plugins до свого веб-пакета. Тоді ваш сервер також повинен підтримувати такий тип стиснення вмісту.

Якщо ви використовуєте Express, вам слід допомогти наступне:

app.use(url, expressStaticGzip(dir, gzipOptions)

Модуль називається: express-static-gzip

Мої налаштування:

const gzipOptions = {
  enableBrotli: true,
  customCompressions: [{
  encodingName: 'deflate',
  fileExtension: 'zz'
 }],
 orderPreference: ['br']
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.