最小跨域ajax强制预检OPTIONS的例子

时间:2013-11-16 18:43:23

标签: jquery ajax cors basic-authentication http-request

所以,我试图在使用Express构建的服务器中结合跨域服务和基本身份验证。对于我在客户端使用以下ajax调用的特定路由:

$.ajax({
    type: "PUT",
    accepts: "application/json",
    url: aURL,
    data: JSON.stringify(toPut),
    contentType: "application/json; charset=UTF-8",
    dataType: "json",
    success: function(data, textStatus, jqXHR) {
        alert("Received success: '" + JSON.stringify(data) + "'");
    },
    error: function (data, textStatus, errorThrown) {
        alert("Received error: '" + JSON.stringify(data) + "'\n Status: '" + textStatus + "'\n error thrown = '" + errorThrown + "'");
    },
    crossDomain: true,
    xhrFields: {
        withCredentials: true
    },
    username: myData.username,
    password: myData.password
}).done(function() {;}).fail(function() {
    alert( "error while putting something" );
}).always(function() {;});

但是,在服务器的控制台中,我并没有真正看到OPTIONS请求进入。可能出现什么问题?

1 个答案:

答案 0 :(得分:1)

如果您没有看到OPTIONS请求,则要么没有发送请求,要么在它到达您的服务器之前被截获,或者它不是跨源请求。任何跨源PUT请求都将导致预检(OPTIONS),DELETE或除POST,GET或HEAD之外的任何其他方法。 POST / GET / HEAD如果包含non-simple headers,也会产生预检,例如内容类型为“application / json”的POST。

请注意跟踪upload progress on cross-domain XHR2 requests will also result in a preflight