$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 支持。
你好,我正在尝试调用我的后端并在调用 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 支持。