[英]Unresolvable CORS issue! How to disable the same origin policy of Chrome on MacOS?
一段時間以來,我一直面臨有關CORS的問題。 我正在使用localhost
運行ExtJS應用程序,並且在Delete進程上的REST過程中,它不斷出現此錯誤:
Response for preflight has invalid HTTP status code 403.
我已經達到了這些主題。
我做了幾件事,但沒有一件對我有用!
對CORS使用擴展程序:Allow-Control-Allow-Origin:*,這是擴展程序設置的屏幕截圖:
我已經在MacOS上安裝了Chrome Canary,並在web-security-disabled
了web-security-disabled
運行了它。 瀏覽器正在打開FLAG,並注意到這是已禁用Web安全的mod,但是某種程度上它的行為不符合預期。 這是我用來運行它的終端命令:
open -a /Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary --args --disable-web-security --/ChromeDisabled
但是效果不佳! 那我在做什么錯? 我怎么解決這個問題?
我想您想解決為什么會出現錯誤403的難題。問題出在服務器端,而不是瀏覽器或ExtJS中。
錯誤403表示“未經授權”。 那么,為什么要未經授權? 什么是“預檢”?
預檢請求是瀏覽器使用OPTIONS
HTTP方法發送到后端的特殊請求。 它在實際請求之前發送,並且不包含標頭,cookie或其他身份驗證數據而發送。 它不應返回數據,而僅返回幾個標頭,這些標頭指示允許CORS請求從哪個域訪問URL,以及它們可以發送的方法和標頭。 如果瀏覽器發現響應信息允許它發送實際的請求,它將發送實際的請求並處理返回的數據。
因此,為了支持CORS,針對后端的OPTIONS請求必須始終經過未經身份驗證,因為無法發送身份驗證信息。 但是,您的后端不允許OPTIONS請求通過未經身份驗證的請求。
您可能需要檢查使用的身份驗證代碼,並嘗試獲取圍繞身份驗證的OPTIONS請求(當然,它們那時不應返回任何數據)。 我對您的后端技術一無所知,您可能想問一下如何使用正確的標簽解決另一個問題。 在C#中會是這樣(我想您可以使用類似的功能):
[HttpOptions]
[AllowAnonymous]
public HttpResponseMessage GenerateDemoKey() {
var response = Request.CreateResponse(HttpStatusCode.OK);
response.Headers.Add("Access-Control-Allow-Origin", "*");
response.Headers.Add("Access-Control-Allow-Methods", "GET, POST, PATCH, PUT, DELETE, OPTIONS");
response.Headers.Add("Access-Control-Allow-Headers", "Origin, Content-Type, X-Auth-Token, X-Requested-With, Authorization");
return response;
}
因此,如果它是一個OPTIONS
請求(第1行),則可能通過URL .../GenerateDemoKey
(第3行),未經授權(第2行),並且狀態為200:確定的響應(第4行)添加了標頭,告訴瀏覽器,允許任何域的網站訪問真實URL(第5行),只要它們使用六個命名方法之一(第6行)並且僅發送五個命名標頭(第7行)即可。
另一方面,在PHP中,您將在處理身份驗證之前將if塊添加到腳本的開頭:
<?php
if($_SERVER['REQUEST_METHOD']=="OPTIONS") {
header("Access-Control-Allow-Origin: *")
header("Access-Control-Allow-Methods: GET, POST*")
header("Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token, X-Requested-With, Authorization")
exit(0);
}
如果使用htaccess進行身份驗證,則可能必須向htaccess文件中添加一條規則,以允許通過OPTIONS請求。 結合使用htaccess和PHP,存在巨大的安全風險-雙重確保僅將那些您檢查過的URL列入白名單,這些URL在使用OPTIONS方法調用時不會返回私有信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.