我在测试向 API 发送 POST 请求时发现报错“发送网络请求出错:已取消一个任务”,奇怪的是我用 Apifox 调试时完全正常
抓包发现 Quicker 在发送 POST 请求时会默认在请求头携带Expect:100-continue参数,服务器无法正常处理时就会发生报错,即便是指定了请求头依旧如此;GET 请求则不会有这个参数
希望作者大大可以修复这个bug,谢谢!
Quicker版本:1.43.29
系统:Windows11 23H2
查了一下,这个是.net底层自动带上的一个头,似乎是一个标准的请求头,参考 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status/100
修改这个设置似乎会有全局的影响,我还不是很确定是否应该关掉它。
感觉在服务端处理似乎更合理一些。 服务端是什么程序?
--
相关资料:
- https://stackoverflow.com/questions/15341287/expect-100-continue
- https://learn.microsoft.com/en-us/dotnet/api/system.net.servicepointmanager.expect100continue?view=net-8.0
`ServicePointManager.Expect100Continue` 是 .NET 中用于控制 HTTP 请求行为的一个设置。具体来说,它与 HTTP 1.1 协议中的 "100 Continue" 状态码有关。 ### `Expect100Continue` 的作用: 在 HTTP 1.1 协议中,当客户端发送带有大数据量(如文件上传)的请求时,它可以首先发送一个带有 `Expect: 100-continue` 头部的小请求,询问服务器是否愿意处理这个请求。如果服务器返回 `100 Continue`,客户端才会继续发送完整的数据。如果服务器返回其他状态码(如 4xx 或 5xx 错误),则客户端不会发送数据,从而节省了带宽。 `ServicePointManager.Expect100Continue` 的默认值为 `true`,表示在发送带有数据的 POST 请求时,客户端会使用这种 "探测" 机制。 ### 是否应该将其设置为 `false`? 是否设置为 `false` 取决于具体的应用场景: 1. **如果你在发送大量小型请求**(如 JSON 请求或小型表单数据): - **可以考虑设置为 `false`**,这样可以减少一次额外的请求,提高性能。 2. **如果你发送的是大型文件或数据**: - **保持为 `true` 可能更好**,因为如果服务器拒绝处理请求(例如由于认证失败),客户端不会浪费带宽传输整个请求体。 3. **服务器兼容性**: - 如果服务器不支持 `100 Continue` 或者处理有问题,设置为 `false` 可以避免潜在的兼容性问题。 ### 总结: - 小型请求(POST 请求体较小):可以将 `ServicePointManager.Expect100Continue` 设置为 `false`。 - 大型请求:建议保持 `true`。
另外,在Quicker里是用的什么方式发送的请求?
没想到大佬在假期也回复得这么快,国庆快乐!
服务端是公司的内部系统,我没有办法控制;根据我自己的测试,请求头携带 Expect:100-continue 参数时会长时间无反应导致连接超时,去掉时则可以正常拿到 response
我的建议是在 Quicker 中提供是否携带这个请求头的开关,或者当用户自定义请求头时覆盖默认的参数
我在 Quicker 中发送 POST 请求的配置如图所示:
好的