World wide web sử dụng giao thức HTTP để xác định thông điệp được định dạng, truyền tải cũng như các hành động mà web server cần phản hồi. Trong đó HTTP Header là phần đầu tiên của HTTP. Bài viết hôm nay BKHOST sẽ cùng các bạn tìm hiểu về HTTP Header và một số ví dụ về các trường header request có thể có.
HTTP Header là gì?
HTTP Header là một phần của Giao thức truyền siêu văn bản (HTTP) và truyền thông tin bổ sung trong các request hoặc phản hồi HTTP. Thông qua server web của trang web được gọi mà dữ liệu được gửi tới trình duyệt, thông qua HTTP Header mà server và trình duyệt trao đổi thông tin meta về tài liệu.
HTTP request chứa header có thông tin như ngày request, liên kết giới thiệu hoặc ngôn ngữ ưa thích. Phản hồi HTTP cũng chứa trường header trong đó thông tin của nó được gửi tới trình duyệt của người dùng qua server. Đối với người dùng cuối thì trao đổi thông tin này thường là vô hình.
Các HTTP Header bao gồm các trường, mỗi trường bao gồm một dòng. Mỗi dòng chứa một cặp tên/giá trị – được gọi là cặp khóa-giá trị – được phân tách bằng dấu hai chấm và kết thúc bằng dấu ngắt dòng.
Các giá trị có thể được sử dụng cho HTTP Header được xác định trong RFC. Ngoài các trường được chỉ định, còn có các header không chuẩn có thể được sử dụng để thêm thông tin do người dùng xác định. Các header này thường bắt đầu bằng phần mở rộng x-.
Ví dụ về các trường Request Header
Dưới đây là một số ví dụ về các trường Request Header có thể có.
Accept Fields
Để chỉ định loại phản hồi nào được server chấp nhận thì các trường sau đây được sử dụng:
Accept
Trường này thông báo cho server loại dữ liệu nào có thể được trả về.
Trường Accept trong request HTTP có thể được sử dụng để chỉ định các loại MIME nhất định được client chấp nhận. Cú pháp chung như sau:
{{EJS0}}
Nhiều loại phương tiện có thể được phân tách bằng dấu phẩy. Giá trị tùy chọn q biểu thị mức chất lượng trên thang điểm từ 0 đến 1. Ví dụ:
{{EJS1}}
Các chỉ thị có sẵn:
- client hỗ trợ chính xác một loại MIME, chẳng hạn như văn bản/html:
{{EJS2}}
- MIME không có loại phụ được chỉ định. image/* khớp với image/png, image/svg, image/gif và tất cả các loại hình ảnh khác: /*.
{{EJS3}}
- Bất kỳ loại MIME nào:
{{EJS4}}
Mỗi giá trị được sử dụng được đưa vào một thứ tự ưu tiên được biểu thị bằng cách sử dụng giá trị chất lượng tương đối được gọi là trọng số:
{{EJS5}}
Accept-Charset
Trường này được sử dụng trong các HTTP Header để chỉ định bộ ký tự nào mà client chấp nhận cho phản hồi.
{{EJS6}}
Nếu một số bộ ký tự được chỉ định, hãy nhập chúng cách nhau bằng dấu phẩy. Ví dụ:
{{EJS7}}
Accept-Encoding
Trường này giới hạn các thuật toán mã hóa được chấp nhận trong phản hồi. Cú pháp:
{{EJS8}}
Ví dụ:
{{EJS9}}
Accept-Language
Trường header Accept-Language cho server biết ngôn ngữ mà con người có thể đọc được mà server dự kiến sẽ trả về. Đây là một dấu hiệu và không nhất thiết phải được kiểm soát hoàn toàn bởi người dùng. Server phải luôn tránh ghi đè lựa chọn rõ ràng của người dùng. Cú pháp là:
{{EJS10}}
Nhiều ngôn ngữ có thể được phân tách bằng dấu phẩy. Ví dụ:
{{EJS11}}
Có thể tra cứu các giá trị được phép trong RFC 1766.
Authorization
Trường Authorization được sử dụng trong HTTP Header để xác thực tác nhân người dùng với server. Cú pháp như sau:
{{EJS12}}
Cookie
header request HTTP Cookie chứa các cookie HTTP được lưu trữ trong các cặp tên/giá trị được server gửi trước đó bằng header Set-Cookie. Hành vi này có thể bị chặn bởi các trình duyệt để không có cookie nào được truyền đến server.
{{EJS13}}
Expect
Trường header request HTTP Mong đợi chỉ định các kỳ vọng của client mà server phải đáp ứng để request được xử lý đúng cách.
Cú pháp chung như sau:
{{EJS14}}
From
Trường From của HTTP Header chứa địa chỉ email của người dùng kiểm soát ứng dụng khách request. Thí dụ:
{{EJS15}}
Trường From có thể được sử dụng trong các HTTP Header cho mục đích ghi nhật ký.
Host
Trường server được sử dụng trong các HTTP Header để chỉ định server internet và số cổng cho tài nguyên được request. Cú pháp là:
{{EJS16}}
Nếu số cổng bị thiếu, điều này có nghĩa là cổng mặc định 80.
If Fields
Các trường sau đây được sử dụng để chỉ định các điều kiện nhất định theo đó các tệp được request sẽ được trả về.
If-Match
Trường header này nhắc server chỉ gửi tệp được request nếu nó khớp với các thẻ thực thể được chỉ định. Cú pháp là:
{{EJS17}}
Ví dụ:
{{EJS18}}
Dấu hoa thị (*) cho biết có thể gửi bất kỳ tệp nào.
If-Modified-Since
If-Modified-Since được chỉ định trong HTTP Header, tài nguyên được request sẽ chỉ được server phân phối nếu nó đã được thay đổi kể từ ngày được chỉ định. Nếu không, sẽ không có giao hàng và trang sẽ được tải từ bộ đệm của trình duyệt. Cú pháp:
{{EJS19}}
Ví dụ:
{{EJS20}}
If-None-Match
Trường này nhắc server chỉ gửi tệp được request nếu nó không khớp với bất kỳ thẻ thực thể nào được chỉ định. Cú pháp là:
{{EJS21}}
Ví dụ:
{{EJS22}}
If-Range
Trường header If-Range được sử dụng trong các HTTP Header để chỉ request một phần nội dung bị thiếu nếu nội dung chưa được thay đổi và toàn bộ nội dung nếu một thay đổi đã được thực hiện đối với nó. Cú pháp như sau:
{{EJS23}}
Có thể sử dụng thẻ thực thể hoặc ngày:
{{EJS24}}
Nếu nội dung chưa được thay đổi, server sẽ trả về phạm vi byte được chỉ định bởi header phạm vi. Nếu không, toàn bộ tài liệu mới được trả lại.
If-Unmodified-Since
Cú pháp chung là:
{{EJS25}}
Trường này được sử dụng giống như trường If-Modified-Since field.
Proxy-Authorization
Trường header Proxy-Authorization cho phép client xác định chính nó hoặc người dùng với proxy. Cú pháp:
{{EJS26}}
Range
Trường header Phạm vi chỉ định các phạm vi phụ của nội dung được request. Cú pháp là:
{{EJS27}}
Các giá trị “first-byte-pos” và “last-byte-pos” chỉ định byte đầu tiên và byte cuối cùng của nội dung được bao gồm nhưng không nhất thiết phải được chỉ định cả hai. Nhiều khu vực nội dung có thể được phân tách bằng dấu phẩy.
Referrer
Trường header Người giới thiệu cho phép khách hàng chỉ định địa chỉ (URL) của tài nguyên mà URL được request từ đó. Cú pháp chung như sau:
{{EJS28}}
Ví dụ:
{{EJS29}}
User-Agent
Trường header này gửi thông tin về client đến server. Ví dụ, cú pháp có thể như sau:
{{EJS30}}
Tổng kết về HTTP Header
Qua bài viết trên Bkhost hy vọng đã giúp các bạn hiểu hơn về HTTP Header cũng như các trường header của HTTP Header.
Nếu còn gặp bất cứ vướng mắc gì về HTTP Header hoặc muốn tìm hiểu thêm những thông tin khác về HTTP, hãy để lại ở bên bình luận bên dưới, BKHOST sẽ trả lời bạn trong thời gian sớm nhất.
P/s: Bạn cũng có thể truy cập vào Blog của BKHOST để đọc thêm các bài viết chia sẻ kiến thức về lập trình, quản trị mạng, website, domain, hosting, vps, server, email,… Chúc bạn thành công.