2013-01-17 144 views
1

我正在使用jQuery阿贾克斯如下跨域请求,从我的网站ASMX服务:CORS预检OPTIONS请求返回错误,但仍然POST发送

$j.ajax({ 
    url: svcURL, 
    type: "POST", 
    data: xml, 
    contentType: "text/xml", 
    dataType: "text", 
    success: function(d) { 
    alert(d); 
    }, 
    error: function(a, b, c) { 
    alert("error"); 
    } 
}); 

POST请求由之前一个OPTIONS请求,该请求目前没有配置该服务,所以它返回500 (Internal Server Error)405 (Method Not Allowed)

接收此错误后,我希望浏览器然后忽略POST请求并返回一个错误,但是:

在铬& IEPOST请求仍发送(该服务配置是否正确处理)并收到答复。

在FirefoxPOST只是返回一个错误。

有人可以解释为什么这可以在Chrome中工作的原因吗?我预料它会表现Firefox的行为。

感谢您提前提供任何帮助。

+0

您确定OPTIONS请求是否真的被触发?你看到它在网络选项卡或萤火虫中返回响应吗? – monsur

+1

是的,我可以看到OPTIONS请求在控制台/提琴手中发送。使用我正在使用的当前服务,我收到了405错误响应。随后的POST在Chrome中运行,但在Firefox中返回错误。 – woodstock365

+1

我有一个测试CORS请求的页面。当我尝试使用Content-Type:text/xml进行POST请求时,出现以下错误: http://client.cors-api.appspot.com/client#?client_method=POST&client_credentials=false&client_headers=Content-键入%3A%20text%2Fxml&server_enable = true&server_status = 200&server_credentials = false&server_methods = POST&server_tabs = local 您是否看到相同的行为?请注意,Chrome浏览器的网络浏览器如何拒绝OPTIONS请求。 – monsur

回答

0

有一个bug in ChromeWebKit发送后续请求,即使OPTIONS请求失败。

Firefox正确遵循CORS规范,并在预检失败后取消请求。

相关问题