Sự khác biệt giữa các tiêu đề HTTP chấp nhận và loại nội dung


119

Vì vậy, Accepttiêu đề cho máy chủ biết loại MIME của tài nguyên mà trình duyệt đang tìm kiếm. Ví dụ: máy chủ có thể gửi văn bản đơn giản, HTML, JSON, v.v.

OK, điều đó có ý nghĩa, nhưng khi tôi nhìn vào Content-Typetiêu đề và nó dường như đang làm điều tương tự. Ví dụ, nó nói với máy chủ rằng nó muốn văn bản hoặc JSON.

Vì vậy, sự khác biệt giữa là những gì AcceptContent-Typetiêu đề HTTP?

Câu trả lời:


155

Như bạn lưu ý chính xác, tiêu đề Chấp nhận được sử dụng bởi các máy khách HTTP để cho máy chủ biết loại nội dung nào họ sẽ chấp nhận. Sau đó, máy chủ sẽ gửi lại phản hồi, trong đó sẽ bao gồm tiêu đề Kiểu nội dung cho khách hàng biết loại nội dung của nội dung được trả về thực sự là gì.

Tuy nhiên, như bạn có thể nhận thấy, các yêu cầu HTTP cũng có thể chứa các tiêu đề Kiểu nội dung. Tại sao? Vâng, hãy nghĩ về các yêu cầu POST hoặc PUT . Với các loại yêu cầu đó, máy khách thực sự đang gửi một loạt dữ liệu đến máy chủ như một phần của yêu cầu và tiêu đề Kiểu nội dung cho máy chủ biết dữ liệu thực sự là gì (và do đó xác định cách máy chủ sẽ phân tích cú pháp).

Cụ thể, đối với một yêu cầu POST xuất phát từ việc gửi biểu mẫu HTML, Loại nội dung của yêu cầu sẽ (thông thường) sẽ là một trong những loại nội dung biểu mẫu tiêu chuẩn bên dưới, như được chỉ định bởi enctypethuộc tính trên <form>thẻ:

  • application/x-www-form-urlencoded (mặc định, cũ hơn, đơn giản hơn, ít chi phí hơn một chút cho một lượng nhỏ văn bản ASCII đơn giản, không hỗ trợ tải lên tệp)
  • multipart/form-data (mới hơn, thêm hỗ trợ cho tải lên tệp, hiệu quả hơn đối với số lượng lớn dữ liệu nhị phân hoặc văn bản không phải ASCII)

22
  • Chấp nhận : là những gì trình duyệt có thể tiêu hóa, ví dụ, tất cả các ngôn ngữ mà ai đó có thể hiểu.
  • Kiểu nội dung : là định dạng của dữ liệu thực tế, ví dụ ngôn ngữ mà ai đó đang nói. Vì máy tính không thể (tốt, giờ họ có thể) nhận ra các loại khác như mọi người có thể nói "oh, anh ấy là người Đức!" hoặc "cô ấy đang nói tiếng Trung Quốc!"

1
Không nhất thiết phải là một trình duyệt, nhưng bất kỳ ứng dụng khách http nào.
Jim Aho

20

Chấp nhận là như thế

Đây là yêu cầu của tôi và tôi muốn (chấp nhận) định dạng phản hồi này

Kiểu nội dung giống như

Đây là yêu cầu của tôi (hoặc phản hồi) và đây (Loại nội dung) là định dạng của nội dung tôi đang gửi trong yêu cầu của tôi (hoặc phản hồi)


Tôi biết tôi đến muộn nhưng tôi tò mò, điều gì sẽ xảy ra nếu định dạng phản hồi không được gửi ở định dạng ed "Chấp nhận" bởi máy chủ?
hét

1
Điều đó sẽ tùy thuộc vào khách hàng quyết định @shriek. Tôi đoán hầu hết các máy khách http (hoặc trình duyệt) sẽ "nhìn" thông minh vào dữ liệu thực và xem nó thực sự là gì. Có thể một khách hàng cũng có thể coi thường phản hồi nếu nó được coi là JSON, nhưng phân tích cú pháp thất bại vì nó dường như là một thứ khác.
Jim Aho

5

Đó là một cuộc trò chuyện đáp ứng yêu cầu, vì vậy khách hàng

  • gửi yêu cầu "Loại nội dung" và
  • mong đợi nhận được phản hồi của loại phương tiện "Chấp nhận".

Sai. Chấp nhận là một tiêu đề yêu cầu. Xem câu trả lời được chấp nhận.
Darron

2
@darron Không, câu trả lời này là chính xác. Anh ấy không nói rằng đó không phải là một tiêu đề yêu cầu, anh ấy nói rằng mục đích của nó là nói với máy chủ loại phản hồi mà nó mong đợi để nhận lại. Loại dư thừa với các câu trả lời khác, nhưng tôi nghĩ đó là ngắn gọn nhất. +1.
Todd Menier

0

Chấp nhận

Tiêu đề HTTP yêu cầu Chấp nhận quảng cáo loại nội dung nào, được thể hiện dưới dạng loại MIME, khách hàng có thể hiểu được. Sử dụng đàm phán nội dung, sau đó máy chủ sẽ chọn một trong các đề xuất, sử dụng nó và thông báo cho khách hàng về lựa chọn của mình với tiêu đề phản hồi Kiểu nội dung. Các trình duyệt đặt các giá trị đầy đủ cho tiêu đề này tùy thuộc vào ngữ cảnh nơi yêu cầu được thực hiện: khi tìm nạp biểu định kiểu CSS, một giá trị khác được đặt cho yêu cầu so với khi tìm nạp hình ảnh, video hoặc tập lệnh.

( nguồn: developer.mozilla.org )

Loại nội dung

Tiêu đề thực thể Kiểu nội dung được sử dụng để chỉ ra loại phương tiện của tài nguyên.

Trong các phản hồi, tiêu đề Kiểu Nội dung cho khách hàng biết loại nội dung của nội dung được trả về thực sự là gì. Các trình duyệt sẽ thực hiện đánh hơi MIME trong một số trường hợp và không nhất thiết phải tuân theo giá trị của tiêu đề này; để ngăn chặn hành vi này, tiêu đề X-Content-Type-Options có thể được đặt thành nosniff.

Trong các yêu cầu, (chẳng hạn như POST hoặc PUT), máy khách sẽ báo cho máy chủ biết loại dữ liệu nào thực sự được gửi.

( nguồn: developer.mozilla.org )

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.