我有两个域:
- account.example.org
- app.example.org
现在我想做一个HTTP DELETE
从 app.example.org 到 accounts.example.org/session 的请求。
$.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 为框架。
问候
更新
我现在可以指定问题:
问题是浏览器在和(和工作)OPTIONS
之前做了一个请求。这样做是因为浏览器想要在执行实际请求之前检查 CORS 策略。由于某种原因 express 不处理此请求(响应标头为空)。因此浏览器返回 CORS 策略禁止该请求。PUT
DELETE
GET
POST
我已经尝试过:
- 使用 app.use 设置标题
- 与 app.all
- 使用 app.options
没有反应。听起来可能有一个错误......