【发布时间】:2011-09-18 05:12:38
【问题描述】:
我有一个简单的 javascript ajax 请求:
$("#login-submit").button().click(function() {
var ajaxOptions = {
url: "http://localhost:29097/authentication/",
type: "POST",
data: $("login-form").serialize(),
success: function(result) { $("body").html(result); }
};
$.ajax(ajaxOptions);
});
但是,每当我发送请求时,它总是发送一个 OPTIONS 请求,而不是指定的 POST 请求。在阅读了更多之后,它似乎可能归结为跨站点发布。我在我的 MVC 应用程序中添加了一个自定义操作过滤器,它检查 OPTION 请求并使用指定“GET、POST、PUT、DELETE”的“允许”标头进行响应,尽管它似乎从未执行过后续 POST 请求...我是这里遗漏了什么?
请求(在 Firefox、Chrome 中尝试过):
OPTIONS http://localhost:29097/authentication/ HTTP/1.1
Host: localhost:29097
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Origin: null
Access-Control-Request-Method: POST
Access-Control-Request-Headers: x-requested-with
回应:
HTTP/1.1 401 Unauthorized
Server: ASP.NET Development Server/10.0.0.0
Date: Sun, 19 Jun 2011 16:20:41 GMT
X-AspNet-Version: 4.0.30319
X-AspNetMvc-Version: 3.0
Allow: GET, POST, PUT, DELETE, OPTIONS
Access-Control-Max-Age: 1000
Access-Control-Allow-Headers: *
Access-Control-Allow-Origin: *
Cache-Control: private
Content-Length: 0
Connection: Close
我自己通过 MVC 发回 401 请求,因为它似乎是用来指示用户凭据无效的最佳标头。这个状态码会不会导致任何问题?
【问题讨论】:
-
如果您用 200 而不是 401 响应,它会做什么?在我看来,错误响应不太可能起作用。
-
@Pointy - 同样的事情,它只是返回并且没有发出后续请求。当我制作一个简单的 ASPMVC RESTful Web 服务时,这个问题就开始了,每当我用 Jquery Ajax 调用它时,参数都不是自动绑定的,并且始终为空。这导致我注意到标头没有包含任何帖子信息,因为它是一个 OPTIONS 请求,并且由于它没有在收到响应后用 POST 跟进 OPTIONS,所以我对我还能做什么有点迷茫...我相信这一定是可行的...
标签: jquery ajax http asp.net-mvc-3 rest