大型json响应的HTTPS请求无法下载[Tomcat]

时间:2017-08-25 18:25:05

标签: google-chrome https tomcat7

我在Tomcat 7.0.75上部署了一个Spring Boot Web应用程序,我们最近使用https进行了保护,具有以下server.xml:

<Connector port="8443"
  protocol="HTTP/1.1"
  SSLEnabled="true"
  maxThreads="50"
  server="web"
  allowTrace="false"
  keystoreFile="/app/certs/keystore.jks"
  keystorePass="wouldntYouLikeToKnow"
  scheme="https"
  secure="true"
  clientAuth="false"
  sslProtocol="TLS"
  sslEnabledProtocols="TLSv1.1,TLSv1.2"
  ciphers="TLS_...SHA"
  maxSwallowSize="-1"
  connectionTimeout="20000"
  maxKeepAliveRequests="100"
  socket.soKeepAlive="true"/>`

当我们转到https时,在报告200 OK响应代码后,具有大(多个MB)json响应主体的请求开始在Chrome中产生奇怪的警告消息。 IE也无法完全下载响应。

enter image description here

它只是永远显示警告,永远不会完成下载。小要求工作正常。从客户端的角度来看,请求尚未完成,因为https调用的成功函数和错误函数都不会执行。如图所示,到第一个字节的时间(TTFB)相对较快,但是在下载期间花费了大量时间并且它永远不会离开该阶段。 Tomcat显然保持http连接打开,客户端仍然期待数据,因为当我关闭浏览器时,Tomcat会报告套接字关闭错误。有没有人知道发生了什么以及为什么大型响应下载永远不会通过https完成,但在http上工作正常?

修改1 这是从Linux调用的curl命令和响应。

curl -X GET   https://host.com/context   -H 'accept: application/json, 
text/plain, */*'   -H 'cache-control: no-cache'   -H 'token: 12acdee7-ef76-
4147-98d2-d90e4414d4e6'   -H 'user-name: vn62253'   -H 'user-security-id: 1' 
-k -I

HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: POST, PUT, GET, HEAD, OPTIONS, DELETE
Access-Control-Expose-Headers: Content-disposition, Content-Type
Access-Control-Allow-Headers: Origin, Accept, X-Requested-With, Content-
Type, Access-Control-Request-Method, Access-Control-Request-Headers, User-
Security-Id, Token, User-Name, Client-TZ-Offset
X-Application-Context: Compliance_WS:8765
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Vary: Accept-Encoding
Date: Tue, 29 Aug 2017 14:33:47 GMT
Server: web

1 个答案:

答案 0 :(得分:0)

您可以增加tomcat的默认超时时间。如果您可以使用像ngnix这样的负载均衡器,则可能会遇到此问题,因为它的默认超时间隔为1分钟。