簡體   English   中英

無法解決的CORS問題! 如何在MacOS上禁用Chrome的相同來源策略?

[英]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-disabledweb-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.

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