Chính xác thì Thực thể HTTP là gì?


114

Ai đó vui lòng mô tả cho tôi chính xác thực thể HTTP là gì?

Tôi đang đọc tài liệu HTTPClient, nhưng tôi không thực sự hiểu điều đó có nghĩa là gì?


2
Tôi đến đây từ đây viết lên trên HTTP: HTTP: Giao thức Mọi nhà phát triển web phải biết nếu có ai khác đến đây tìm kiếm thông tin về chủ đề này.
Mason240

2
Lưu ý rằng thuật ngữ "thực thể HTTP" không còn xuất hiện trong thông số kỹ thuật HTTP 1.1 mới nhất . Có vẻ như nó không được dùng nữa. Bây giờ chúng ta chỉ có thể sử dụng "trường tiêu đề" và "nội dung thư".
Hawkeye Parker

Câu trả lời:


139

Một thực thể HTTP là phần lớn các yêu cầu HTTP hoặc phản ứng, bao gồm một số các tiêu đề và cơ thể, nếu có. Nó dường như là toàn bộ yêu cầu hoặc phản hồi mà không có yêu cầu hoặc dòng trạng thái (mặc dù chỉ một số trường tiêu đề nhất định được coi là một phần của thực thể ).

Để minh họa; đây là một yêu cầu:

POST /foo HTTP/1.1          # Not part of the entity.
Content-Type: text/plain    # ┬ The entity is from this line down...
Content-Length: 1234        # │
                            # │
Hello, World! ...           # ┘

Và một phản hồi:

HTTP/1.1 200 OK             # Not part of the entity.
Content-Length: 438         # ┬ The entity is from this line down...
Content-Type: text/plain    # │
                            # │
Response body ...           # ┘

3
Máy chủ lưu trữ không phải là trường tiêu đề thực thể.
Gumbo 10/12/12

Tôi nghĩ rằng một thực thể đang sử dụng &thay vì &. Đó không phải là một thực thể quá? Có gì khác biệt?
CodyBugstein

1
@Imray: &là một tham chiếu thực thể ký tự HTML , không giống một thực thể HTTP .
maerics

2
@lmray: chúng là các thực thể hoàn toàn khác nhau. ;) (Một là về mã hóa các chuỗi trong văn bản HTML , còn lại là về cấu trúc thông tin khi trình duyệt và máy chủ nói chuyện với nhau qua giao thức HTTP . Ngoài ra, một là khó hiểu hơn cái kia. Hoặc ngược lại.; - o)
Sz.

6
Lưu ý rằng thuật ngữ "thực thể HTTP" không còn xuất hiện trong các thông số kỹ thuật HTTP 1.1 mới nhất . Có vẻ như nó không được dùng nữa. Bây giờ chúng ta chỉ có thể gắn bó với "trường tiêu đề" và "nội dung thư".
Hawkeye Parker

15

Dưới đây là 3 trường hợp đơn giản:

Trường hợp 1. Bạn đang tải lên 3 tệp trong một yêu cầu. 3 tệp đó là 3 thực thể. Mỗi người trong số họ có riêng Content-Typeđể cho biết đó là loại tệp nào.

Trường hợp 2. Bạn đang xem một trang web. Trình duyệt đã tải xuống một tệp html dưới dạng thực thể trong nền. Vì trang có thể được cập nhật liên tục, bạn có thể nhận được một thực thể hoàn toàn khác sau này.

Trường hợp 3. Bạn có một 304 Not Modified . Không có thực thể nào đã được chuyển giao.

Nói một cách dễ hiểu, Thực thể là một trọng tải tùy chọn bên trong thông báo http (yêu cầu hoặc phản hồi), vì vậy nó là mối quan hệ " một phần toàn bộ " giữa Thực thể và Thông báo.

Một số trường tiêu đề áp dụng Messagenhư Transfer-Encodingmô tả cách chuyển thông điệp giữa các bên trung gian, và do đó CÓ THỂ được thêm vào hoặc loại bỏ bởi bất kỳ ứng dụng nào dọc theo chuỗi yêu cầu / phản hồi ( hop-by-hop headers). So sánh, các trường tiêu đề đó áp dụng cho Entitymột số thuộc tính, mô tả kích thước, loại, thuật toán nén của thực thể, v.v.

Đọc thêm, trích dẫn từ RFC 2616 phần 1.4, 4.5 và 4.3:

  • Chuỗi yêu cầu / phản hồi
     request chain -------------------------------------->
   UA -----v----- A -----v----- B -----v----- C -----v----- O
      <------------------------------------- response chain

Hình trên cho thấy ba trung gian (A, B và C) giữa tác nhân người dùng và máy chủ gốc. Một thông báo yêu cầu hoặc phản hồi đi qua toàn bộ chuỗi sẽ đi qua bốn kết nối riêng biệt.

  • Các trường tiêu đề cho Thư hoặc Thực thể

Có một số trường tiêu đề có khả năng áp dụng chung cho cả thông báo yêu cầu và phản hồi, nhưng không áp dụng cho thực thể đang được chuyển . Các trường tiêu đề này chỉ áp dụng cho thông báo đang được truyền đi .

  • Các trường tiêu đề cho Tin nhắn có thể được thay đổi dọc theo chuỗi

Mã hóa chuyển giao PHẢI được sử dụng để chỉ ra bất kỳ mã hóa chuyển giao nào được ứng dụng áp dụng để đảm bảo chuyển thông điệp an toàn và đúng cách. Mã hóa truyền là một thuộc tính của thông điệp, không phải của thực thể, và do đó CÓ THỂ được thêm vào hoặc xóa bởi bất kỳ ứng dụng nào dọc theo chuỗi yêu cầu / phản hồi.

  • Mối quan hệ giữa nội dung thư và nội dung thực thể

message-body = Transfer-Encoding( Content-Encoding(entity-body) )

nơi Transfer-Encodingcó thể là "chunked" có nghĩa là cách chuyển thông điệp và Content-Encodingcó thể là "gzip" là viết tắt của cách nén thực thể.


Chà, cảm ơn bạn đã làm rõ mối quan hệ "một phần toàn bộ" giữa thực thể và thông báo! Phần còn lại làm tăng thêm sự nhầm lẫn, nhưng nhìn chung, vẫn đáng được ủng hộ. Chúc mừng!
Sz.

12

Nó là một trừu tượng đại diện cho một yêu cầu hoặc tải trọng phản hồi . Các javadoc là rõ ràng về mục đích của nó và các loại thực thể khác nhau.


3
+1 vì đã gọi nó là "payload", điều này cuối cùng đã thêm một số ý nghĩa cho thuật ngữ void đó ("entity").
Sz.


2

HTTP là một Giao thức được quan sát khi truy cập thông tin từ một máy từ xa thông qua mạng. Thông thường mạng là internet và máy từ xa là máy chủ.

Khi bạn hỏi thông tin từ người A đến người B, bạn đã đưa cho anh ta một thông điệp. (Yêu cầu). Người B trả lời bạn (Hồi đáp). Yêu cầu và phản hồi là các loại thông báo HTTP.

Người A có thể yêu cầu Người B làm một việc gì đó, thay vì hỏi thông tin. Giả sử, Người A muốn Người B lưu trữ một tệp ở một vị trí an toàn. Vì vậy, Người A chuyển tệp đó (Thực thể HTTP) cho Người B và yêu cầu anh ta làm điều gì đó (Thông báo HTTP). Trong trường hợp này, Person đang chuyển một "Thực thể". Trong ngữ cảnh của Thực thể HTTP, nó là một trọng tải được đính kèm với thông báo.

Hy vọng sự tương tự đã giúp.


2

Như đã nói trong một bình luận của @ hawkeye-parker, có vẻ như Entity đã không còn được dùng nữa. Thực hiện tìm kiếm trong rfc 2014 này , và bạn sẽ thấy về các thực thể XML và nội dung thư, nhưng không có gì về thực thể Http.

Tuy nhiên, HttpClient, cũng như ứng dụng khách JaxRS, có một setEntity()getEntity()phương pháp.

Xem xét câu trả lời được chấp nhận, cả hai thư viện đều sai! HttpClient.setEntity()sẽ không xóa các tiêu đề đã đặt trước đó.


Tôi thấy sự phân biệt của "Thực thể" (và "tiêu đề thực thể" có liên quan) và "Thông báo" khá hữu ích. Điều này nhanh chóng trở nên rõ ràng, khi bạn thiết kế một thư viện mạng và thực hiện phân tích một thông điệp HTTP và các biến thể khác nhau của nó, ví dụ như một thông báo nhiều phần. Thật không may, các RFC mới hợp nhất các "lớp" riêng biệt này thành một và chúng tôi cần giới thiệu thuật ngữ của riêng mình hoặc gắn bó với "Thực thể".
CouchDeveloper

1

HttpEntitylà những gì bạn sẽ chuyển trong Yêu cầu (có tiêu đề) và những gì bạn nhận được trong Phản hồi. Đối với Nhận Yêu cầu, chúng tôi đang chuyển chuỗi đơn giản

 HttpHeaders headers = new HttpHeaders();
 headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
 HttpEntity<String> entity = new HttpEntity<String>(headers);

Đối với bài đăng Chúng tôi sẽ vượt qua Lớp thực thể hoàn chỉnh

public String createProducts(@RequestBody Product product) {
    HttpHeaders headers = new HttpHeaders();
    headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
    HttpEntity<Product> entity = new HttpEntity<Product>(product,headers);

    return restTemplate.exchange(
             "http://localhost:8080/products", HttpMethod.POST, entity, String.class
           ).getBody();
}

0

Thực thể là một cái gì đó giống như một thông điệp, nó bao gồm tiêu đề, nơi chứa siêu dữ liệu như vị trí, ngôn ngữ, mã hóa ...

Và tùy chọn của một nội dung - nội dung đó được định dạng, v.v. như được chỉ định trong tiêu đề


0

Trong số các câu trả lời tốt mà chúng tôi có ở đây, tôi tin rằng điều đáng nói là một thứ đến trực tiếp từ RFC 2616 (Giao thức truyền siêu văn bản - HTTP / 1.1) :

Thực thể

Thông báo Yêu cầu và Phản hồi CÓ THỂ chuyển một thực thể nếu không bị hạn chế bởi phương thức yêu cầu hoặc mã trạng thái phản hồi. Một thực thể bao gồm các trường tiêu đề thực thể và một phần thân thực thể, mặc dù một số phản hồi sẽ chỉ bao gồm các tiêu đề thực thể.

Trong aa Tóm lại: một thực thể có thể được chuyển giao, và nó có thể là tiêu đề + cơ thể , hay chỉ là tiêu đề .

Vì có liên kết ở trên, tôi tự giữ mình trong việc đưa ra các nhận xét bổ sung.

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.