使用HTTP-POST提交表单会导致CORS错误

时间:2019-01-20 11:22:16

标签: javascript html cors semantic-ui

有一个用C ++编写的后端,用于处理HTTP请求(使用JSON)。 前端使用语义ui,但是ajax用于发送请求:

$(document).ready(function () {
function createProjectJson(projectName) {
    var ret = JSON.stringify({
        project: {
            identity: {
                name: projectName
            }
        }
    })
    return ret;
}

var endpoints = {
    'createProject': 'http://127.0.0.1:1912/api/projects'
}

$('form .submit.button').click(function (event) {
    var proName = $("#createPro").val();
    if(proName.length === 0)
        event.preventDefault();
    else
    {
        var payload = createProjectJson(proName);

        $.ajax({
            dataType: "json",
            url: endpoints.createProject,
            data: payload,
            method: "POST"
        }).done(function( json ) {
            console.log("done");
         })
         .fail(function( xhr, status, errorThrown ) {
           console.log( "Error: " + errorThrown );
           console.log( "Status: " + status );
           console.dir( xhr );
         });
    }
});
});

表单如下:

 <form class="ui form">
        <div class="field">
            <label>Project name</label>
            <div class="field">
                <input id="createPro" type="text" name="name" placeholder="Give the project a name">
            </div>
        </div>
        <div class="ui checkbox">
            <input type="checkbox" class="hidden">
            <label>Project enabled</label>
        </div>
        <div class="ui submit button">Create</div>
    </form>

根据CORS,不应触发任何CORS。为什么会出现此错误: request console output

Web服务器在172.0.0.1:5500上运行(我在VS代码中使用实时服务器插件)。 我也在后端在PUT上实现了CORS(在CORS响应中回显了原点),但存在相同的错误。我尝试在CORS响应中使用*(在Access-Control-Allow-Origin中),结果相同。 服务器响应数据只是一个空的{}。 此外,我检查了后端(没有OPTIONS请求),wireshark没有将任何其他软件包显示为POST +响应。

1 个答案:

答案 0 :(得分:1)

  1. 根据规范,应该有CORS请求,而不仅仅是飞行前请求。
  2. 代码在http://127.0.0.1:1912中运行,而资源在http://127.0.0.1:5500中。不同的端口意味着不同的起源,因此这是CORS请求。
  3. 在您提供的屏幕截图中,响应头中没有Access-Control-Allow-Origin。您应该添加一个来解决该问题。