$ http发布后OPTIONS不发布?

时间:2015-02-02 09:37:26

标签: javascript angularjs http ionic

你好,所以我试图调用我的后端,并在调用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
     

我的代码看起来像这里我觉得这个电话没问题可以有人查看吗?

$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?

2 个答案:

答案 0 :(得分:1)

通常,浏览器不允许您网站的JavaScript从跨源请求中读取数据。这是因为您的站点可能正在指示浏览器从用户的在线银行,公司内部网或其他一些私人站点获取信息。这称为The Same Origin Policy

一个名为CORS的标准允许网站授予其他网站读取数据的权限。

由于POST请求可能有副作用,因此添加了额外的安全层。在浏览器发出POST请求之前,它会让pre-flight OPTIONS request请求获得POST请求的权限。

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

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

答案 1 :(得分:0)

这是一个飞行前请求,用于启用CORS,没有必要担心这是正常的。