首页 > 解决方案 > POST REST API 调用不适用于 Chrome 浏览器,但适用于 IE 浏览器

问题描述

我们有一个 Web 应用程序,UI 托管在一台主机上的一台 Apache 服务器上,后端 REST API 服务托管在不同主机上的 tomcat 服务器上。对于 UI:使用 Node.js,它托管在 Apache 对于 API:Java 8,使用 Spring REST,war 文件托管在 tomcat 8.5.32

问题:

在对所有 POST API 调用使用 Chrome 浏览器(版本:71.0.3578.80)时,服务器以错误代码 403(禁止)响应,但对于 IE 浏览器(版本 11.0.105),相同的 POST API 返回状态为 200(成功)的响应. 对于所有 POST 请求,都会观察到上述行为。

以下是 chrome 浏览器的请求和响应标头:

请求标头:

Accept: application/json, text/plain, */*
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Connection: keep-alive
Content-Length: 6559
Content-Type: application/json
Cookie: <cookies>
Host: <myhost>.com
Origin: https://<myhost>.com
Referer: https://<myhost>.com/beta/
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36

响应标头:

Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://<myhost>.com
Connection: Keep-Alive
Content-Length: 0
Content-Type: text/plain
Date: Mon, 11 Feb 2019 11:49:25 GMT
Keep-Alive: timeout=5, max=95
Server: Apache
Strict-Transport-Security: max-age=31536000

API 调用一般细节:

Request URL: https://<myhost>.com/services/v1/settings
Request Method: POST
Status Code: 403 
Remote Address: <ip address>:443
Referrer Policy: no-referrer-when-downgrade

请求有效载荷:

{"userId":"test", "someFlag": "someValue"}

你能帮助理解我在上面的标题中缺少什么吗?

发现:

如果我们从 8.5.32 版本恢复到 tomcat 8.5.29 版本,那么 POST API 请求调用在所有浏览器上都可以正常工作。

我还发现 Tomcat 8.5.32 对 https://tomcat.apache.org/security-8.html#Fixed_in_Apache_Tomcat_8 .​​5.32 进行了修复:低:CORS 过滤器具有不安全的默认值CVE-2018-8014,这可能会导致此问题问题,但我无法弄清楚确切的问题以及我应该做哪些标题更改才能让这个 POST 请求在 Chrome 浏览器上工作。

标签: javarestgoogle-chrometomcattomcat8

解决方案


推荐阅读