HEAD ` 只返回响应头(Headers),不返回正文内容(Body)
✅ 首先回顾:HEAD 方法的定义
在 HTTP 协议中,HEAD
方法的作用是:
向服务器请求与
GET
相同的响应,但不返回响应体(Body)。
📌 所以——
HEAD
只返回响应头(Headers),不返回正文内容(Body)
例如:
HEAD /index.html HTTP/1.1
Host: www.example.com
服务器可能会返回:
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 10240
Last-Modified: Wed, 12 Jun 2024 10:00:00 GMT(注意:没有正文 Body)
🔍 为什么不需要返回 Body?
原因主要有以下几点:
1. 💡 减少带宽消耗
HEAD
用于获取资源元信息(如大小、类型、最后修改时间等),而不是资源本身。- 节省带宽和时间,尤其在文件较大时不必下载全部内容。
2. 🔍 用于检测资源状态
典型用途:
用途 | 描述 |
---|---|
是否存在资源 | 检查返回的状态码:200 存在、404 不存在 |
是否需要更新缓存资源 | 配合 Last-Modified 或 ETag |
获取文件大小 | 查看 Content-Length |
检测资源是否可访问 | 返回 403/401 等状态码 |
3. ✅ 与 GET
保持一致的响应头
虽然不返回内容,但返回的响应头信息应该与 GET
方法完全一致,所以你能知道如果真的用 GET
,会得到什么类型的响应。
🔧 应用场景举例
✅ 示例 1:预检测文件大小
curl -I https://example.com/big-video.mp4
(-I
就是 HEAD
请求)
返回内容:
HTTP/1.1 200 OK
Content-Type: video/mp4
Content-Length: 1550000000
你就知道这是一个 1.5GB 的视频,不用先下载。
✅ 示例 2:检查资源是否更新(浏览器缓存机制)
浏览器可能发送:
HEAD /article.html HTTP/1.1
If-Modified-Since: Wed, 12 Jun 2024 10:00:00 GMT
服务器返回:
HTTP/1.1 304 Not Modified
这样浏览器就知道可以使用缓存内容,不用重新下载了。
✅ 总结
问题 | 答案 |
---|---|
HEAD 为什么不返回正文内容? | 因为它的设计目标是仅获取资源的元信息,节省带宽,提高效率,不需要实际内容本身。 |
使用场景? | 资源是否存在、缓存验证、文件大小检测、权限检查等。 |
和 GET 区别? | GET 返回正文,HEAD 不返回正文;其余行为应一致。 |
如你想看 HEAD
方法的代码实现(如 Python requests
,Node.js,或服务器端如何响应 HEAD
),我可以为你举例说明。是否需要?