所以,我试图在使用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请求进入。可能出现什么问题?
答案 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。