从源“http://localhost:4200”访问“http://localhost:9090/api/auth/produits/files”的 XMLHttpRequest 已被 CORS 策

Posted

技术标签:

【中文标题】从源“http://localhost:4200”访问“http://localhost:9090/api/auth/produits/files”的 XMLHttpRequest 已被 CORS 策略阻止【英文标题】:Access to XMLHttpRequest at 'http://localhost:9090/api/auth/produits/files' from origin 'http://localhost:4200' has been blocked by CORS policy 【发布时间】:2019-09-19 12:57:05 【问题描述】:

我想将文件(图像)保存到我的服务弹簧,但我有这个问题

import Component, ElementRef, OnInit, ViewChild from '@angular/core';
import FileUploader from 'ng2-file-upload'; @Component(
 selector: 'app-root',
 templateUrl
 ./app.component.html','
 styleUrls: ['./app.component.scss']  
 )
 export class 
 here AppComponent implements OnInit 
 @ViewChild('fileInput') fileInput: ElementRef; 
 uploader: FileUploader;
 isDropOver: boolean; ngOnInit(): void 
 const headers = 
 [name: 'Accept', value: 'application/json'];
 this.uploader = new FileUploader(url: 
 'http://localhost:9090/api/auth/produits/files', autoUpload: true, 
  headers: headers);
  this.uploader.onCompleteAll = () => alert('File uploaded');
  
  fileOverAnother(e: any): 
  void 
  this.isDropOver = e;
  
  fileClicked() 
  this.fileInput.nativeElement.click();
  
    


@CrossOrigin(origins = "http://localhost:4200")
@RestController
@RequestMapping("/api/auth")
@PostMapping(value = "/produits/files")
@ResponseStatus(HttpStatus.OK)
public void handleFileUpload(@RequestParam("file") MultipartFile file) 
throws IOException 
    fileService.storeFile(file);

访问 XMLHttpRequest 在 'http://localhost:9090/api/auth/produits/files' 来自原点 'http://localhost:4200' 已被 CORS 策略阻止:响应 预检请求未通过访问控制检查: 响应中的“Access-Control-Allow-Origin”标头不能是 当请求的凭据模式为“包含”时,通配符“*”。这 XMLHttpRequest 发起的请求的凭证模式是 由 withCredentials 属性控制。 我不知道这段代码有什么问题。请帮帮我?

【问题讨论】:

允许的标题怎么样? 【参考方案1】:

似乎未定义允许的标头选项:

@CrossOrigin(origins = "http://localhost:4200", allowedHeaders="Accept")
@RestController
@RequestMapping("/api/auth")
@PostMapping(value = "/produits/files")
@ResponseStatus(HttpStatus.OK)
public void handleFileUpload(@RequestParam("file") MultipartFile file) 
throws IOException 
    fileService.storeFile(file);

指定crossorigin的时候,可以通过指定如下注解来自定义:origins,methods, allowedHeaders,exposedHeaders,allowCredentials或者maxAge

【讨论】:

谢谢你,但即使这样我也有同样的问题 我还添加了allowCredentials,非常感谢您 @S'iwarHadjAli,很高兴它有帮助。【参考方案2】:

修复 CORS 错误

有两种方法可以做到这一点:-

    如果您拥有后端服务器,最好配置 后端服务器返回适当的 CORS HTTP 标头配置

    Angular CLI 代理,这是本文的重点。

Angular CLI 代理

在这里,我假设您有一个 Angular 项目,其中包含一些发出 HTTP 请求的服务。 在 src 文件夹的根目录下创建名为 proxy.conf.json 的代理配置文件

                "/api": 
                    "target": "http://localhost:3000",
                    "secure": false
                
            
    使用架构师下的 proxyConfig 键配置 angular.json>serve>指向 src/proxy.conf.json 的选项,如下所示
           "architect": 
                "serve": 
                  "builder": "@angular-devkit/build-angular:dev-server",
                  "options": 
                    "browserTarget": "your-application-name:build",
                    "proxyConfig": "src/proxy.conf.json"
                  ,

现在,只需运行 ng serve 即可。

【讨论】:

以上是关于从源“http://localhost:4200”访问“http://localhost:9090/api/auth/produits/files”的 XMLHttpRequest 已被 CORS 策的主要内容,如果未能解决你的问题,请参考以下文章

从源“http://localhost:4200”访问“localhost:8088/user/”的 XMLHttpRequest 已被 CORS 策略阻止 [重复]

带有 Angular 的 Spring Boot。从源“http://localhost:4200”访问“http://localhost:8080/”的 XMLHttpRequest 已被 CORS

从源“http://localhost:4200”访问“http://localhost:9090/api/auth/produits/files”的 XMLHttpRequest 已被 CORS 策

从源“http://localhost:4200”访问“”处的 XMLHttpRequest 已被 CORS 阻止。我无权访问服务器

从源“http://localhost:4200”访问“https://exam.com/api/Uni/GetAll”的 XMLHttpRequest 已被 CORS 策略阻止

来源 'http://localhost:4200' 已被 CORS 策略阻止