HEAD Request là gì? Giải mã phương thức HTTP HEAD và ứng dụng thực tế

head request là gì

Khi làm việc với HTTP, một trong những phương thức ít được chú ý nhưng cực kỳ hữu ích là HEAD request. HEAD request là gì? Đây là phương thức yêu cầu server trả về các header giống hệt như GET request nhưng không kèm nội dung (body). Nói cách khác, bạn chỉ nhận được “bộ thông tin mô tả” về tài nguyên mà không tải toàn bộ dữ liệu. Phương thức này thường được sử dụng để kiểm tra sự tồn tại của tài nguyên, xác định kích thước, loại nội dung, hoặc thời gian sửa đổi cuối cùng mà không tốn băng thông tải nội dung thực sự. Việc hiểu rõ head request là gì sẽ giúp bạn tối ưu hóa ứng dụng web, cải thiện hiệu năng và quản lý tài nguyên hiệu quả.

Định nghĩa HEAD Request và cơ chế hoạt động

head request là gì - Hình 5

HEAD request là một trong chín phương thức HTTP được định nghĩa trong chuẩn HTTP/1.1 (RFC 7231). Nó hoạt động giống hệt GET nhưng server chỉ trả về dòng status và các header response, không có body. Nếu request thành công, server trả về mã 200 OK cùng các header như Content-Type, Content-Length, Last-Modified, ETag, v.v.

Cơ chế hoạt động rất đơn giản: client gửi request dòng đầu tiên là HEAD /path HTTP/1.1, server xử lý và phản hồi chỉ với header. Không có dữ liệu thân (payload) nào được truyền về. Điều này giúp HEAD request nhanh hơn đáng kể so với GET khi chỉ cần thông tin metadata.

Phân biệt HEAD Request với các phương thức HTTP khác

head request là gì - Hình 4

So sánh HEAD và GET

Tiêu chí HEAD GET
Có body response? Không
Tải nội dung Không
Băng thông tiêu thụ Rất thấp Cao hơn nhiều
Mục đích chính Lấy header, kiểm tra Lấy tài nguyên
Cache Có thể cache Có thể cache
Idempotent

HEAD request là gì xét về bản chất? Nó là phiên bản “nhẹ” của GET. Server bắt buộc phải trả về các header giống hệt như GET. Do đó, mọi thông tin như Content-Type, Content-Encoding, Cache-Control, ETag đều hiện diện đầy đủ. Nếu sử dụng HEAD để kiểm tra, bạn sẽ biết trước kích thước file, loại nội dung, thời điểm sửa đổi cuối cùng mà không cần tải xuống.

So sánh HEAD với POST, PUT, DELETE

Các phương thức POST, PUT, DELETE thay đổi trạng thái server và có body request. HEAD chỉ đọc (read-only), không thay đổi dữ liệu. HEAD không được thiết kế để gửi dữ liệu lên server. Vì vậy, HEAD không thể thay thế POST hay PUT trong bất kỳ tình huống nào cần gửi payload.

Lợi ích của HEAD Request

head request là gì - Hình 3
    • Tiết kiệm băng thông đáng kể: Khi chỉ cần kiểm tra header, HEAD giảm tải dữ liệu xuống gần như bằng 0. Ví dụ, một file 500MB có header chỉ vài KB. Dùng HEAD thay vì GET tiết kiệm hàng trăm MB.
    • Kiểm tra sự tồn tại của tài nguyên: Mã trạng thái HTTP 200 (OK) hoặc 404 (Not Found) cho biết tài nguyên có tồn tại mà không cần tải toàn bộ.
    • Xác định kích thước file trước khi tải: Header Content-Length cho biết dung lượng chính xác. Ứng dụng download manager thường dùng HEAD để lấy kích thước trước khi quyết định tải.
    • Kiểm tra thời gian sửa đổi (Last-Modified/ETag): Hỗ trợ caching thông minh. Nếu file không thay đổi, client có thể sử dụng bản cache cũ.
    • Kiểm tra loại nội dung (Content-Type): Giúp xác định định dạng file (image, video, PDF) trước khi xử lý.
    • Phát hiện redirect: Dùng HEAD có thể biết URL có redirect sang URL khác (mã 301, 302) mà không tải nội dung thật.
    • Kiểm tra xác thực: Header WWW-Authenticate từ response HEAD cho biết yêu cầu xác thực.
    • Giảm tải cho server: Server chỉ xử lý nhẹ nhàng, không cần đọc toàn bộ file từ disk, giảm I/O và CPU.

    Hạn chế của HEAD Request

    • Không có body response: Không thể lấy nội dung để hiển thị hay xử lý.
    • Không phải lúc nào server cũng trả về header giống hệt GET: Một số server có thể xử lý HEAD khác với GET, dẫn đến header không chính xác (ví dụ Content-Length khác).
    • Một số proxy/cache có thể block HEAD: Một số hệ thống bảo mật chặn HEAD request, coi là hành vi quét.
    • Không hỗ trợ range request: HEAD không hỗ trợ header Range, do đó không thể kiểm tra một phần header.
    • Không thể thay thế GET trong một số tác vụ: Nếu ứng dụng cần nội dung, HEAD vô dụng.

Khi nào nên sử dụng HEAD Request?

head request là gì - Hình 2

HEAD request là gì trong các tình huống thực tế? Việc này giúp tiết kiệm tài nguyên cho cả bot và server. Ngoài ra, HEAD còn được dùng để kiểm tra redirect chain, xác định URL cuối cùng mà không cần tải nội dung từ mỗi chặng.

Download Manager và Trình duyệt

Trình quản lý tải xuống (như IDM, uGet) gửi HEAD request đến URL để lấy Content-Length, từ đó tính toán số phần cần chia để tải đa luồng. Trình duyệt có thể dùng HEAD để kiểm tra file đã thay đổi hay chưa trước khi tải lại tài nguyên từ cache.

Monitoring và Health Check

Các công cụ giám sát (UptimeRobot, Pingdom) gửi HEAD request đến endpoint để kiểm tra server còn sống không, trả về mã 2xx hay 5xx. Nhanh hơn và nhẹ hơn GET.

Xác thực và bảo mật

Trước khi gửi dữ liệu nhạy cảm, client có thể dùng HEAD để kiểm tra header WWW-Authenticate và biết phương thức xác thực (Basic, Digest, Bearer). Cũng có thể kiểm tra header Strict-Transport-Security để đảm bảo kết nối HTTPS.

API Testing

Khi kiểm tra API, developer thường dùng HEAD để xác minh endpoint tồn tại, xem header response mà không ảnh hưởng đến dữ liệu. Các framework test như Postman, curl hỗ trợ HEAD dễ dàng.

Ví dụ thực tế với cURL và Python

Dùng cURL

Để gửi HEAD request, thêm flag -I (hoặc --head):

curl -I https://example.com

Kết quả trả về chỉ có header, ví dụ:

HTTP/2 200
content-type: text/html; charset=UTF-8
content-length: 1256
date: Mon, 10 Apr 2025 12:00:00 GMT
last-modified: Fri, 01 Apr 2025 10:30:00 GMT
etag: "4f7a-6123abc"
accept-ranges: bytes

Không có body HTML phía dưới.

Dùng Python requests

Thư viện requests hỗ trợ HEAD qua phương thức requests.head():

import requests resp = requests.head('https://example.com')
print(resp.status_code) # 200
print(resp.headers['content-length']) # 1256
print(resp.text) # '' (rỗng)

Lưu ý: resp.content cũng trả về bytes rỗng.

Trình duyệt DevTools

Trong tab Network của Chrome DevTools,

Có. HEAD là phương thức an toàn (safe), nghĩa là không thay đổi trạng thái server. Giống như GET,

Có. HEAD là idempotent: gọi N lần đều cho kết quả giống nhau (về mặt tác động lên server).

Có thể gửi body trong HEAD request không?

Theo chuẩn HTTP, HEAD request không được có body. Client không gửi payload. Server cũng không trả về body. Bất kỳ body nào gửi kèm HEAD đều bị bỏ qua.

HEAD request có được cache không?

Có. HEAD response có thể được cache nếu header Cache-Control cho phép. Tuy nhiên, cache riêng cho HEAD khác với cache cho GET. Một số proxy dùng chung cache nếu header giống hệt.

Tôi có thể dùng HEAD để kiểm tra link có chết không?

Được, nhưng cẩn thận. Nếu server trả về 404 cho HEAD nhưng 200 cho GET (do cấu hình đặc biệt), kết luận link chết có thể sai. Tốt nhất là dùng GET với range nhỏ hoặc chỉ kiểm tra status code thông qua HEAD và xác nhận thêm.

HEAD request có tải file về không?

Không. HEAD chỉ lấy header, không tải nội dung file.

Kết luận

head request là gì - Hình 1

HEAD request là một công cụ mạnh mẽ và nhẹ nhàng giúp lấy thông tin metadata của tài nguyên mà không tốn băng thông. Hiểu rõ head request là gì và áp dụng đúng cách sẽ giúp bạn tối ưu hóa crawl, caching, monitoring, download và bảo mật. Hãy sử dụng HEAD khi bạn chỉ cần header, và đừng quên xử lý các trường hợp ngoại lệ do server cấu hình không chuẩn. Việc kết hợp HEAD với các phương thức khác sẽ giúp ứng dụng của bạn hiệu quả và chuyên nghiệp hơn.

Bài viết cùng chủ đề:

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *