Nếu bạn là một nhà phát triển web, bạn có thể biết tầm quan trọng của việc giao tiếp hiệu quả với các máy chủ web lưu trữ ứng dụng của bạn. Bạn cần gửi các yêu cầu đúng và nhận các phản hồi chính xác, để ứng dụng của bạn có thể hoạt động đúng cách và cung cấp trải nghiệm người dùng tuyệt vời. Nhưng bạn có biết cách sử dụng tiêu đề chấp nhận HTTP để tối ưu hóa giao tiếp này và làm cho ứng dụng của bạn linh hoạt và hiệu quả hơn không? Nếu không, đừng lo lắng.
Trong bài viết blog này, tôi sẽ dạy bạn mọi thứ bạn cần biết về tiêu đề chấp nhận HTTP và cách sử dụng các công cụ như Apidog để kiểm tra và gỡ lỗi các yêu cầu và phản hồi HTTP của bạn.
Tiêu đề Chấp nhận HTTP là gì và nó hoạt động như thế nào?
Tiêu đề chấp nhận HTTP là một phần của thông điệp yêu cầu. Đây là cách để khách hàng thông báo cho máy chủ biết loại nội dung nào họ có thể chấp nhận và xử lý. Nội dung có thể là bất cứ thứ gì mà máy chủ có thể cung cấp, chẳng hạn như HTML, XML, JSON, hình ảnh, video, âm thanh, v.v. Tiêu đề chấp nhận HTTP có định dạng sau:
Accept: media-type, media-type, ...
media-type là một chuỗi xác định loại và loại phụ của nội dung, chẳng hạn như text/html
, application/json
, image/jpeg
, v.v. Bạn cũng có thể sử dụng ký tự đại diện để chỉ định bất kỳ loại hoặc loại phụ nào, chẳng hạn như */*
, text/*
, image/*
, v.v. Bạn cũng có thể sử dụng các tham số để cung cấp thêm chi tiết về nội dung, chẳng hạn như chất lượng, ngôn ngữ, mã hóa, v.v. Ví dụ, text/html;q=0.8,en-US
có nghĩa là khách hàng có thể chấp nhận tài liệu HTML với chất lượng 0.8 (trên thang điểm 1) và bằng tiếng Anh Mỹ.
Bạn có thể chỉ định nhiều media-type trong tiêu đề chấp nhận HTTP, được phân tách bằng dấu phẩy. Thứ tự của các media-type cho biết sở thích của khách hàng. media-type đầu tiên là ưu tiên nhất, thứ hai là ưu tiên thứ hai, và cứ thế. Ví dụ, Accept: text/html,application/json,image/png
nghĩa là khách hàng ưu tiên tài liệu HTML, sau đó là dữ liệu JSON, rồi đến hình ảnh PNG.

Tại sao tiêu đề Chấp nhận HTTP lại quan trọng?
Tiêu đề chấp nhận HTTP là một phương thức mạnh mẽ để thương lượng nội dung giữa khách hàng và máy chủ. Nó cho phép khách hàng yêu cầu các loại nội dung khác nhau dựa trên khả năng và sở thích của họ, và cho phép máy chủ cung cấp nội dung tốt nhất có thể cho khách hàng, dựa trên tính khả dụng và tính tương thích của nó. Điều này có thể cải thiện hiệu suất, hiệu quả và trải nghiệm người dùng của cả khách hàng và máy chủ.
Tiêu đề chấp nhận HTTP quan trọng vì nó giúp máy chủ cung cấp nội dung tốt nhất có thể cho khách hàng, dựa trên khả năng và sở thích của họ. Nó cũng giúp máy chủ tránh gửi dữ liệu không cần thiết hoặc không tương thích mà khách hàng không thể sử dụng hoặc hiển thị. Điều này có thể cải thiện hiệu suất, hiệu quả và trải nghiệm người dùng của cả khách hàng và máy chủ.
Cách sử dụng tiêu đề Chấp nhận HTTP để yêu cầu các loại nội dung khác nhau từ máy chủ
Để viết tiêu đề chấp nhận HTTP trong thông điệp yêu cầu của bạn, bạn cần sử dụng một công cụ hoặc thư viện cho phép bạn gửi các yêu cầu HTTP. Có nhiều công cụ và thư viện có sẵn cho các ngôn ngữ và nền tảng khác nhau, chẳng hạn như curl, Apidog, Axios, Fetch, v.v. Trong ví dụ này, tôi sẽ sử dụng curl, một công cụ dòng lệnh mà bạn có thể sử dụng để gửi các yêu cầu HTTP và nhận các phản hồi HTTP.
Để sử dụng curl, bạn cần gõ lệnh sau trong terminal của bạn:
curl -H "Accept: media-type, media-type, ..." URL
Tùy chọn -H
cho phép bạn thêm một tiêu đề vào yêu cầu của bạn. Accept: media-type, media-type, ...
là tiêu đề chấp nhận HTTP mà bạn muốn gửi. URL
là địa chỉ của máy chủ mà bạn muốn yêu cầu dữ liệu từ đó. Ví dụ, nếu bạn muốn yêu cầu tài liệu HTML từ https://example.com, bạn có thể gõ:
curl -H "Accept: text/html" https://example.com
Điều này sẽ gửi một yêu cầu đến https://example.com với tiêu đề Accept: text/html
, có nghĩa là bạn chỉ có thể chấp nhận tài liệu HTML như là một phản hồi.
Để đọc thông điệp phản hồi từ máy chủ, bạn cần xem mã trạng thái, tiêu đề content-type và nội dung của thông điệp.
Ví dụ, nếu bạn gửi yêu cầu curl -H "Accept: text/html" https://example.com
, bạn có thể nhận được phản hồi sau:
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
<html>
<head>
<title>Example Domain</title>
</head>
<body>
<h1>Example Domain</h1>
<p>Tên miền này được sử dụng trong các ví dụ minh họa trong tài liệu. Bạn có thể sử dụng tên miền này
trong tài liệu mà không cần phối hợp trước hoặc xin phép.</p>
<p><a href="https://www.iana.org/domains/example">Thông tin thêm...</a></p>
</body>
</html>
Mã trạng thái là 200, có nghĩa là yêu cầu đã thành công. Tiêu đề content-type là text/html; charset=UTF-8
, có nghĩa là máy chủ đã gửi lại một tài liệu HTML với mã hóa UTF-8.
Bạn có thể sử dụng tiêu đề chấp nhận HTTP để yêu cầu các loại nội dung khác nhau từ máy chủ bằng cách thay đổi media-type trong yêu cầu của bạn. Ví dụ, nếu bạn muốn yêu cầu dữ liệu JSON từ https://example.com, bạn có thể gõ:
curl -H "Accept: application/json" https://example.com
Điều này sẽ gửi một yêu cầu đến https://example.com với tiêu đề Accept: application/json
, có nghĩa là bạn chỉ có thể chấp nhận dữ liệu JSON như là một phản hồi. Bạn có thể nhận được phản hồi sau:
HTTP/1.1 200 OK
Content-Type: application/json
{
"domain": "example.com",
"purpose": "ví dụ minh họa trong tài liệu",
"link": "https://www.iana.org/domains/example"
}
Mã trạng thái là 200, có nghĩa là yêu cầu đã thành công. Tiêu đề content-type là application/json
, có nghĩa là máy chủ đã gửi lại dữ liệu JSON. Nội dung của thông điệp là dữ liệu JSON chính nó, mà bạn có thể xem trên trình duyệt hoặc trong trang web Apidog.
Bạn cũng có thể yêu cầu nhiều loại nội dung từ máy chủ bằng cách chỉ định hơn một media-type trong yêu cầu của bạn. Ví dụ, nếu bạn muốn yêu cầu tài liệu HTML hoặc dữ liệu JSON từ https://example.com, bạn có thể gõ:
curl -H "Accept: text/html,application/json" https://example.com

Cách xử lý các loại phản hồi khác nhau từ máy chủ dựa trên tiêu đề Chấp nhận HTTP
Đôi khi, máy chủ có thể không thể gửi lại loại nội dung chính xác mà bạn yêu cầu với tiêu đề chấp nhận HTTP. Điều này có thể xảy ra vì nhiều lý do, chẳng hạn như:
- Máy chủ không có nội dung dưới định dạng mà bạn yêu cầu
- Máy chủ có nội dung dưới định dạng mà bạn yêu cầu, nhưng không có sẵn vào lúc này
- Máy chủ có nội dung dưới định dạng mà bạn yêu cầu, nhưng không được phép chia sẻ với bạn
- Máy chủ có nội dung dưới định dạng mà bạn yêu cầu, nhưng quá lớn hoặc quá phức tạp để gửi lại
- Máy chủ không hiểu hoặc không hỗ trợ media-type mà bạn yêu cầu
Có nhiều mã trạng thái khả thi mà máy chủ có thể gửi lại, nhưng đây là một số mã thông dụng nhất mà bạn có thể gặp khi sử dụng tiêu đề chấp nhận HTTP:
- 200 (OK): Điều này có nghĩa là yêu cầu đã thành công và máy chủ đã gửi lại loại nội dung chính xác mà bạn đã yêu cầu với tiêu đề chấp nhận HTTP. Ví dụ, nếu bạn gửi yêu cầu
curl -H "Accept: text/html" https://example.com
, và máy chủ gửi lại một tài liệu HTML với mã trạng thái 200, điều này có nghĩa là mọi thứ diễn ra tốt đẹp và bạn có thể sử dụng tài liệu HTML theo ý thích. - 206 (Nội dung một phần): Điều này có nghĩa là yêu cầu đã thành công và máy chủ đã gửi lại một loại nội dung khác mà bạn cũng có thể chấp nhận với tiêu đề chấp nhận HTTP. Ví dụ, nếu bạn gửi yêu cầu
curl -H "Accept: text/html,application/json" https://example.com
, và máy chủ gửi lại dữ liệu JSON với mã trạng thái 206, điều này có nghĩa là máy chủ không thể cung cấp tài liệu HTML, nhưng có thể cung cấp dữ liệu JSON, mà bạn cũng có thể chấp nhận. Bạn có thể sử dụng dữ liệu JSON theo ý thích, nhưng bạn nên nhận thức rằng đây không phải là loại nội dung ưu tiên mà bạn đã yêu cầu. - 406 (Không chấp nhận được): Điều này có nghĩa là yêu cầu đã thất bại và máy chủ không thể cung cấp bất kỳ loại nội dung nào mà bạn có thể chấp nhận với tiêu đề chấp nhận HTTP. Ví dụ, nếu bạn gửi yêu cầu
curl -H "Accept: text/html" https://example.com
, và máy chủ gửi lại một thông điệp lỗi với mã trạng thái 406, điều này có nghĩa là máy chủ không có bất kỳ tài liệu HTML nào để gửi lại, và không có bất kỳ loại nội dung nào khác mà bạn có thể chấp nhận. Bạn không thể sử dụng thông điệp lỗi theo ý thích, nhưng bạn nên đọc kỹ và cố gắng hiểu lý do tại sao máy chủ không thể gửi lại nội dung mà bạn đã yêu cầu. Bạn có thể cần thay đổi yêu cầu của mình hoặc liên hệ với người quản trị máy chủ để biết thêm thông tin. - 415 (Loại phương tiện không được hỗ trợ): Điều này có nghĩa là yêu cầu đã thất bại và máy chủ không hiểu hoặc không hỗ trợ media-type mà bạn đã yêu cầu với tiêu đề chấp nhận HTTP. Ví dụ, nếu bạn gửi yêu cầu
curl -H "Accept: application/x-custom" https://example.com
, và máy chủ gửi lại một thông điệp lỗi với mã trạng thái 415, điều này có nghĩa là máy chủ không biếtapplication/x-custom
là gì, và không thể cung cấp bất kỳ nội dung nào dưới định dạng đó. Bạn không thể sử dụng thông điệp lỗi theo ý thích, nhưng bạn nên đọc kỹ và cố gắng hiểu lý do tại sao máy chủ không hỗ trợ media-type mà bạn đã yêu cầu. Bạn có thể cần thay đổi yêu cầu của mình hoặc liên hệ với người quản trị máy chủ để biết thêm thông tin.
Tiêu đề content-type và nội dung của thông điệp phản hồi cũng có thể thay đổi dựa trên mã trạng thái và media-type mà máy chủ đã gửi lại. Bạn có thể sử dụng các công cụ như Apidog để xem tiêu đề content-type và nội dung của thông điệp một cách thân thiện với người dùng.
Cách sử dụng Apidog để kiểm tra và gỡ lỗi tiêu đề chấp nhận HTTP của tôi?
Apidog là một công cụ trực tuyến giúp bạn kiểm tra, gỡ lỗi và tài liệu API của bạn miễn phí.
Để sử dụng Apidog để kiểm tra và gỡ lỗi tiêu đề chấp nhận HTTP của bạn, bạn cần làm theo các bước sau:
- Nhấp vào nút “Yêu cầu Mới” để tạo một yêu cầu HTTP mới.

- Chọn phương thức HTTP (GET, POST, PUT, v.v.) từ menu thả xuống và nhập URL của điểm cuối API mà bạn muốn kiểm tra trong trường “URL” sau đó nhấp vào phần “Tiêu đề” để mở nó.

- Bạn sẽ thường thấy một danh sách các tiêu đề với các trường cho “Tên” và “Giá trị”.

- Để thêm tiêu đề mới, chỉ cần nhấp vào tên và chọn tên cũng như loại nội dung mà bạn muốn yêu cầu dưới dạng giá trị. Ví dụ,
Accept: application/json
có nghĩa là bạn muốn nhận dữ liệu JSON từ máy chủ.


- Gửi yêu cầu của bạn đến máy chủ và bạn sẽ thấy phản hồi từ máy chủ trong phần “Phản hồi”. Bạn có thể kiểm tra mã trạng thái, các tiêu đề phản hồi và nội dung phản hồi.

- Để kiểm tra xem máy chủ có tôn trọng tiêu đề chấp nhận HTTP của bạn hay không, hãy xem tiêu đề “Content-Type” trong phản hồi. Nó nên khớp với một trong các loại nội dung mà bạn đã yêu cầu trong yêu cầu. Ví dụ, nếu bạn yêu cầu
Accept: application/json
, thì phản hồi nên cóContent-Type: application/json
.

Các thực hành tốt nhất và mẹo sử dụng tiêu đề Chấp nhận HTTP.
Tiêu đề chấp nhận HTTP là một tiêu đề yêu cầu cho biết các loại nội dung nào, được biểu thị dưới dạng loại MIME, mà khách hàng có thể hiểu. Máy chủ sử dụng thương lượng nội dung để chọn một trong các đề xuất và thông báo cho khách hàng về sự lựa chọn với tiêu đề phản hồi Content-Type. Dưới đây là một số thực hành tốt nhất và mẹo khi sử dụng tiêu đề chấp nhận HTTP trong các dự án phát triển web của bạn:
- Sử dụng cú pháp giá trị chất lượng để chỉ định thứ tự ưu tiên của các loại nội dung. Ví dụ,
Accept: text/html, application/xhtml+xml, application/xml;q=0.9, */*;q=0.8
có nghĩa là khách hàng ưu tiên HTML, sau đó là XHTML, rồi đến XML, và sau đó là bất kỳ loại nào khác. - Sử dụng ký tự đại diện (*) để chỉ ra rằng khách hàng có thể chấp nhận bất kỳ loại phụ nào hoặc bất kỳ loại nào. Ví dụ,
Accept: image/*
có nghĩa là khách hàng có thể chấp nhận bất kỳ định dạng hình ảnh nào, vàAccept: */*
có nghĩa là khách hàng có thể chấp nhận bất kỳ loại nội dung nào. - Hãy cụ thể về các loại nội dung mà khách hàng có thể xử lý, và tránh sử dụng
Accept: */*
trừ khi cần thiết. Điều này có thể giúp máy chủ gửi định dạng phù hợp nhất cho khách hàng, và tránh gửi dữ liệu không cần thiết mà khách hàng không thể xử lý. - Kiểm tra tiêu đề chấp nhận HTTP của bạn với các máy chủ web và dịch vụ web khác nhau, và kiểm tra tiêu đề phản hồi Content-Type để xem liệu máy chủ có tôn trọng sở thích của bạn hay không. Bạn có thể sử dụng các công cụ như curl hoặc Apidog để gửi các yêu cầu HTTP tùy chỉnh và kiểm tra các tiêu đề phản hồi.
Kết luận
Trong bài viết này, tôi đã giải thích tầm quan trọng của tiêu đề Chấp nhận HTTP và cách nó có thể được sử dụng để thương lượng loại nội dung giữa khách hàng và máy chủ. Tôi cũng đã chỉ cho bạn cách thiết lập tiêu đề Chấp nhận trong các tình huống khác nhau.
Bằng cách sử dụng tiêu đề Chấp nhận, chúng ta có thể đảm bảo rằng máy chủ phản hồi với định dạng phù hợp nhất cho nhu cầu của chúng ta, và tránh các chuyển đổi hoặc lỗi không cần thiết. Tiêu đề Chấp nhận là một trong nhiều tiêu đề HTTP có thể giúp chúng ta xây dựng các ứng dụng web mạnh mẽ và hiệu quả hơn.