CORS PUT:找不到jQuery.ajax

时间:2012-11-04 11:36:59

标签: javascript node.js http jquery cors

我想将一些原始数据发送到我的子域:

$.ajax({
    url: "http://accounts.example.com:3000/me",
    type: "PUT",
    data: { wabo: "chabo" },
    dataType: "json",
    xhrFields: {
        withCredentials: true
    }
});

浏览器现在发送两个请求:

  1. 对accounts.example.com:3000 / q的选项,以检查CORS标头是否有效
  2. PUT发送数据
  3. 第一个失败,HTTP 404 Not Found。 CORS repsonse标题看起来有效:

    HTTP/1.1 404 Not Found
    X-Powered-By: Express
    Access-Control-Allow-Origin: http://node.example.com:3000
    Access-Control-Allow-Methods: HEAD, GET, POST, PUT, DELETE, OPTIONS
    Access-Control-Allow-Headers: Content-Type, X-Requested-With, Origin, Accept
    Access-Control-Allow-Credentials: true
    Content-Type: text/plain
    Set-Cookie: connect.sid=s%3Aru8njoU2ZAnoKL2W2w%2B0BHF7.%2Fe%2FQI5f6NKRWQvWlcYEkMG7HHSxxj0haFDBUID2g45A; Domain=.example.com; Path=/
    Date: Sun, 04 Nov 2012 11:31:22 GMT
    Connection: keep-alive
    Transfer-Encoding: chunked
    

    在我的节点环境的app.js中,我有:

    app.all('*', function(req, res, next) {
        res.header('Access-Control-Allow-Origin', 'http://node.example.com:3000');
        res.header('Access-Control-Allow-Methods', 'HEAD, GET, POST, PUT, DELETE, OPTIONS');
        res.header('Access-Control-Allow-Headers', 'Content-Type, X-Requested-With, Origin, Accept');
        res.header('Access-Control-Allow-Credentials', 'true');
        next();
    });
    

    var me = require('./me');
    app.get('/me', loadUser, me.show);
    app.put('/me', loadUser, me.update);
    

    从子域获取数据不仅仅是发送问题 知道我忘记了什么吗?

    问候,bodo

1 个答案:

答案 0 :(得分:4)

请改为尝试:

app.all('*', function(req, res, next) {
    res.header('Access-Control-Allow-Origin', 'http://node.example.com:3000');
    res.header('Access-Control-Allow-Methods', 'HEAD, GET, POST, PUT, DELETE, OPTIONS');
    res.header('Access-Control-Allow-Headers', 'Content-Type, X-Requested-With, Origin, Accept');
    res.header('Access-Control-Allow-Credentials', 'true');

    if( req.method.toLowerCase() === "options" ) {
        res.send( 200 );
    }
    else {
        next();
    }
});