AngularJS 和跨域 POST
Posted
技术标签:
【中文标题】AngularJS 和跨域 POST【英文标题】:AngularJS and Cross Domain POST 【发布时间】:2013-10-21 00:28:39 【问题描述】:我对带有 HTTP 授权标头的 CORS 请求有疑问:
在我看来,网络浏览器没有发送带有 POST 请求的授权标头,有什么办法解决这个问题吗?
这是我的 Angular 代码:
var app = angular.module('app', [])
.config(['$httpProvider', function($httpProvider)
$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];
]);
app.controller('ctrl', function ($scope, $http)
$scope.insert = function ()
$http.post('http://my.api.com/Insert',
headers:
'Authorization': 'Basic dGVzdDp0ZXN0',
'Content-Type': 'application/x-www-form-urlencoded'
,
data:
'Code': 'test data'
,
withCredentials: true
);
;
);
在服务器端,我的 web.config 中有这个
<httpProtocol >
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Cache-Control, Pragma, Origin, Authorization, Content-Type, X-Requested-With" />
<add name="Access-Control-Allow-Methods" value="GET,POST,PUT,DELETE,OPTIONS" />
<add name="Access-Control-Allow-Credentials" value="true" />
</customHeaders>
</httpProtocol>
【问题讨论】:
你找到解决方案了吗? 【参考方案1】:withCredentials - boolean - 是否在 XHR 对象上设置 withCredentials 标志。有关详细信息,请参阅带有凭据的请求。
【讨论】:
【参考方案2】:您错误地使用了$http.post
。第二个参数是你需要发送到服务器的data,你不能这样设置headers。在您的情况下,它将发送整个对象
作为 JSON 负载
试试这个:
$http(
url:'http://my.api.com/Insert',
method:"POST",
headers:
'Authorization': 'Basic dGVzdDp0ZXN0',
'Content-Type': 'application/x-www-form-urlencoded'
,
data:
'Code': 'test data'
);
【讨论】:
就是这样,谢谢!我必须解决的另一件事是,如果您有 Access-Control-Allow-Origin:*,则不能使用 withCredentials: true @Veshraj Joshi:你的情况是什么? 所以基本的 dGVzdDp0ZXN0 部分,那是什么? 'dGVzdDp0ZXN0' 代码是强制性的吗? @khanh 我正在尝试使用 Angular js 和域 laravel 5.1(php 框架)在本地机器上制作 html 文件;如果 html 文件在同一个域中,则工作正常;否则不起作用,但令人惊奇的是,“get”方法在任何地方都可以使用上述代码正常工作。 @Dezmen CEO Sykes:“dGVzdDp0ZXN0”代码是强制性的:en.wikipedia.org/wiki/Basic_access_authentication。但它应该根据当前用户具有不同的价值。以上是关于AngularJS 和跨域 POST的主要内容,如果未能解决你的问题,请参考以下文章