javascript - 如何将 $sce.trustAsResourceUrl 与 $http 服务一起使用

标签 javascript angularjs xmlhttprequest cors

我有一段如下所示的 AngularJS 代码,但不幸的是它无法正常工作,我看到“XMLHttpRequest 无法加载 http://lipsum.com/。没有 'Access-Control-Allow-Origin' header 出现在请求的资源”在 JS 控制台中。

var app = angular.module('plunker', []);

app.config(function($sceDelegateProvider) {
  $sceDelegateProvider.resourceUrlWhitelist([
    'self',
    'http://lipsum.com/**'
  ]);
})

.controller('MainCtrl', function($scope, $sce, $http) {
  var url = 'http://lipsum.com/';
  $http({
    url: $sce.trustAsResourceUrl(url),
    method: "GET"
  }).then(
    function(response) {
      console.log('success', response);
      $scope.status = response.status;
    },
    function(response) {
      console.log('error', response);
      $scope.status = response.status;
    }
  );
});

http://plnkr.co/edit/ZDNJ3bfO1YlRQhUmNHZj?p=preview

如何使用$http方法使其正常工作并获得成功响应?

感谢您的帮助!

最佳答案

假设http://lipsum.com/是您实际想要获取的网站,您可以这样做:

var url = "https://cors-anywhere.herokuapp.com/http://lipsum.com/";

...您的前端代码将按预期工作。

起作用的原因是,它会导致请求转到 https://cors-anywhere.herokuapp.com,一个开放/公共(public) CORS 代理,然后将请求发送到 http://lipsum.com/.

当该代理收到响应时,它会接受它并向其添加 Access-Control-Allow-Origin 响应 header ,然后将其作为响应传回您的请求前端代码.

带有 Access-Control-Allow-Origin 响应 header 的响应是浏览器看到的内容,因此浏览器向您显示的错误消息现在消失了,浏览器允许您的前端 JavaScript 代码访问响应。

或使用 https://github.com/Rob--W/cors-anywhere/ 中的代码或类似的设置您自己的代理。

您需要代理的原因是,http://lipsum.com/ 本身不发送 Access-Control-Allow-Origin 响应 header ,因此您的浏览器将拒绝让您的前端 JavaScript 代码访问来自 http://lipsum.com/ 跨源的响应。

https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS有更多详细信息。

关于javascript - 如何将 $sce.trustAsResourceUrl 与 $http 服务一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44123903/

相关文章:

javascript - 如何防止用户被重定向到 JavaScript 中的链接?

javascript - 需要帮助将函数的输出作为输入表单的值

javascript - 是否可以使用没有作用域变量的angularjs中的方法来显示数据

javascript - Angular 形 Material 底板单击时无法关闭

javascript - 如何在 AngularJS 的路由 Urls 中传递参数

jquery - 如何在 CORS 预检选项请求中发送自定义 header ?

javascript - 如何在 gulp-template 中使用与模式匹配的实际文件名

javascript - AngularJS: Controller 内定义的变量值未正确显示

javascript - 如何用javascript编写From Upload Stream的请求 header ?

javascript - 上传多个文件时可以跟踪单个文件的上传进度吗?