curl 是一个功能强大的命令行工具,用于传输数据,支持多种协议,包括 HTTP、HTTPS、FTP、FTPS、SCP 等,通过 curl,用户可以轻松与服务器进行交互,比如下载文件、提交表单、测试 API 接口等。-i
选项是 curl 中一个非常实用的参数,它能够显示 HTTP 协议的响应头信息,这对于调试网络请求、分析服务器响应以及理解 HTTP 通信过程具有重要意义,本文将详细介绍 curl 命令中 -i
选项的使用方法、实际应用场景以及相关注意事项。

curl -i
选项的基本用法
-i
或 --include
选项的作用是在 curl 命令的输出中同时显示 HTTP 响应头和响应体,默认情况下,curl 只显示响应体的内容,而 -i
选项会先输出服务器返回的 HTTP 头部信息,然后是一个空行,最后是响应体,这种格式使得用户能够清晰地看到服务器返回的状态码、响应头字段(如 Content-Type、Server、Set-Cookie 等)以及实际的响应数据。
基本语法如下:
curl -i [URL]
访问一个网站并查看完整的响应信息:
curl -i https://www.example.com
执行该命令后,终端会首先显示类似以下的响应头:

HTTP/2 200
server: nginx
date: Wed, 01 Nov 2023 10:00:00 GMT
content-type: text/html; charset=UTF-8
content-length: 1256
last-modified: Tue, 31 Oct 2023 15:30:00 GMT
etag: "635a1f40-4e8"
accept-ranges: bytes
age: 3600
然后是一个空行,接着是 HTML 响应体内容,通过这种方式,用户可以快速判断请求是否成功(如状态码 200 表示成功),以及服务器返回的元数据信息。
-i
选项的实际应用场景
调试 API 接口
在开发和测试 API 时,经常需要查看服务器返回的响应头信息,检查 API 是否正确设置了 Content-Type
字段,或者是否返回了 Set-Cookie
用于会话管理,使用 -i
选项可以一次性获取所有信息,避免多次请求。
curl -i -X POST https://api.example.com/login -d "username=user&password=pass"
这里,-X POST
指定请求方法为 POST,-d
用于提交表单数据,通过 -i
,可以看到服务器返回的状态码(如 200 表示登录成功,401 表示未授权)以及可能的 Set-Cookie
头。
分析重定向行为
HTTP 重定向(如 301、302 状态码)通常会在响应头中包含 Location
字段,指示客户端跳转的 URL,使用 -i
可以查看重定向的完整过程:

curl -i http://example.org
如果服务器返回 301 状态码,响应头中会包含 Location: https://example.com
,帮助用户理解重定向目标。
检查缓存和内容更新
通过查看响应头中的 Last-Modified
、ETag
或 Cache-Control
字段,可以了解资源的缓存状态。
curl -i https://example.com/image.jpg
Last-Modified
字段的值较新,说明资源可能已更新;Cache-Control: max-age=3600
表示资源可以缓存 1 小时。
验证 HTTPS 和证书信息
访问 HTTPS 网站时,-i
选项可以显示服务器的 TLS/SSL 证书相关信息(如 Server
字段可能包含证书颁发机构信息),结合 -v
(verbose)选项可以更详细地查看证书链和握手过程:
curl -i -v https://example.com
-i
选项与其他选项的组合使用
-i
选项可以与 curl 的其他选项结合使用,以实现更复杂的请求功能,以下是常见组合:
组合选项 | 功能描述 |
---|---|
-i -X POST |
发送 POST 请求并显示响应头和响应体,常用于提交表单或 JSON 数据。 |
-i -H "Header: Value" |
自定义请求头(如 Authorization: Bearer token ),并显示服务器响应。 |
-i -d "data" |
使用 POST 方法提交数据,常与 -X POST 结合使用。 |
-i -L |
跟随重定向(默认 curl 不跟随重定向),显示所有中间跳转的响应头。 |
-i -o file |
将响应头和响应体保存到文件,-o 指定输出文件路径。 |
模拟浏览器登录并保存响应:
curl -i -c cookies.txt -b cookies.txt -d "username=user&password=pass" https://example.com/login
这里,-c
保存服务器返回的 cookies 到文件,-b
发送 cookies 到服务器,-i
显示完整的登录响应。
注意事项
- 响应头和响应体的顺序:
-i
选项确保响应头在响应体之前输出,但某些情况下(如 HTTP/1.1 分块传输编码),响应体可能分块传输,需注意解析。 - 性能影响:显示响应头会增加输出量,但对请求性能无影响,对于大文件下载,可使用
-s
(silent)选项隐藏进度条和响应头,仅保留响应体。 - 协议差异:非 HTTP 协议(如 FTP)可能不使用
-i
选项,因为 FTP 无响应头概念。
相关问答 FAQs
问题 1:curl 的 -i
和 -I
选项有什么区别?
解答:-i
(--include
)会显示完整的 HTTP 响应头和响应体,而 -I
(--head
)仅显示响应头,不显示响应体。-I
通常用于快速检查资源是否存在或获取元数据,而不下载实际内容。
curl -I https://example.com # 仅显示响应头 curl -i https://example.com # 显示响应头和响应体
问题 2:如何使用 curl 获取响应头并忽略响应体?
解答:除了使用 -I
选项外,还可以通过 -s
(silent)和 -D
(dump-header)组合实现。-s
隐藏进度和错误信息,-D
将响应头保存到文件。
curl -s -D headers.txt -o /dev/null https://example.com
此命令会将响应头保存到 headers.txt
,并将响应体丢弃(-o /dev/null
),同时不显示任何进度信息。