你好,所以我试图调用我的后端,并在调用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?
答案 0 :(得分:1)
通常,浏览器不允许您网站的JavaScript从跨源请求中读取数据。这是因为您的站点可能正在指示浏览器从用户的在线银行,公司内部网或其他一些私人站点获取信息。这称为The Same Origin Policy。
一个名为CORS的标准允许网站授予其他网站读取数据的权限。
由于POST请求可能有副作用,因此添加了额外的安全层。在浏览器发出POST请求之前,它会让pre-flight OPTIONS request请求获得POST请求的权限。
您的服务器未配置为处理该OPTIONS请求(并且可能未配置为返回POST请求的CORS标头)。
如果您希望允许JavaScript从不同的来源向其发出请求,则需要设置CORS支持。
答案 1 :(得分:0)
这是一个飞行前请求,用于启用CORS,没有必要担心这是正常的。