当前位置: 首页 > 知识库问答 >
问题:

在发送POST请求时绕过选项以避免CORS错误是否安全?[副本]

濮阳翔
2023-03-14

我正在向请求URL发送一篇帖子,并在标题中获取它。

Request URL: Request URL: https://www.host.com/path/file.php/api
Request Method: OPTIONS
Status Code: 200 OK
Remote Address: AA.BB.CC.DD:443
Referrer Policy: no-referrer-when-downgrade
Access-Control-Allow-Origin: *
Cache-Control: no-store, no-cache, must-revalidate
Connection: Keep-Alive
Content-Length: 3
Content-Type: text/html; charset=UTF-8
Date: Fri, 29 Nov 2019 09:54:10 GMT
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Keep-Alive: timeout=5, max=100
Pragma: no-cache
Server: Apache/2.4.7 (Ubuntu)
Set-Cookie: PHPSESSID=eik5ssn2jc0514i2mu1943quk1; path=/
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Access-Control-Request-Headers: content-type
Access-Control-Request-Method: POST
Cache-Control: no-cache
Connection: keep-alive
Host: www.host.com
Origin: https://origin.com
Pragma: no-cache
Referer: https://origin.com/form
Sec-Fetch-Mode: cors
Sec-Fetch-Site: cross-site
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36

这就是我面临的CORS错误:

Access to XMLHttpRequest at 'https://www.host.com/path/api' from origin 'https://origin.com' has been blocked by CORS policy: Request header field content-type is not allowed by Access-Control-Allow-Headers in preflight response.
core.js:6014 ERROR HttpErrorResponse {headers: HttpHeaders, status: 0, statusText: "Unknown Error", url: "https://www.host.com/path/api", ok: false, …}

我们使用Angular,他们在后端使用PHP。现在,后端团队(另一个城市,另一个开发团队)说,我们不应该将请求方法作为OPTIONS发送,而是直接作为POST发送。

这里可能出现什么情况?我正在试图找出如何绕过选项。这不是一个后端问题,需要从他们的最终解决吗?

PS:我们成功地发送了GET请求。

共有1个答案

惠泳
2023-03-14

错误消息告诉您,Accept:text/html不允许作为CORS的一部分(按配置)。在这个堆栈溢出回答中,有一个很好的建议标题摘要。

浏览器首先对远程服务器进行选项调用,然后在响应中使用CORS头来确定允许的HTTP请求。这称为飞行前请求。您无法控制此请求的发出。

来自服务器的CORS响应应包括标头:

Access-Control-Allow-Headers: Content-Type, etc...`

重要的是(从HTTP跟踪中不清楚请求和响应之间的区别),web服务器需要使用此标头进行响应—将其放在HTTP请求中不会起任何作用。

调试的一种方法是:-右键单击Chrome开发工具网络选项卡中的特定请求,并复制为cURL-打开邮递员(如果您还没有安装它:))并导入;通过您复制的cURL”作为“原始文本”和邮递员将导入HTTP请求。-然后,您可以在调试时使用标题(并编写测试以确保CORS标题正确)。不要混淆;邮递员不会做CORS预飞行,所以你需要手动组装这样的请求。

 类似资料:
  • 我正在学习春靴和反应现在。 book.js bookresourceimp.java

  • 当我向我的api发出请求时,chrome会阻止我的请求,原因是内核。在我的firebase云函数上,我添加了response.set('access-control-allow-origin','*');(axios get中的xxxxxx只是隐藏请求url) 然后在我的angular应用程序中,我发出一个http post请求,如下所示 url与请求来自的域不同。 当我测试《邮差》里的一切,一切

  • 我不能在GCF中启用CORS,ALLUSES已启用。下面是我在这个post命令之后的代码 我使用fetch和JSON作为主体进行POST调用。我的服务器应该通过执行reCaptcha验证来处理请求。然后根据reCaptcha得分进行响应。 这是我的电话 如有任何帮助,我将不胜感激

  • 我想使用jwt令牌向我的应用程序添加身份验证。 每次向服务器发送请求时,我都会附加服务器创建的令牌。 我受伤了,这是在标头中发送令牌的安全方式吗?如果有人访问我的计算机并在 DevTools 选项卡中检查我的网络并看到我的令牌,他可以使用令牌模拟请求并控制用户数据。 这是常见的情况吗?以及窃取和黑客 JWT 代币的方法?

  • 我正在构建一个简单的API来测试数据库。当我使用get请求时,一切正常,但如果我更改为post,我会收到“不可处理实体”错误: 以下是FastAPI代码: 然后,我使用javascript的请求 也使用Python 我还尝试解析为 json,使用 utf-8 进行解析,并更改标头。没有什么对我有用。