Chrome 90 在 CORS 预检中向 Angular localhost 应用添加 https
Posted
技术标签:
【中文标题】Chrome 90 在 CORS 预检中向 Angular localhost 应用添加 https【英文标题】:Chrome 90 adds https to Angular localhost app on CORS preflight 【发布时间】:2021-07-19 20:18:49 【问题描述】:我在 Google Chrome 90 中检测到异常行为。
我有一个 Angular 应用程序(开发端口 4200)以纯 http 形式提供服务,因为它只是一个本地环境。后端是一个 .NET Core 5 应用,在 Kestrel 的 5001 端口上运行 https。
今天我所有的OPTIONS
预检请求开始失败。
我发现 Chrome 使用 https://localhost:4200
而不是 http
发出预检请求,但由于 .NET 后端不允许 https 中的本地主机而失败。
当我找到 Preflight 请求时,我复制了它的 Powershell 等效项
Invoke-WebRequest -Uri "https://localhost:5001/api/v1/secure/xxxx" `
-Method "OPTIONS" `
-Headers @
"Accept"="*/*"
"Access-Control-Request-Method"="GET"
"Access-Control-Request-Headers"="authorization"
"Origin"="https://localhost:4200"
"User-Agent"="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/90.0.4430.85 Safari/537.36"
"Sec-Fetch-Mode"="cors"
"Sec-Fetch-Site"="same-site"
"Sec-Fetch-Dest"="empty"
"Referer"="https://localhost:4200/"
"Accept-Encoding"="gzip, deflate, br"
回复为空白204 No Content
。如果我修改此脚本以使用 https://
作为来源,则响应包含所需的 CORS 标头。
应用程序在 http 中提供。我的浏览器栏上出现了Insecure
警告,但没关系。
除了解决这个问题,我该如何解决这个问题?会不会是 Chromium 中的错误?
【问题讨论】:
【参考方案1】:小菜一碟
在后端添加https://localhost:4200
作为CORS origin,但这可能意味着根据YMMV重新编译/重新加载/重新部署
【讨论】:
【参考方案2】:此答案适用于任何拥有 Cordova 应用程序的人。
我已经修改了使用cordova advanced-http 插件的请求:
https://github.com/silkimen/cordova-plugin-advanced-http
这提供了更多的控制并避免了对 CORS 的担忧。
【讨论】:
以上是关于Chrome 90 在 CORS 预检中向 Angular localhost 应用添加 https的主要内容,如果未能解决你的问题,请参考以下文章
为啥经过身份验证的 CORS 请求的预检 OPTIONS 请求在 Chrome 中有效,但在 Firefox 中无效?
CORS 预检在 Firefox 中失败,但在 Chrome for Apache CXF 中有效
CORS 预检请求返回“403 Forbidden”;随后的请求,然后仅在 Chrome 中发送
Angular 4 call couchdb有CORS错误,但提琴手中没有出现预检
为啥在 Firefox 中向 google Drive Sheet 发出的这个 CORS 请求会失败? (在 Chrome 中工作)