Http请求系列---【http的几个请求时间分别代表什么?以及如何设置?】

在HTTP客户端编程中,通常涉及以下几种关键的超时设置:

  1. 连接超时 (connectTimeout)

    • 定义:在与服务器建立连接时等待的最大时间。这包括DNS解析时间、连接建立时间等。
    • 作用 :如果在指定的时间内无法建立连接,抛出异常(如 SocketTimeoutException)。
    • 用途:用于防止客户端无限期地等待无法建立的连接。合理设置可以防止应用程序在服务器不可用或网络问题时挂起。
  2. 读取超时 (readTimeout)

    • 定义:在从服务器读取数据时等待的最大时间。
    • 作用:如果在指定时间内没有从输入流读取到数据,抛出异常。
    • 用途:适用于防止客户端在读取响应数据时因服务器响应延迟或网络中断而无限期等待。
    • 注意:和socketTimeout大多数情况下是同一个意思,都报:SocketTimeoutException异常。
  3. 写入超时

    • 定义:在向服务器发送数据时等待的最大时间。
    • 注意 :虽然Java标准库的 HttpURLConnection 不直接提供写超时设置,但在某些库或网络客户端实现中(如OkHttp、Netty等)存在,一定要注意。
    • 用途:防止客户端在大文件上传或网络不佳的情况下,长时间等待数据发送的完成。

代码示例

以下是使用 Hutool的HttpRequest 设置连接超时和读取超时的示例:

注意:如果渠道端发送了请求,下游没有接收到,请检查一下渠道端发送http的工具是否有writeTimeout参数设置或默认设置,这个影响请求发送,当请求体比较大时,没发完就超时了;或者检查中间件nginx是否设置了proxy_send_timeout 60s;,这个也影响发送时长。

java 复制代码
@GetMapping("channel")
    public String channel(String channel) {
        HashMap<String, Object> hashMap = new HashMap<>();
        hashMap.put("channel", channel);
        HttpRequest.get("http://127.0.0.1:8088/qingqiu/DE001").form(hashMap)
                //和服务器的请求连接时间
                .setConnectionTimeout(1000)
                // 设置readTimeout超时时间为1毫秒,测试超时情况,请求会报错,但是不会影响请求发送,只会影响请求响应的结果,报错信息为Read timed out
                .setReadTimeout(1)
                .execute();
        return "ok";
    }

    @GetMapping("qingqiu/DE001")
    public String sde(String channel) throws InterruptedException {
        Thread.sleep(100);
        System.out.println("引擎接收到请求,channel = " + channel);
        return "响应结果";
    }

其他注意事项

  • 默认设置:一些HTTP客户端可能有默认的超时设置,可以根据应用需求进行调整。
  • 重试机制:在某些网络环境下,结合重试机制可以提高请求的成功率。
  • 库支持:不同的HTTP库(如Apache HttpClient、OkHttp等)可能提供更丰富的超时和重试配置选项,可以根据项目需求选用合适的库。
相关推荐
网络小白不怕黑4 分钟前
华为交换机堆叠与集群技术深度解析附带脚本
网络·华为
安之若素^7 分钟前
启用不安全的HTTP方法
java·开发语言
一个天蝎座 白勺 程序猿24 分钟前
Python(28)Python循环语句指南:从语法糖到CPython字节码的底层探秘
开发语言·python
持梦远方1 小时前
C 语言基础入门:基本数据类型与运算符详解
c语言·开发语言·c++
zzywxc7871 小时前
AI 正在深度重构软件开发的底层逻辑和全生命周期,从技术演进、流程重构和未来趋势三个维度进行系统性分析
java·大数据·开发语言·人工智能·spring
en-route1 小时前
HTTP 缓存
网络协议·http·缓存
靡樊1 小时前
NAT、代理服务、内网穿透
网络·内网穿透·nat·代理服务·内网打洞
灵性花火1 小时前
Qt的前端和后端过于耦合(0/7)
开发语言·前端·qt
DES 仿真实践家2 小时前
【Day 11-N22】Python类(3)——Python的继承性、多继承、方法重写
开发语言·笔记·python
Code Warrior3 小时前
【每日算法】专题五_位运算
开发语言·c++