gpt4 book ai didi

java - 为什么我的 HTTP GET 请求开始超时?

转载 作者:可可西里 更新时间:2023-11-01 16:37:55 24 4
gpt4 key购买 nike

我在客户端使用 org.springframework.web.client.RestTemplate 执行针对 Cent OS 主机上运行的 restful web 服务的 rest 调用。

我看到一个奇怪的行为,当进行一系列这些调用时,我收到连接超时错误消息

"java.net.SocketTimeoutException: connect timed out"

这里值得注意的是,在至少进行一次异步 http 调用后,http 调用总是失败。失败时,将多次尝试 http 调用,等待时间固定为 5 秒。

以下是在 http 调用中传递的 header -

[Accept: application/json
, Content-Type: application/json;charset=UTF-8
, Accept-Language: en_US
, API-Version: 100
, X-Request-ID: a99ccd66-5172-4056-a319-4e2e2614aff6
, X-User-Waiting: false
, Connection: Close
, Content-Length: 2015
]

http 调用看起来甚至没有到达服务器。我在这里错过了什么?我需要设置不同的 header 吗?

最佳答案

一个可能的解释是服务器通过限制它在一段时间内从您的 IP 地址接受的连接数来限制 API 的流量。线索是您说前 n 个请求会在第 n + 1 个请求神秘失败之前成功。

如果这种速率限制是在防火墙级别完成的,HTTP 请求将在到达 Web 服务器之前被丢弃,因此您不会在其日志中看到它。

听起来您对服务器有一定的控制权。如果这样做,请尝试运行(以 root 用户身份):

iptables -vL INPUT

如果您在“目的地”列中看到类似以下内容的条目

tcp dpt:http state NEW limit: avg 10/min burst 5 

或者像这样的一对条目

tcp dpt:http state NEW recent: UPDATE seconds: 60 hit_count: 10 name: DEFAULT side: source 
tcp dpt:http state NEW recent: SET name: DEFAULT side: source

那么这很可能是正在发生的情况,您将需要接受此限制或修改服务器的防火墙规则。

如果您不能控制服务器,请查看您正在使用的 API 的文档,看看它是否对客户端强制执行速率限制。可能是服务器在其响应 (as Twitter does) 中返回 header ,以帮助客户端预测他们何时将达到限制。

关于java - 为什么我的 HTTP GET 请求开始超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24705882/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com