虽然我的服务器启用了标头,但AJAX CORS请求失败 - (Access-Control *)

时间:2017-01-19 18:41:43

标签: jquery ajax node.js cors

我有一个NodeJS服务器应该处理CORS DELETE请求 我有一个中间件表达层:

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检查器:

  

控制台:...否'访问控制 - 允许 - 来源'标头出现在请求的资源上。来源:" http://myhost.com"因此不允许访问。

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

  

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

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

注意:我只在Firefox和Chrome上看到此内容。似乎在IE上工作

1 个答案:

答案 0 :(得分:0)

CORS规范要求服务器根据实际请求(UITableView)以及预检请求(DELETE)设置标头。

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