【问题标题】:AJAX CORS request fails although my server enables headers - (Access-Control*)尽管我的服务器启用了标头,但 AJAX CORS 请求失败 - (Access-Control*)
【发布时间】:2017-06-04 14:22:03
【问题描述】:

我有一个应该处理 CORS DELETE 请求的 NodeJS 服务器。
我有一个中间件快递层:

app.use('/', function(req, res, next) {
    if(req.method == 'OPTIONS') {
        res.header("Access-Control-Allow-Origin" , "http://myhost.com");
        res.header("Access-Control-Allow-Methods", "DELETE, OPTIONS");   
    }
    else {
        next();
    }
});

app.delete('/', function(req, res) {
    res.send('OK');
});

我的 AJAX 调用是

$.ajax({ url:"http://myhost.com", type:'DELETE'})

  .done(function(resp){  
            document.body.innerHTML = resp;  
        })  
  .fail(function(jqXHR, error, errorThrown){  
            document.body.innerHTML = "Failed to make AJAX request";  
        })  

在 Chrome 中,我看到了

AJAX 请求失败

如果我打开 webkit 检查器:

控制台:...请求的资源上不存在“Access-Control-Allow-Origin”标头。来源:“http://myhost.com”因此不允许访问。

我还看到 OPTIONS 请求返回有效的“Access-Control-Allow*”标头:

访问控制允许方法:删除,选项
访问控制允许来源:http://myhost.com

但是,如果我检查最终的 HTTP DELETE 请求,在网络选项卡中的选项请求之后,我会看到“确定” - 从我的服务器返回

注意:我只在 Firefox 和 Chrome 上看到这个。似乎可以在 IE 上运行

【问题讨论】:

  • 预检并不总是被发送。在它们不是的情况下,所述标头必须在主要请求中。
  • 在 Chrome 上试用 CORS 扩展

标签: jquery ajax node.js cors


【解决方案1】:

CORS 规范要求服务器在实际请求(DELETE)和预检请求(OPTIONS)上设置标头。

有关详细信息,请参阅 section 6.1,但在您的情况下,只需添加 Access-Control-Allow-Origin 响应标头即可。

【讨论】:

  • 我真的很想了解为什么您的回答被否决了。这不准确吗?
猜你喜欢
  • 2021-04-19
  • 2019-10-02
  • 2012-03-25
  • 1970-01-01
  • 2021-03-14
  • 1970-01-01
  • 2014-11-20
  • 2023-03-14
  • 1970-01-01
相关资源
最近更新 更多