使用 Laravel 作为后端时,Angular 包 simple-pdf-viewer 'Access-Control-Allow-Origin' CORS 问题

Posted

技术标签:

【中文标题】使用 Laravel 作为后端时,Angular 包 simple-pdf-viewer \'Access-Control-Allow-Origin\' CORS 问题【英文标题】:Angular Package simple-pdf-viewer 'Access-Control-Allow-Origin' CORS Issue While Using Laravel As Backend使用 Laravel 作为后端时,Angular 包 simple-pdf-viewer 'Access-Control-Allow-Origin' CORS 问题 【发布时间】:2018-12-19 09:53:26 【问题描述】:

我正在开发需要在网页上显示 PDF 的 Angular 应用程序。为了实现这一点,我正在使用包 simple-pdf-viewer。 当我给出我的本地 PDF 文件的路径时,这个包工作正常,比如local-path ,但是当我给出我的实时服务器的路径时,比如live-path 然后它给了我错误

localhost/:1 无法加载 https://booksapi.alphawods.com/storage/app/pdf-test.pdf:请求的资源上不存在“Access-Control-Allow-Origin”标头。 Origin 'http://localhost:4200' 因此不允许访问。

我使用 Laravel 作为后端,而 Angular 在前端。通常这是我已经配置的 Laravel 的常见 CORS 问题,并且我对服务器的所有请求都工作正常。

这是在我的服务器上使用的有效 CORS 文件屏幕截图。 cors

这是调用 pdf 资源的 simple-pdf-viewer 代码

public openUrl(url: string, startAt: SimplePDFBookmark = SimplePDFBookmark.EMPTY_BOOKMARK) debugger
  this.http.get(url,  responseType: 'arraybuffer',withCredentials: false )
  .subscribe((file: ArrayBuffer) => 
    this.openDocument(new Uint8Array(file), startAt);
  , error => 
    this.onError.emit(error);
    this.loaded = false;
  );

我已经在 GitHub 上阅读了与此相关的问题,但找不到解决方案。这是该问题的链接related-issue

【问题讨论】:

【参考方案1】:

您需要配置的另一件事是您的 Web 服务器 (nginx/apache) 以允许 CORS。在Laravel 中间件上添加CORS 配置仅在请求命中您的Laravel 应用程序时才有效。由于您直接访问文件,因此永远不会添加额外的标题,因为它没有命中任何 Laravel 路由,对吧?所以请求只会由网络服务器处理。

我希望这能给你一些提示。

【讨论】:

以上是关于使用 Laravel 作为后端时,Angular 包 simple-pdf-viewer 'Access-Control-Allow-Origin' CORS 问题的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Laravel 作为 Angular SPA 应用程序的后端?

从 Heroku Angular 前端调用 Heroku springboot 后端时,Rest 调用返回 403

Odoo作为后端时如何返回数据给网页移动端

如何将 Laravel 5.4 与 Angular 4 集成

将 MS Access 用作 Winform 或 WPF 的后端时如何避免损坏 MS Access

从角度 2 调用 laravel 后端 api