簡體   English   中英

禁用 Chrome 嚴格的 MIME 類型檢查

[英]Disable Chrome strict MIME type checking

有什么方法可以在 Chrome 中禁用strict MIME type checking

實際上,我正在跨域發出 JSONP 請求。 它在 Firefox 上運行良好,但是,在使用 chrome 時,它​​在控制台中出現了一些錯誤。

拒絕執行來自“ https://example.com ”的腳本,因為其 MIME 類型(“text/plain”)不可執行,並且啟用了嚴格的 MIME 類型檢查。

它在 Mozilla 中完美運行.. 問題僅在 chrome 中出現

這是請求的響應標頭..

Cache-Control:no-cache, no-store
Connection:Keep-Alive
Content-Length:29303
Content-Type:text/plain;charset=ISO-8859-1
Date: xxxx
Expires:-1
Keep-Alive:timeout=5
max-age:Thu, 01 Jan 1970 00:00:00 GMT
pragma:no-cache
Set-Cookie:xxxx
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options:nosniff
X-Frame-Options:SAMEORIGIN

我認為的解決方法:從外部將內容類型設置為application/javascript

服務器應該使用 JSONP application/javascript的正確 MIME 類型進行響應,並且您的請求應該告訴 jQuery 您正在加載 JSONP dataType: 'jsonp'

請參閱此答案以獲取更多詳細信息! 你也可以看看這個,因為它解釋了為什么用text/plain加載.js文件不起作用。

就我而言,我關閉了nginx上的X-Content-Type-Options然后工作正常。 但請確保這會稍微降低您的安全級別。 將是一個暫時的修復。

# Not work
add_header X-Content-Type-Options nosniff;
# OK (comment out)
#add_header X-Content-Type-Options nosniff;

apache 也一樣。

<IfModule mod_headers.c>
  #Header set X-Content-Type-Options nosniff
</IfModule>

對於 Windows 用戶:

如果此問題發生在您的自托管服務器(例如:您的自定義 CDN)上,並且瀏覽器 (Chrome) 顯示類似... ('text/plain') is not executable ...在嘗試加載您的 javascript 文件時.. .

這是你需要做的:

  1. 打開注冊表編輯器,Win + R > regedit
  2. 前往HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\.js
  3. 檢查內容類型是否為application/javascript
  4. 如果沒有,則將其更改為application/javascript

也有過同樣的問題,

如果您無法解決問題,您可以在命令行上運行以下命令
chrome.exe --user-data-dir="C://Chrome dev session" --disable-web-security

注意:您必須導航到 chrome 的安裝路徑。
例如: cd C:\\Program Files\\Google\\Chrome\\Application

將打開開發者會話 chrome 瀏覽器,您現在可以在新的 chrome 瀏覽器上啟動您的應用程序。
我希望這會有所幫助

當文件假裝另一個擴展名時的另一種解決方案

我在var.js文件中使用php和這個.htaccess

<Files var.js>
    AddType application/x-httpd-php .js
</Files>

然后我在 .js 文件中編寫 php 代碼

<?php
// This is a `.js` file but works with php
echo "var js_variable = '$php_variable';";

當我在 Chrome 上收到 MIME 類型警告時,我通過在.js(but php)文件中添加Content-Type標題行來修復它。

<?php
header('Content-Type: application/javascript');        // <- Add this line
// This is a `.js` file but works with php
...

瀏覽器不會執行.js文件,因為 apache 將文件的Content-Type標頭作為在.htaccess定義的application/x-httpd-php 這是一個安全原因。 但是 apache 不會執行 php 就htaccess命令模擬而言,這是必要的。 所以我們需要用 php 函數header()覆蓋 apache 的Content-Type頭。 我猜當 php 發送它而不是之前的 apache 時,apache 停止發送它自己的標頭。

如果您使用的是node.js(帶有 express)

如果你想在 node.js 中提供靜態文件,你需要使用一個函數。 將以下代碼添加到您的 js 文件中:

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

應用程序在哪里:

const express = require("express");
const app = express();

然后在您的項目文件夾中創建一個名為 public 的文件夾。 (您可以將其稱為其他名稱,這只是一個很好的做法,但請記住也要從函數中更改它。)

然后在此文件中創建另一個名為 css 的文件夾(和/或 css 下的圖像文件,如果您還想提供靜態圖像。)然后將您的 css 文件添加到此文件夾中。

添加它們后,相應地更改樣式表。 例如,如果它是:

href="cssFileName.css"

src="imgName.png"

讓他們:

href="css/cssFileName.css"
src="css/images/imgName.png"

這應該有效👌🏽

在 node.js 的 get 處理程序中將路由名稱更改為單個路由我的 app.get('/all-produce/search',(req,res)) 不起作用,但我將其更改為 app.get('/getProduce ',(req,res)) 和與 html 鏈接的 CSS 文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM