为啥只有 Angular 才会出现 CORS 错误? [复制]

Posted

技术标签:

【中文标题】为啥只有 Angular 才会出现 CORS 错误? [复制]【英文标题】:Why do I get a CORS error only with Angular? [duplicate]为什么只有 Angular 才会出现 CORS 错误? [复制] 【发布时间】:2022-01-18 13:14:54 【问题描述】: 当我使用 Angular 向我的 API 网关发送请求时,出现此错误: *CORS 策略已阻止从源“http://localhost:4200”访问“https://example.com”处的 XMLHttpRequest:请求的资源上不存在“Access-Control-Allow-Origin”标头。 * 如果我添加 'Access-Control-Allow-Origin':'*' 我有这个: *从源“http://localhost:4200”访问“https://example.com”上的 XMLHttpRequest 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:没有“访问控制-请求的资源上存在 Allow-Origin' 标头。* 但同样的请求可以完美地与 CURL、Web 浏览器和另一个移动应用程序 (Flutter) 配合使用。 我尝试在 API Gateway 中启用(使用 Access-Control-Allow-Origin:'*')并禁用 CORS,但问题仍然存在。
import  Injectable  from '@angular/core';
import  HttpClient, HttpHeaders  from '@angular/common/http';

@Injectable(
  providedIn: 'root'
)
export class mainService 
  constructor(private http: HttpClient) 

  getAll() 
    return this.http.get<any>("https://example.com", 
      
        headers: HttpHeaders('Access-Control-Allow-Origin':'*')
    );
  

【问题讨论】:

【参考方案1】:

如MDN's description of CORS中所述

出于安全原因,浏览器会限制从脚本发起的跨域 HTTP 请求。例如,XMLHttpRequest 和 Fetch API 遵循同源策略。这意味着使用这些 API 的 Web 应用程序只能从加载应用程序的同一来源请求资源,除非来自其他来源的响应包含正确的 CORS 标头。

您的 curl、Web 浏览器和 Flutter 应用程序没有通过脚本调用您的后端 API。只有您的 Angular 应用程序使用 XMLHttpRequest 来获取数据。 要解决此问题,您需要允许来自后端应用程序的 Cors

【讨论】:

以上是关于为啥只有 Angular 才会出现 CORS 错误? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥在使用 Angular http.post 而不是传统的 HTML 表单时会出现 CORS 错误?

仅当查询字符串不同时,为啥会出现 CORS 错误

为啥只有当我从 iframe 调用 postMessage() 方法时我的 Angular 属性才会更新

为啥我在角度请求中收到此错误? (CORS)

为啥即使在我们调用其余调用的同一台服务器上运行 Angular 应用程序也会出现 cors 问题

在带有 Angular 的 Spring Boot 中启用了 Cors,但仍然出现 cors 错误