首页 > 解决方案 > 使用 ajax API 发送 PUT 请求时出现 Cors 错误

问题描述

基本上,当我使用jQuery.ajax方法发出 PUT 请求时。它不能正常工作。

例如:

$.ajax({
    "url": "http://quironapi.twotigers.local/cidades/editar/1",
    "method": "PUT",
    "type": "json",
    "data": JSON.stringify({
        "latitude": 2
    }),
    contentType: "application/json; charset=utf-8"
}).done(function(resultado){
    console.log("dados atualizados", resultado);
}).fail(function(err){
    console.log("falha ao atualizar", err);
});

将在控制台上显示这个: 在此处输入图像描述

但是,当我使用 ARC(类似 chrome 扩展的邮递员)发出相同的请求时,它告诉我Access-Control-Allow-Origin已经存在:

在此处输入图像描述

此外,使用 POST 方法而不是 PUT 的“插入/创建”请求工作正常。我也尝试使用 fetch api,但它返回了相同的 cors origin 错误。

我错过了什么?

标签: javascriptjqueryajaxrequestput

解决方案


来自MDN 网络文档

HTTP 方法(GET 或具有某些 MIME 类型的 POST),规范要求浏览器“预检”请求,使用 HTTP OPTIONS 请求方法从服务器请求支持的方法,然后在服务器“批准”后发送实际请求。

由于您发送的是 PUT 请求,因此您必须先处理 OPTIONS 方法,然后在批准后,您将能够发送您的 PUT 请求。因此,您需要明确指出您在后端允许的方法,例如,如果您控制 API 并且假设它使用 Express,则可以使用以下方法。

res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');

推荐阅读