$http post 调用 OPTIONS 不是 post?

$http post call OPTIONS not post?

你好,我正在尝试调用我的后端并在调用 post 方法时遇到一些奇怪的问题。

Remote Address:192.168.58.183:80
Request URL:http://192.168.58.183/ESService/ESService.svc/CreateNewAccount
Request Method:OPTIONS
Status Code:405 Method Not Allowed
Request Headersview source
Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8,pl;q=0.6
Access-Control-Request-Headers:accept, content-type
Access-Control-Request-Method:POST
Connection:keep-alive
Host:192.168.58.183
Origin:http://localhost:8100
Referer:http://localhost:8100/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) >      AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93
Safari/537.36
Response Headersview source
Access-Control-Allow-Headers:Content-Type, Accept
Access-Control-Allow-Methods:POST,GET,OPTIONS
Access-Control-Allow-Origin:*
Access-Control-Max-Age:1728000
Allow:POST    
Content-Length:1565
Content-Type:text/html; charset=UTF-8
Date:Mon, 02 Feb 2015 09:11:17 GMT
Server:Microsoft-IIS/7.5
X-Powered-By:ASP.NET

And my code looks like here i think this call is okay can someone review it?

$scope.RegisterUser = function(){
var us = {
  UserName:$scope.userName,
  Password:$scope.password,
  UserRoleID:null,
  Company:$scope.company,
  Terms:$scope.terms,
  ID:null,
  BuyerID:app.buyerId
};

$http({method:'POST', url:app.wcf + '/CreateNewAccount', data:{us:us}})
.then(
    function(resp){
     app.Logger(resp.data);
    },
    function(err){
      app.Logger(err);
})};

所以也许我做错了什么或者我需要将可选配置传递给 http?

这是飞行前请求,用于启用 CORS,无需担心,这是正常现象。

通常,浏览器不允许您网站的 JavaScript 从 cross-origin 请求中读取数据。这是因为您的网站可能会指示浏览器从用户的网上银行、公司内部网或其他一些私人网站获取信息。这叫做The Same Origin Policy.

一个名为 CORS 的标准允许一个站点允许另一个站点从它读取数据。

由于 POST 请求可能会产生副作用,因此添加了额外的安全层。在浏览器发出 POST 请求之前,它会发出 pre-flight OPTIONS request 以请求允许发出 POST 请求。

您的服务器未配置为处理该 OPTIONS 请求(并且可能未配置为 return POST 请求的 CORS headers)。

如果您想允许您的 JavaScript 从不同的来源向它发出请求,您需要设置 CORS 支持。