2012-02-08 48 views
90

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

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

+0

Toàn bộ phản hồi. – Mob

+2

Tôi đến đây từ điều này viết lên trên HTTP: [HTTP: Giao thức Mỗi nhà phát triển web phải biết] (http://net.tutsplus.com/tutorials/tools-and-tips/http-the-protocol-every-web -developer-must-know-part-1 /) 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ố HTTP 1.1 mới nhất] (http://tools.ietf.org/html/rfc7230). Có vẻ như nó không được chấp nhận. Bây giờ chúng ta chỉ có thể sử dụng "trường tiêu đề" và "nội dung thư". –

Trả lời

111

An HTTP entity là phần lớn yêu cầu hoặc phản hồi HTTP, bao gồm some of the headers và phần thân, nếu có. Có vẻ như toàn bộ yêu cầu hoặc phản hồi không có yêu cầu hoặc dòng trạng thái (mặc dù chỉ có certain header fields are considered part of the entity).

Để 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 câu trả lờ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 ...   # ┘ 
+0

Cảm ơn bạn rất nhiều !!!!!!!!!! – helloThere

+2

* Máy chủ * không phải là trường tiêu đề thực thể. – Gumbo

+0

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

0

Entity là một cái gì đó giống như một thông điệp, nó bao gồm tiêu đề, đang ở đâu siêu dữ liệu như vị trí, lang, mã hóa ...

Và tùy chọn của một cơ thể - đó nội dung được formated vv theo quy định tại tiêu đề

11

Đây là số trừu tượng đại diện cho yêu cầu hoặc phản hồi trọng tả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 để gọi nó là "trọng tải", điều này cuối cùng cũng thêm một số ý nghĩa vào thuật ngữ trống đó ("thực thể"). –

13

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 tin trong một yêu cầu duy nhất. 3 tệp đó là 3 thực thể. Mỗi người trong số họ có Content-Type riêng để cho biết loại tệp đó là gì.

Trường hợp 2. Bạn đang xem trang web. Trình duyệt đã tải xuống 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 đó.

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.

Trong một từ, Entity là một tải trọng tùy chọn bên trong một thông báo http (hoặc yêu cầu hoặc phản ứng), vì vậy nó là một mối quan hệ "bán toàn bộ" giữa Entity và tin nhắn.

Một số trường tiêu đề áp dụng cho Message như Transfer-Encoding mô tả cách chuyển thư giữa các trung gian và do đó có thể được thêm hoặc xóa bởi bất kỳ ứng dụng nào trong chuỗi yêu cầu/phản hồi (hop-by-hop headers). Để so sánh, các trường tiêu đề này áp dụng cho Entity là mộ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 mục 1.4, 4.5 và 4.3:

  • Một chuỗi request/response
 request chain --------------------------------------> 
    UA -----v----- A -----v----- B -----v----- C -----v----- O 
     <------------------------------------- response chain 

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

  • lĩnh vực header hoặc cho tin nhắn hoặc Entity

Có một vài lĩnh vực tiêu đề có khả năng áp dụng chung cho cả tin nhắn yêu cầu và phản ứng, nhưng đó không áp dụng cho cho đơn vị đã chuyển. Các trường tiêu đề này chỉ áp dụng cho thư được truyền.

  • lĩnh vực Tựa đề của tin nhắn có thể thay đổi dọc theo chuỗi

Transfer-Encoding PHẢI được sử dụng để chỉ bất kỳ chuyển-mã khác được áp dụng bởi một ứng dụng để đảm bảo chuyển giao an toàn và đúng đắn của thông điệp. Chuyển mã hóa 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 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à thân nhân

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

nơi Transfer-Encoding có thể là "chửi rủa" có nghĩa là làm thế nào để chuyển tin nhắn, và Content-Encoding có thể là "gzip" mà viết tắt của cách nén đối tượng.

+0

Wow, cảm ơn vì đã làm rõ mối quan hệ "toàn bộ" giữa thực thể và thông điệp! Phần còn lại kinda 'thêm vào sự nhầm lẫn, nhưng tổng thể, vẫn còn giá trị một upvote. Chúc mừng! –

2

Như đã nói trong nhận xét của @ hawkeye-parker, có vẻ như Thực thể đã không còn được dùng nữa. Tạo một search in this 2014 rfc 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, nhưng cũng là khách hàng JaxRS, có phương thức setEntity()getEntity().

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 đó.

+0

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

2

HTTP là Giao thức được quan sát khi truy cập thông tin 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ột máy chủ.

Khi bạn yêu cầu thông tin từ người A đến người B, bạn cho anh ta một tin nhắn. (Yêu cầu). Người B trả lời bạn (Phản hồi). 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 điều gì đó, thay vì yêu cầu thông tin. Nói, 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, Person A chuyển tập tin đó (HTTP Entity) tới Person B và yêu cầu anh ta làm điều gì đó (HTTP Message). Trong trường hợp này, Person đang truyền một "Entity". Trong bối cảnh của thực thể HTTP, nó là một trọng tải gắn liền với thông báo.

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

0

Trong số các câu trả lời tốt mà chúng ta có ở đây, tôi tin rằng rất đáng để đề cập đến một cái gì đó mà đến trực tiếp từ RFC 2616 (Hypertext Transfer Protocol - HTTP/1.1):

Entity

Yêu cầu và đáp ứng các thông điệp được chuyển nhượng một thực thể nếu không khác 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 thực thể, mặc dù một số câu trả lời sẽ chỉ bao gồm các tiêu đề thực thể.

Trong một Tóm lại: một Entity 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ự giam mình khi đưa ra nhận xét bổ sung.