javascript - 使用 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 错误。
我错过了什么?
解决方案
来自MDN 网络文档;
HTTP 方法(GET 或具有某些 MIME 类型的 POST),规范要求浏览器“预检”请求,使用 HTTP OPTIONS 请求方法从服务器请求支持的方法,然后在服务器“批准”后发送实际请求。
由于您发送的是 PUT 请求,因此您必须先处理 OPTIONS 方法,然后在批准后,您将能够发送您的 PUT 请求。因此,您需要明确指出您在后端允许的方法,例如,如果您控制 API 并且假设它使用 Express,则可以使用以下方法。
res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');
推荐阅读
- sql - 基于另一行的唯一列数
- android - Android Oreo 模拟器中的相机
- c# - Web API 和 .NET 标准
- r - 将多个文件下载到一个 PDF 闪亮
- javascript - 如何对谷歌应用脚本中的范围列求和
- angular - 在 subscribe 中调用 subscribe
- mysql - 如何将 SQL 查询重写为 Laravel
- javascript - Json.stringify 在从状态中获取值时无法序列化循环结构
- mysql - 在 MySQL 8 中重置 root 密码
- javascript - Angular 6 和 Angular Material - mat-radio-group [(ngModel)] 在 *ngFor 中设置动态变量