http之100-continue

部署运行你感兴趣的模型镜像
  1. 100-continue 是用于客户端在发送 post 数据给服务器时,征询服务器情况,看服务器是否处理 post 的数据,如果不处理,客户端则不上传 post 是数据,反之则上传。在实际应用中,通过 post 上传大数据时,才会使用到 100-continue 协议。
  2. 客户端策略
    1. 如果客户端有 post 数据要上传,可以考虑使用 100-continue 协议。在请求头中加入 {“Expect”:”100-continue”}
    2. 如果没有 post 数据,不能使用 100-continue 协议,因为这会让服务端造成误解。
    3. 并不是所有的 Server 都会正确实现 100-continue 协议,如果 Client 发送 Expect:100-continue 消息后,在 timeout 时间内无响应,Client 需要立马上传 post 数据。
    4. 有些 Server 会错误实现 100-continue 协议,在不需要此协议时返回 100,此时客户端应该忽略。
  3. 服务端策略
    1. 正确情况下,收到请求后,返回 100 或错误码。
    2. 如果在发送 100-continue 前收到了 post 数据(客户端提前发送 post 数据),则不发送 100 响应码(略去)。

参考RFC文档:http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html#sec8.2.3

转载自 http://www.cnblogs.com/tekkaman/archive/2013/04/03/2997781.html

您可能感兴趣的与本文相关的镜像

ComfyUI

ComfyUI

AI应用
ComfyUI

ComfyUI是一款易于上手的工作流设计工具,具有以下特点:基于工作流节点设计,可视化工作流搭建,快速切换工作流,对显存占用小,速度快,支持多种插件,如ADetailer、Controlnet和AnimateDIFF等

### 关于HttpClient中100-Continue状态的行为与配置 在HTTP协议中,`100 Continue`是一种响应码,用于告知客户端服务器已准备好接收请求主体。这种机制允许客户端先发送请求头,等待服务器确认后再传输较大的数据体[^2]。 #### 默认行为 Apache HttpClient默认支持`100-Continue`机制。当发起带有较大实体的POST或PUT请求时,如果目标服务器启用了此功能,则HttpClient会自动处理该过程。具体来说,在发送请求头部之后,它会在接收到服务器返回的`100 Continue`之前暂停发送实际的数据流[^3]。 #### 配置方式 可以通过设置期望的行为来调整这一特性: 1. **禁用Expect: 100-continue** 如果不希望启用这个特性或者遇到某些中间件(如代理)无法正确处理的情况,可以显式关闭它。通过移除`Expect`请求头实现这一点: ```java HttpPost post = new HttpPost(url); post.setConfig(RequestConfig.custom() .setExpectContinueEnabled(false) .build()); ``` 2. **自定义超时时间** 设置合理的socket timeout可以帮助应对可能发生的长时间延迟问题。例如,如果服务器较慢才回应`100 Continue`信号,适当增加timeout能避免连接中断。 ```java RequestConfig requestConfig = RequestConfig.custom() .setSocketTimeout(5000) // milliseconds .setConnectTimeout(5000) .build(); CloseableHttpClient httpClient = HttpClients.custom() .setDefaultRequestConfig(requestConfig) .build(); ``` 以上方法提供了灵活控制如何对待`100-Continue`的机会,既可保持原有优势又能在必要场合下做出改变以适应不同网络环境需求[^4]。 ```java // 示例代码展示如何创建并执行带大文件上传的请求 CloseableHttpClient client = HttpClients.createDefault(); HttpPost uploadFile = new HttpPost("http://example.com/upload"); uploadFile.setEntity(new FileEntity(new File("/path/to/largefile"), ContentType.APPLICATION_OCTET_STREAM)); // 可选:修改request config参数 RequestConfig rc = RequestConfig.copy(RequestConfig.DEFAULT) .setExpectContinueEnabled(true).build(); uploadFile.setConfig(rc); try (CloseableHttpResponse response = client.execute(uploadFile)) { System.out.println(response.getStatusLine().getStatusCode()); } catch (IOException e) { e.printStackTrace(); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值