什么是HTTP实体?

什么是HTTP实体?,http,httpclient,Http,Httpclient,有人能给我描述一下HTTP实体到底是什么吗 我正在阅读HTTPClient文档,但我真的不明白这意味着什么?我猜HTTPClient是根据HTTP命名的。实体类似于消息,它由标头组成,其中包含位置、语言、编码等元数据 以及可选的主体-it内容按照标题中的规定格式化等。它是一个表示请求或响应的抽象有效负载。其目的和各种实体类型都很清楚。An是HTTP请求或响应的主要部分,由和主体(如果存在)组成。它似乎是整个请求或响应,没有请求或状态行(尽管只是) 举例说明;这里有一个请求: POST/foo H

有人能给我描述一下HTTP实体到底是什么吗


我正在阅读HTTPClient文档,但我真的不明白这意味着什么?

我猜HTTPClient是根据HTTP命名的。

实体类似于消息,它由标头组成,其中包含位置、语言、编码等元数据


以及可选的主体-it内容按照标题中的规定格式化等。它是一个表示请求或响应的抽象有效负载。其目的和各种实体类型都很清楚。

An是HTTP请求或响应的主要部分,由和主体(如果存在)组成。它似乎是整个请求或响应,没有请求或状态行(尽管只是)

举例说明;这里有一个请求:

POST/foo HTTP/1.1#不是实体的一部分。
内容类型:文本/纯文本┬ 实体是从这一行开始的。。。
内容长度:1234#│
# │
你好,世界┘
以及回应:

HTTP/1.1 200 OK#不是实体的一部分。
内容长度:438#┬ 实体是从这一行开始的。。。
内容类型:文本/纯文本│
# │
回应机构…#┘

以下是3个简单的例子:

案例1。您在一个请求中上载了3个文件。这3个文件是3个实体。每个文件都有自己的
内容类型
,以指示文件的类型

案例2。您正在查看一个网页。浏览器在后台下载了一个html文件作为实体。由于页面可以不断更新,以后可能会得到一个完全不同的实体

案例3。您有一个未修改的
304
。未转让任何实体

总之,实体是http消息(请求或响应)中的可选负载,因此它是实体和消息之间的“部分-整体”关系

一些头字段适用于
消息
,如
传输编码
描述了如何在中介之间传输消息,因此可以由任何应用程序沿请求/响应链添加或删除(
逐跳头
)。相比之下,那些应用于
实体的头字段是一些属性,它们描述实体的大小、类型、压缩算法等

进一步阅读,引用RFC 2616第1.4、4.5和4.3节:

  • 请求/响应链
请求链----------------------------------------->
UA---v---A---v---B---v---C---v---O

正如@hawkeye parker在评论中所说,该实体似乎已被弃用。做一个示例,您将看到关于XML实体和消息体的内容,但不会看到关于Http实体的内容

尽管如此,HttpClient和JaxRS客户端都有一个
setEntity()
getEntity()
方法


考虑到公认的答案,这两个库都是错误的
HttpClient.setEntity()
不会删除以前设置的头

HTTP是通过网络从远程机器访问信息时遵守的协议。通常网络是internet,远程机器是服务器

当你向人B询问信息时,你给了他一个信息。(请求)。B个人回复你(回复)。请求和响应是HTTP消息类型

人A可以要求人B做某事,而不是询问信息。例如,人员A希望人员B将文件存储在安全位置。因此,人员A将该文件(HTTP实体)传递给人员B,并要求其执行某些操作(HTTP消息)。在这种情况下,此人正在传递一个“实体”。在HTTP实体的上下文中,它是附加在消息上的有效负载


希望这个类比能有所帮助。

在我们这里的好答案中,我认为值得一提的是直接来自以下方面的东西:

实体

请求和响应消息可能会传输实体,除非另有规定 受请求方法或响应状态代码的限制实体 由实体标题字段和实体正文组成,虽然有些 响应将仅包括实体标题

简而言之:一个实体可以被转移,它可以是页眉+正文,也可以只是页眉


由于上面有链接,我保留了我自己的评论。

HttpEntity
是您将在请求中传递的内容(带有标题)和您在响应中得到的内容。 对于Get请求,我们将传递简单字符串

HttpHeaders=newhttpheaders();
setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
HttpEntity=新的HttpEntity(标题);
对于Post,我们将通过完整的实体类

公共字符串createProducts(@RequestBody-Product){
HttpHeaders=新的HttpHeaders();
setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
HttpEntity=新的HttpEntity(产品、标题);
返回restemplate.exchange(
"http://localhost:8080/products,HttpMethod.POST,实体,String.class
).getBody();
}

最新的HTTP 1.1 RFC 7230使用了术语有效负载而不是实体。一些旧文档仍然引用旧术语

关于实体(有效负载),需要记住的重要实际事项是:

如果传输编码不存在,则消息正文=实体(有效负载)正文


如果存在传输编码,则必须通过应用正确的解码和提取来获取实体(有效负载)正文。

主机不是实体标题字段。我以为实体使用的是
&而不是
&
。那不是一个实体吗?有什么区别?@Imray:
&     request chain -------------------------------------->
   UA -----v----- A -----v----- B -----v----- C -----v----- O
      <------------------------------------- response chain