内容提要
Java 26将于3月17日发布,新增对HTTP/3的支持,默认仍为HTTP/2。HttpClient提供多种连接策略,新增文件上传方法允许上传文件特定区域,超时设置也进行了更新。此外,HttpClient将不再为无体的非POST/PUT请求发送Content-Length头。这是对HttpClient用户的重要更新。
关键要点
-
Java 26将于3月17日发布,新增对HTTP/3的支持,默认仍为HTTP/2。
-
HttpClient提供多种连接策略,允许开发者在HTTP/1.1、HTTP/2和HTTP/3之间进行选择。
-
新增的文件上传方法允许上传文件特定区域,避免将整个文件读入内存。
-
超时设置更新,现已覆盖响应体的消费时间。
-
HttpClient将不再为无体的非POST/PUT请求发送Content-Length头,符合RFC9110语义。
延伸解读
HTTP/3的引入与挑战
Java 26引入了对HTTP/3的支持,但默认仍为HTTP/2。这是因为HTTP/3使用QUIC协议,尚未广泛部署。开发者在使用HTTP/3时需注意可能的兼容性问题,尤其是在与不支持HTTP/3的服务交互时。
文件上传的新方法
新增的文件上传方法允许开发者上传文件的特定区域,这对于处理大文件时尤为重要。通过避免将整个文件读入内存,可以提高性能并降低内存消耗,适合需要并行上传的场景。
超时设置的变化
HttpClient的超时设置已更新,现包括响应体的消费时间。这意味着开发者需要重新评估超时值,特别是在处理大响应体时,以避免连接被意外取消。
Content-Length头的移除
对于无体的非POST/PUT请求,HttpClient将不再发送Content-Length头。这一变化符合RFC9110的语义,开发者需确保应用程序能够适应这一新行为,必要时可手动添加Content-Length头。
延伸问答
Java 26中对HttpClient的主要更新是什么?
Java 26新增对HTTP/3的支持,默认仍为HTTP/2,并更新了文件上传方法和超时设置。
如何在HttpClient中使用HTTP/3?
可以在HttpClient构建时设置版本为HTTP/3,或在HttpRequest构建时指定版本。
Java 26中新增的文件上传方法有什么优势?
新增的方法允许上传文件特定区域,避免将整个文件读入内存,适合处理大文件。
HttpClient的超时设置有什么变化?
超时设置现在覆盖响应体的消费时间,之前仅适用于响应头的接收。
Java 26中HttpClient不再发送Content-Length头的原因是什么?
这是为了符合RFC9110的语义,非POST/PUT请求且无体的情况下不再发送Content-Length头。
如何处理HTTP/3连接的兼容性问题?
可以采取多种策略,如优先发送HTTP/3请求,或并行发送HTTP/3和HTTP/2请求。