jQuery CORS 删除失败
Posted
技术标签:
【中文标题】jQuery CORS 删除失败【英文标题】:jQuery CORS delete fails 【发布时间】:2012-08-14 13:39:42 【问题描述】:我有两个域:
-
accounts.example.org
app.example.org
现在我想从 app.example.org 向 accounts.example.org/session 发出 HTTP DELETE
请求。
$.ajax(
url: "http://accounts.example.org/session",
type: "DELETE"
);
没什么不同。 accounts.example.org 中允许 CORS 的标头是:
Access-Control-Allow-Origin: http://app.example.org
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Headers: X-Requested-With, Content-Type
所以 AJAX 调用现在失败并告诉我 CORS 标头有问题...
我仔细查看了AJAX选项,发现jQuery并没有直接做DELETE
:
Request URL:http://accounts.example.org/session
Request Method:OPTIONS
Status Code:200 OK
Request Headersview source
Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4
Access-Control-Request-Headers:origin, accept
Access-Control-Request-Method:DELETE
Connection:keep-alive
Host:accounts.example.org
Origin:http://app.example.org
Referer:http://app.example.org/
有人知道这是什么吗?
服务器后端是 node.js,以 express 为框架。
问候
更新
我现在可以指定问题了:
问题是浏览器在PUT
和DELETE
之前执行OPTIONS
请求(GET
和POST
工作)。这样做是因为浏览器想要在执行实际请求之前检查 CORS 策略。由于某种原因 express 不处理此请求(响应标头为空)。因此浏览器返回 CORS 策略禁止该请求。
我已经试过了:
-
使用 app.use 设置标题
与 app.all
带有 app.options
没有反应。听起来可能有错误...
【问题讨论】:
【参考方案1】:它是什么浏览器?我知道它至少可以在 chrome 中使用。这就是 jQuery 主页关于 PUT 和删除的说明。
"请求的类型(“POST”或“GET”),默认为“GET”。 注意:其他 HTTP 请求方法,如 PUT 和 DELETE,也可以 此处使用,但并非所有浏览器都支持。”
【讨论】:
以上是关于jQuery CORS 删除失败的主要内容,如果未能解决你的问题,请参考以下文章
如果修改 XHR,则 JQuery AJAX 请求失败并出现 CORS 错误