nosniffでJS/CSSがブロックされる時の診断手順
ブラウザコンソールに MIME type エラーが出る場合、実体ファイル・Content-Type・nosniff の3点が揃っているかを確認するのが最短です。
典型的な症状
- JavaScript が「MIME type text/html」でブロックされる
- CSS が読み込まれず画面が崩れる
- 同じURLでも環境によって再現したりしなかったりする
診断ステップ
- 1) Response Headers Parser で対象URLの status / Content-Type / X-Content-Type-Options を採取する
- 2) Content-Type Inspect で MIME type と charset を確認する
- 3) X-Content-Type-Options Inspect で nosniff の有効性と重複値を確認する
- 4) Security Headers Audit で配信経路全体のヘッダー欠落/上書きを確認する
- 5) 404/302/HTMLエラーページ混入がないか HTTP Status Inspect で確認する
よくある原因
- 静的配信のMIMEマッピングが誤っている
- CDNやリバースプロキシで Content-Type が書き換わる
- 存在しないアセットURLがHTMLの404ページを返している
- X-Content-Type-Options が重複・不正値で実効判定が不安定
修正チェックリスト
- JS は application/javascript、CSS は text/css を明示する
- X-Content-Type-Options は単一値 nosniff のみを返す
- アセットURLの404/302混入をデプロイ時に検査する
- CDN/オリジンで Content-Type と security headers を一致させる
修正後の再確認
- ブラウザコンソールのMIMEエラーが消えるか
- 同一URLで期待どおりの Content-Type が返るか
- 主要ブラウザでJS/CSSが安定して読み込まれるか
使うツール
- Response Headers Parser
- Content-Type Inspect
- X-Content-Type-Options Inspect
- Security Headers Audit
- HTTP Status Inspect
FAQ
- nosniff を外せば直りますか?
- 根本解決ではありません。まず正しい Content-Type を返し、nosniff は維持するのが原則です。
- JS が text/html になる典型パターンは?
- 存在しないアセットURLが 404 HTML を返すケースや、CDN/プロキシのヘッダー上書きが典型です。
参照仕様
次に見る(診断順)
site_map ルールに基づいて、次に確認すべきページを表示しています。
- Response Headers Parser — レスポンスヘッダーを構造化解析
- Content-Type Inspect — Content-Type を解析してMIME/charsetを確認
- X-Content-Type-Options Inspect — X-Content-Type-Options を解析して nosniff を確認
- Security Headers Audit — 主要セキュリティヘッダーの有無を一括監査
- HTTP Status Inspect — HTTPステータスコードを解析して対処方針を確認
- 症状別診断ガイド(入口) — キャッシュ/CORS/JWT/MIME系の実運用トラブルを、症状起点で最短導線に振り分ける総合ハブ
- 304が返らない時の診断手順 — ETag / Last-Modified と If-* の往復を確認して 304 不発を切り分ける
- 更新したのに反映されない時の診断手順 — HTML/API/静的アセット別にキャッシュ方針を確認し、反映遅延を短時間で切り分ける
同テーマの導線
事例クラスタ一覧
実運用トラブル別に、最短の診断ルートへ入るためのシナリオ集
- 症状別診断ガイド(入口) — キャッシュ/CORS/JWT/MIME系の実運用トラブルを、症状起点で最短導線に振り分ける総合ハブ
- 304が返らない時の診断手順 — ETag / Last-Modified と If-* の往復を確認して 304 不発を切り分ける
- 更新したのに反映されない時の診断手順 — HTML/API/静的アセット別にキャッシュ方針を確認し、反映遅延を短時間で切り分ける
- CORS preflight失敗時の診断手順 — OPTIONS応答、Allow-*、Origin条件を順に確認して preflight 失敗を解消する
- JWT 401/403 切り分け手順 — Authorization / WWW-Authenticate / claims / 署名検証を連携して 401 と 403 を分離する
- 429/503で再試行が止まらない時の診断手順 — Retry-After の秒/日時解釈とクライアント実装差を切り分け、過剰再試行を抑える
- Set-Cookie が保存されない時の診断手順 — Domain/Path/Secure/SameSite を順に確認して Cookie 非保持の原因を切り分ける
- OAuth戻りでログインが維持されない時の診断手順 — IdP戻りで起きる Cookie 不達を SameSite・Secure・Path/Domain・競合で順に切り分ける
- 同名Cookie競合で不安定な時の診断手順 — 同名CookieのPath/Domain差分・上書き順・送信衝突を整理して不安定挙動を解消する
- Cookie障害の運用チェックリスト — 保存失敗・OAuth戻り失敗・同名競合を一本化し、トリアージから恒久対策まで運用手順を標準化する