laravel 11 中可通过 http::withoptions(['version' => '2.0']) 显式启用 http/2,依赖底层 curl ≥7.68 且启用 nghttp2、https 协议及 tls 支持;未设置时默认 alpn 协商,优先 http/2 后降级 http/1.1。

在 Laravel 11 中,HTTP 客户端底层基于 Guzzle,而 Guzzle 的 `withOptions()` 方法支持直接指定 HTTP 协议版本。要为 cURL 请求(即 Laravel HTTP Client 发起的请求)设置 HTTP/2 或 HTTP/1.1,关键不是调用原生 cURL 函数,而是通过 `withOptions` 传入 `'version'` 配置项。
明确指定 HTTP/2 版本
只需在 `Http::` 链式调用中加入 `withOptions(['version' => '2.0'])`:
- 该配置会告知 Guzzle 使用 HTTP/2 协议发起请求(前提是服务端支持且底层 cURL 已启用 HTTP/2)
- 无需额外安装或编译 cURL —— Laravel 11 默认要求 PHP 8.2+ 和扩展齐全,而现代系统(如 macOS Homebrew、Ubuntu 22.04+、Windows WSL2 中的 curl 7.68+)通常已内置 HTTP/2 支持
- 验证是否生效:可配合日志中间件或抓包工具(如 Wireshark 或 `curl -v --http2 https://example.com`)比对响应头中的 `HTTP/2 200`
回退到 HTTP/1.1 的写法
显式设为 `'1.1'` 可避免某些 CDN 或老旧代理的兼容问题:
利用农业相机拍摄植物叶片高分辨率图像,通过AI视觉技术检测叶片卷曲方向(向上卷曲或向下卷曲)
Http::withOptions(['version' => '1.1'])->get('https://api.example.com')- 注意:Guzzle 不支持 `'1.0'`,传入无效值将触发异常或静默降级
- 若未设置 `version`,Guzzle 默认行为是协商(ALPN),优先尝试 HTTP/2,失败则自动回落至 HTTP/1.1
确保底层支持 HTTP/2 的前提条件
Laravel 层设置有效,依赖运行环境真实支持:
- cURL 版本 ≥ 7.33.0(推荐 ≥ 7.68.0),且编译时启用了 nghttp2(Linux/macOS 可用
curl --version查看 Features 是否含 http2) - PHP 的 cURL 扩展需加载成功(
php -m | grep curl确认) - 目标 URL 必须使用 HTTPS(HTTP/2 在绝大多数客户端中强制要求 TLS);纯 HTTP 域名即使设 `'version' => '2.0'` 也会被忽略或报错
不需要改 php.ini 或重编译,也不用碰 `CURLOPT_HTTP_VERSION` —— Laravel HTTP Client 已封装好语义清晰的接口,直接传 version 字符串即可生效。










