如何避免在单页应用程序中进行CORS预检请求?

问题描述 投票:0回答:1

我想构建一个单页应用程序(SPA),并且在分离后端API(REST)和前端资产(静态vue.js代码)

期间注意到以下问题。

当从API后端以外的其他域提供index.html时,大多数POST / PUT请求都会触发CORS预检请求。

我进行了一些研究,发现博客文章[1] [2]讨论了此问题,但没有给出实际的解决方案。某些标头(例如Authorization标头和带有application / json值的Content-Type标头)不允许作为cors-safelisted-request标头。因此,POST / PUT请求会触发CORS预检请求。这是不可接受的,因为它会增加大量的延迟。

问题

如果两个域都属于同一实体,是否可以避免这些预检请求?

研究

我做了一些关于如何避免前端和后端之间的CORS请求的研究。解决方案要求将index.html文件从与REST API后端相同的域中提供(请参见下面的示例)。我想知道是否不使用单独的域是避免CORS请求SPA的唯一解决方案。

场景(示例)

我想构建一个单页应用程序(SPA),并且在分离后端API(REST)和前端资产(静态vue.js代码)时注意到以下问题:从...提供index.html时...

] >

那里没有很多选择。

最简单的解决方案是从与您的API相同的域中提供html和资产。

第二个选项是仅使用cors-safelisted-request-header的标头。

我注意到:

Content-Type标头可以替换为Accept标头。此标头可以。

如果正在执行XHR请求,则可以通过将XHR请求的Authentication字段设置为true来省略withCredentials标头,而是自动添加身份验证信息。 VanillaJS示例:

var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://www.example.org/api/whatever', true);
xhr.withCredentials = true;
xhr.send();

如果使用其他XHR客户端,请参阅文档以了解是否可以设置该选项。

另一种选择是通过cookie和服务器端会话进行身份验证。当您使用AWS时,可以选择使用AWS Cognito。

如果正在使用的标头不是安全列出的CORS标头,则必须删除它们。

node.js amazon-web-services architecture cors single-page-application
1个回答
1
投票

那里没有很多选择。

© www.soinside.com 2019 - 2024. All rights reserved.