jQuery CORS删除失败

时间:2012-08-18 08:22:53

标签: jquery ajax xmlhttprequest cors http-delete

我有两个域名:

  1. accounts.example.org
  2. app.example.org
  3. 现在我想从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/
    

    有人知道这是什么吗?

    Server Backend是node.js,表达为框架。

    此致

    更新

    我现在可以指定问题:

    问题是浏览器在OPTIONSPUTDELETEGET工作之前)发出POST请求。这样做是因为浏览器想要在执行实际请求之前检查CORS策略。出于某种原因,express没有处理此请求(响应标头为空)。因此浏览器返回CORS策略禁止请求。

    我已经尝试过了:

    1. 使用app.use
    2. 设置标头
    3. app.all
    4. with app.options
    5. 没有反应。听起来可能有一个错误......

1 个答案:

答案 0 :(得分:2)

它是什么浏览器?我知道它至少适用于chrome。这是jQuery主页关于PUT和删除的内容。

  

“要求的类型(”POST“或”GET“),默认为”GET“。   注意:其他HTTP请求方法(如PUT和DELETE)也可以   这里使用的是所有浏览器都不支持它们。“