【问题标题】:How do i send a POST request without Transfer Encoding:chunked from Jersey ReST Client 2.22.2如何在没有传输编码的情况下发送 POST 请求:从 Jersey ReST Client 2.22.2 分块
【发布时间】:2016-11-08 03:05:26
【问题描述】:

当我通过 Jersey ReST 客户端发送 POST 请求时,它会自动使用 Header transfer-encoding: [chunked]

有没有办法强制使用 content-length: 而不是传输编码?

  WebTarget webTarget = client.target(connection.getServerUrl());
  Invocation.Builder builder = webTarget.request(MediaType.APPLICATION_XML);
  Response response = builder.post(Entity.xml(requestBroker));

添加 Content-Length 属性后,行为相同

  WebTarget webTarget = client.target(connection.getServerUrl());
  Invocation.Builder builder = webTarget.request(MediaType.APPLICATION_XML);
  Entity entity = Entity.xml(requestBroker);
  client.property("Content-Length", entity.toString().getBytes().length);
  Response response = builder.post(Entity.xml(requestBroker));

【问题讨论】:

    标签: rest http-headers jersey-2.0 jersey-client http-1.1


    【解决方案1】:

    HTTP 1.1 版本以后的分块传输编码是 POST 的默认设置,在此数据中作为块发送,因此发送者可以在知道内容的总大小之前开始传输动态生成的内容。每个块的大小在块本身之前发送,以便接收者可以知道它何时完成接收该块的数据。数据传输由长度为零的最终块终止。

    有没有办法强制使用 content-length: 而不是 传输编码

    在发送 POST 请求之前设置 Content-Length 标头。但这仅适用于http 1.0,并且当您设置内容长度时,如果post请求数据大小大于内容长度,则接收到的数据将被截断。

    在 HTTP 协议的 1.1 版本中,分块传输机制被认为是始终并且无论如何都可以接受,即使未在 TE(传输编码)请求头字段中列出,并且在使用时对于其他传输机制,应始终最后应用于传输的数据,并且永远不会超过一次。来源维基百科 - Chunked Transfer Encoding


    而在响应中,我们可以通过使用 response.setBufferSize() 设置响应上的 BufferSize 来避免传输编码。但是,如果我们的响应大小超出了 bufferSize,它将回退到 Transfer-Encoding: Chunked。


    Different Transfer Mechanisms

    更多信息:

    Content-Length header versus chunked encoding

    Remove Transfer-Encoding:chunked in the POST request?

    avoiding chunked encoding of HTTP/1.1 response

    希望对你有帮助!

    【讨论】:

    • @Amarnath 即使在添加了 Content-Length 标头之后也选择了分块传输编码。
    • @Amarnath - 感谢您的回复,我面临的问题是在请求方面。
    • @Rohit - 添加了更多信息,希望您现在得到澄清。
    • @Amarnath ** 与其他传输机制一起使用时,应始终最后应用于传输的数据,并且不能超过一次**,请您详细说明这一行。
    • @Rohit - 添加了更多信息 :-)
    猜你喜欢
    • 2013-05-08
    • 2017-09-15
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    相关资源
    最近更新 更多