怎么根据条件,将客户端的请求直接丢弃,不做任何回应,只在代码层实现,是用拦截器的 postHandle 么,但是感觉不太对
1
sagaxu 43 天前
你丢弃不做任何回应,网关就当作超时返回 504 了,甚至可能会把你这个服务从集群中移除。如果是 nginx ,可以返回特殊的状态码 444 ,关闭客户端连接。
|
2
vivisidea 43 天前
返回一个 httpstatus 200 (或其它 status ) 内容为空不行吗?
状态码也不能返回?那 client 会认为超时了。。 |
3
NxxRngjnbgj OP @vivisidea 对,就是让客户端感觉到超时了
|
4
cookii 43 天前 via Android
controller 返回一个 mono.never()即可
|
5
Jinnrry 43 天前
你还是说下原始需求吧
什么叫不做任何回应?返回一个状态码也是回应呀。你是想把 tcp 连接一直保持着,但是不回应数据?还是直接关掉 tcp 连接? 这两种操作都得看你上层网关是怎么配置的,就像 1 楼说的很容易让网关觉得你服务挂了,直接给你服务器踢出列表了。 |
6
yty2012g 43 天前
使用了 Servlet 容器比较难直接操作关闭底层的连接。个人认为最简单的方法是写个 filter ,符合条件的直接 return 或者是 respose.getOutputStream().close(),但是这种依然会返回一个 200 ,只不过 content-length=0 。如果要是基于 Netty 的 WebServer ,到是可以直接 close connection ,那就彻底没有其他额外的返回了
|
7
wshcdr 43 天前
BS 天生就是 Request 和 Response ,你不 Response ? 除非你造 HTTP 的反
|
8
vivisidea 42 天前
@NxxRngjnbgj 那不行的,你啥都不响应,自己的线程也得搭进去陪着 sleep 在那,多来几个这样的请求 server 端线程池就满了,需求不合理,哪有这样实现丢弃的
一般都是收到请求,不对请求做任何处理,直接返回个 200 完事,这叫丢弃 |
9
NxxRngjnbgj OP @Jinnrry 就是很多非合规的请求,需要根据规则进行阻拦,目前领导的意思就是不要让客户端看出来是主动拦截的,所以我的第一想法是能不能丢掉
|
10
NxxRngjnbgj OP @yty2012g 那看来没什么好办法,要实现估计难度也很高
|
11
Jinnrry 42 天前 via iPhone
|