AXIOS POST失败的访问控制检查:No' Access-Control-Allow-Origin' .HTTP状态码405

时间:2018-06-18 21:36:27

标签: api cors axios

我不知道自己做错了什么,需要帮助。

function loadDoy() {
    axios({
        method: 'post',
        headers: {

"Access-Control-Allow-Origin": "*",
            'Content-Type': 'application/json',
        },
        url: apiPostUrl,
        data: {
            user: "webuser",
            password: "m0nk3yb@rz",
            layout: "Main Menu"
        },
    })
    .then(function(response) {
        this.token = response.data.token;
        //if login token works then get records
        getRecords();
    })
    .catch(function(xhr, ajaxOptions, thrownError) {
        alert(xhr.status);
        alert(thrownError);
    });
}

1 个答案:

答案 0 :(得分:0)

您可以在axios帖子的标题处使用' crossDomain&#39 ;: true ,这是由于cors错误。您的浏览器正在生成Preflight Request,它使用OPTIONS HTTP方法。这是为了检查服务器是否允许POST请求 - 在对OPTIONS请求的响应中发送405状态代码,而不是POST请求

在这种情况下,以下情况导致请求被预检:

如果Content-Type标头的值不是以下值:

  1. 应用程序/ x-WWW窗体-urlencoded

  2. 的multipart / form-data的

  3. 纯文本/

  4. Content-Type标头的值由axios设置为application / json; charset = utf-8。使用text / plain; charset = utf-8或text / plain修复了问题:您可以尝试使用如下所示。

    来源:App Script sends 405 response when trying to send a POST request

        axios({
            method: 'post',
            headers: {    
                'crossDomain': true,
                //'Content-Type': 'application/json',
                'Content-Type': 'text/plain;charset=utf-8',
            },
            url: apiPostUrl,
            data: {
                user: "webuser",
                password: "m0nk3yb@rz",
                layout: "Main Menu"
            },
        })
        .then(function(response) {
            this.token = response.data.token;
            //if login token works then get records
            getRecords();
        })
        .catch(function(xhr, ajaxOptions, thrownError) {
            alert(xhr.status);
            alert(thrownError);
        });