鍍金池/ 問答/PHP  HTML/ CROS OPTIONS跨域如何實(shí)現(xiàn)?

CROS OPTIONS跨域如何實(shí)現(xiàn)?

看了看網(wǎng)上關(guān)于CROS的,大概明白非簡單請求的流程。
先Options請求,然后協(xié)商成功后,在正式請求。

怎么搞都搞不定。。。做一次伸手黨了
我是在header里自定義了兩個值做校驗(yàn)。

瀏覽器就報(bào)下面的跨域問題。。。

已攔截跨源請求:同源策略禁止讀取位于 http://111.231.56.227:12084/monitor/detailMission 的遠(yuǎn)程資源。(原因:來自 CORS 預(yù)檢通道的 CORS 頭 'Access-Control-Allow-Headers' 的令牌 'appid' 無效)。 

JS代碼

    var form = new FormData();
    form.append("mission_id", "245d14793c0e4f4fa936755cd558841a");

    var settings = {
        "async": true,
        "crossDomain": true,
        "url": "http://111.231.56.227:12084/monitor/detailMission",
        "method": "POST",
        "headers": {
            "appId": "0000815",
            "appSecret": "cbd88ab8822fa",
        },
        "processData": false,
        "contentType": false,
        "mimeType": "multipart/form-data",
        "data": form
    };

    $.ajax(settings).done(function (response) {
        console.log(response);
    });

PHP Action

        header('Content-type: application/json');
        header('Access-Control-Allow-Origin:*');

        if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS'){
            header('Access-Control-Allow-Methods:POST');
            header('Access-Control-Allow-Headers:*');
            header('Access-Control-Mas-Age:3600');
            $this->returnSuccess();
        }
        $this->checkAppIdAndSecret();
        $id = $this->getPost('mission_id');

大家說headers不能用*,因此改了一下

header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, appid, appSecret");

圖片描述

Methods也加上OPTIOHS,GET,PUT啥的了
換了個報(bào)錯
圖片描述

回答
編輯回答
荒城
Support for wildcards in the Access-Control-Allow-Headers header was added to the living standard only in May 2016, so it may not be supported by all browsers.

Access-Control-Allow-Headers不接受通配符。

cors-access-control-allow-headers-wildcard-being-ignored

補(bǔ)充

注意拼寫錯誤,響應(yīng)允許的是appSecert,請求發(fā)送的是appSecret

2017年3月10日 05:26
編輯回答
朽鹿

Access-Control-Allow-Methods得把options加上噻

2017年3月1日 04:31
編輯回答
心癌

你后端header 沒有允許 appid, appSecret。
PHP 添加

header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, appid, appSecret");
2017年9月19日 10:00
編輯回答
愚念

看了下MDN ,上面沒有說Access-Control-Allow-Headers 可以用 *

2017年9月23日 19:03