最近在c##客户端通过spring cloud gateway网关调用其他服务的时候发生了个bug。经过抓包发现是由于c##使用的http的库在每个请求头中都带了expect: 100-continue这个请求头。导致请求无法响应。
解决办法:
spring:
cloud:
gateway:
default-filters:
#移除Expect 导致请求无法返回
- RemoveRequestHeader=Expect
expect: 100 continue的作用:
在某些场景下,服务端可能不会接收客户端数据过大的请求,于是客户端会先想服务端发送一个带请求头expect :100 continue的请求,如果服务端愿意接收这个请求的话,就返回100 continue状态码告诉客户端, 客户端就再次发送请求,有点类似于跨域过程的options请求,是一个预检请求, 只有得到客户端的允许之后才能发送真正的请求。上述过程属于一种对请求的优化。
其中在http请求中1xx状态码表示信息提示。
http的其他的提示:
1xx 信息提示
2xx 成功
3xx 重定向
4xx 客户端错误
5xx 服务器错误
但是上述请求在不适用网关进行转发的时候不会产生,网上有人说可能是属于spring cloud gateway的一个bug。
参考文章:https://www.cnblogs.com/nangcr/p/informational-responses-status-code-100-in-http.html