【问题标题】:Angularjs - Using $http on a HTTPS URLAngularjs - 在 HTTPS URL 上使用 $http
【发布时间】:2013-06-17 09:36:10
【问题描述】:

我正在尝试通过以下代码在 HTTPS URL 上使用 $http 服务:

var request = $http.post('https://my.custom.url/webservice', privateAttributes.requestData);
request.success(function(data, status) {

}).error(function(data, status) {
    console.log('data -', data);
    console.log('status -', status);
});

my.custom.url 与我的 angularJS 应用程序位于不同的域中,但我的网络服务器配置良好,允许跨域 XHR 请求。它应该是一个公共网络服务。

请求发送后,promise 立即被拒绝,因此触发error() 函数。 dataundefinedstatus0

在 Chrome 中调试器的网络选项卡上,我可以看到与我的 $http.post() 调用相对应的待处理 OPTIONS 请求。

出于测试目的,我尝试使用 jQuery $.post() 方法执行相同的请求,并且没有问题。我认为我的 $http 服务有问题。

请注意,这不是 XSRF 问题,如果我使用我的 Web 服务的 HTTP 版本,请求是成功的。

感谢您的帮助。

【问题讨论】:

  • 我刚刚遇到这个问题。你解决过这个问题吗?

标签: javascript angularjs


【解决方案1】:

您可能需要告诉它发送 cookie:

在您的配置中,输入$httpProvider,然后将withCredentials 设置为true

.config(function ($routeProvider, $httpProvider) {
    $httpProvider.defaults.withCredentials = true;
    //rest of route code

关于 angularjs withCredentials 的信息:http://docs.angularjs.org/api/ng.$http

Mozilla 文章的链接:https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS?redirectlocale=en-US&redirectslug=HTTP_access_control#section_5

【讨论】:

  • 它不工作。 $http 调用仍然被立即拒绝,并且我在调试器的 Network 选项卡中仍然有一个挂起的 OPTIONS 请求。但是,我设法通过设置适当的内容类型和禁用 X-Requested-With 标头来强制浏览器绕过 OPTIONS 请求来使其工作:$httpProvider.defaults.headers.common['X-Requested-With'] = undefined; $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';
猜你喜欢
  • 2018-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-06
  • 1970-01-01
  • 2017-03-10
  • 2011-06-03
  • 2016-12-07
相关资源
最近更新 更多