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 为框架。

问候

更新

我现在可以指定问题了:

问题是浏览器在PUTDELETE 之前执行OPTIONS 请求(GETPOST 工作)。这样做是因为浏览器想要在执行实际请求之前检查 CORS 策略。由于某种原因 express 不处理此请求(响应标头为空)。因此浏览器返回 CORS 策略禁止该请求。

我已经试过了:

    使用 app.use 设置标题 与 app.all 带有 app.options

没有反应。听起来可能有错误...

【问题讨论】:

【参考方案1】:

它是什么浏览器?我知道它至少可以在 chrome 中使用。这就是 jQuery 主页关于 PUT 和删除的说明。

"请求的类型(“POST”或“GET”),默认为“GET”。 注意:其他 HTTP 请求方法,如 PUT 和 DELETE,也可以 此处使用,但并非所有浏览器都支持。”

【讨论】:

以上是关于jQuery CORS 删除失败的主要内容,如果未能解决你的问题,请参考以下文章

CORS - jQuery 获取 ajax 响应状态失败

如果修改 XHR,则 JQuery AJAX 请求失败并出现 CORS 错误

Amazon S3 CORS POST 因 JQuery-file-upload 失败

FireFox的Angularjs CORS失败

JQuery、CORS 和自定义响应标头

上传文件时cors和jquery出现问题