我最近一直在使用 JSONP 和 ASP.NET MVC 做一些跨域 javascript。
特定的控制器操作只会响应 POST 请求,这是设计使然。
在 IE8 中,我可以(通过 Fiddler2)看到响应是正确的,并返回 HTTP 200 响应以及 JSONP javascript。
在 Firefox、Safari 和 Chrome 中,响应仍在返回,具有适当的 HTTP 200 代码和 JSONP 内容,唯一的区别是 JQuery 使用的 XmlHttpRequest 对象将状态代码设置为 0,并将 responseText 设置为空。
最初,我认为这是由于 COR HTTP Preflighting(Http 访问控制),其中自定义标头或 text/plain 以外的内容类型会导致额外的 HTTP 请求(带有 OPTIONS)动词被发送到服务器。我可以在 Fiddler2 中看到 OPTIONS 请求正在以 HTTP 404 响应。
Web 服务器是 IIS7(但生产 Web 服务器将是一个 IIS6 机器)。在 IIS7 中,我可以看到处理程序中列出的标准 OPTIONSVerbHandler,但我不相信这实际上是在做任何事情(事实上,我什至在任何地方都找不到关于 OPTIONSVerbHandler 的任何文档)。
为了解决这个问题,我修改了 JQuery 库以不设置自定义标头,并将内容类型更改为 text/plain 而不是 application/json,Firefox 最终开始绕过 OPTIONS 请求,而只是简单的 POST。
问题仍然在于空响应(根据 XmlHttpRequest 对象),即使 Fiddler2 显示成功的 HTTP 200 响应,并且正在返回内容。
有什么帮助吗?