springmvc/spring-boot写的api接口,接收http请求的超时是如何设置的?

我用springmvc和springboot做的项目
用nginx路由对外开放
之前没关注过http超时时间
现在想知道
springmvc/spring-boot写的api接口,接收http请求的超时是如何设置的?
是nginx,tomcat还是spring框架有默认设置?
还是自己设置?

或者说超时是客户端自己设置,和服务端无关?

阅读 24.3k
3 个回答

每一层都有超时

  1. 客户端有tcp连接超时
  2. Linux有tcp连接超时
  3. nginx有http的等待请求、空闲连接超时;有反代的建连、发送请求、等待响应等超时
  4. tomcat应该也有执行超时等等

你可控的是2-4,建议根据业务情况来设定

  1. 如果某些请求的执行非常耗时间,则应该在相关层面加大超时时间
  2. 如果正常请求响应很快(数秒内),可以在web路由/负载均衡层相应地缩短超时时间,可以快速切换后端节点,提高可用性

目前主流B/S体系中,基本采用Http1.1方案,Http1.1默认是采用持久连接的。持久连接意味着,对于服务器而言,只要客户端不关闭,这个Http连接就会一直保持着(当然,服务器为了防止恶意攻击,也会采取定时检测失落的机制主动关闭连接),而对于客户端而言,一般会连接超时配置,对于connectionTimeout,socketTimeout,对于HttpClient还会有个connectionRequestTimeout. 你说的超时,一般指的应该是客户端设置的超时,connectionTimeout是与服务器在设定时间内没有成功进行tcp的三次握手,而没有连接上。而socketTimeout是等待服务器回传数据的时候,指定时间没有收到。

参考:

https://docs.spring.io/spring...

WEB PROPERTIES相关参数设置。

是需要通过设置

server.connection-timeout= # Time that connectors wait for another HTTP request before closing the connection. When not set, the connector's container-specific default is used. Use a value of -1 to indicate no (that is, an infinite) timeout.

来控制请求的发送的超时时间,还有一些其他参数你都可以参考下,是否需要调整。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏