HttpClient.get用于读取文件

时间:2019-10-13 08:10:27

标签: angular httpclient

我想从Angular 8客户端读取以下文件:C:\ inetpub \ wwwroot IIS正在运行。 我使用了以下代码,并收到此错误:

CORS策略已阻止从来源“ http://localhost/MyFile.xml”访问“ http://localhost:4200”处的XMLHttpRequest:请求的资源上没有“ Access-Control-Allow-Origin”标头。

在IIS配置中,我添加了:Access-Control-Allow-Origin,*为: HTTP响应标头。

但是当IIS停止时,我也遇到了以上错误。

您能解释什么是错吗?

预先感谢您, 兹维卡

let headers = new HttpHeaders;
headers.append ('Access-Control-Allow-Origin','*');
this.http.get ('http://localhost:80/dwell.xml',{headers: 
headers}).subscribe(
  (val) => {
      console.log("GET call successful value returned in body", 
                  val);
  },
  response => {
      console.log("GET call in error", response);
  },
  () => {
      console.log("The GET observable is now completed.");
  });

2 个答案:

答案 0 :(得分:1)

您已经踏入了CORS的使用,这是在将角度aps部署到现实世界时必须解决的第一个问题。

我看到您已尝试在请求中设置标头'Access-Control-Allow-Origin','*',但这无法正常工作。如果浏览器首先与您的应用程序所使用的API授权(如this维基百科文章中所述),浏览器才会真正接受标头。

当您有一个与其他域的API(在您的情况下为同一域中的另一个端口)交谈的角度应用程序时,该API需要授权CORS请求;否则,浏览器运行的角度将给您“被CORS策略阻止”错误。这不仅适用于Angular,而且适用于该浏览器涉及多个域的任何请求。

一旦您对CORS有了最新的了解,您将了解为什么所有浏览器仅在API明确授权的情况下才考虑发送CORS请求。确实可以提高安全性。

要在IIS上配置CORS,您需要configure the IIS CORS module。这应该像添加this配置链接中所述的行并重新启动IIS一样简单。

您还可以在浏览器上禁用CORS保护,但我不建议您这样做。学习如何在角度应用程序中使用CORS可以真正减少将其发布到生产环境中的麻烦。

答案 1 :(得分:0)

当您尝试从幕后的domain1.com访问domain2.com时,大多数现代浏览器都会向服务器发送请求,并检查其中是否存在Access-Control-Allow-Origin标头响应。

当服务器关闭时,浏览器无法获得任何响应,因此,该请求被阻止。

出于开发目的,您可以:

  1. 在浏览器中禁用CORS策略(在设置中或使用扩展名)。
  2. 就使用Angular以及最有可能使用npm而言,您可以配置代理,然后将请求发送到主域。开发服务器会将这些请求转发到目的地。 Angular Proxy Configuration
  3. 正确调试和配置您的Web服务器,以便它返回正确的标头,还请注意Access-Control-Allow-Origin返回的域