当前位置: 首页 > 知识库问答 >
问题:

获取http请求的响应而不包含内容长度?

姜鸿
2023-03-14

我有一个小程序发送http请求并用TCP协议得到响应。

我的请求格式;

GET / HTTP/1.0
Host: somewebsite.com
{two new line}

我从套接字逐行读取响应(在c#中使用NetworkStream和StreamReader),直到找到内容长度的标头。我存储长度,然后继续读取,直到找到空行。然后创建一个带有长度的缓冲区并接收其余的响应。

但有些响应没有内容长度标题。所以我的方法失败了。如果我不知道应该接收多少字节,我应该何时停止?

共有2个答案

拓拔飞飙
2023-03-14

请参阅HTTP规范的相关部分。在您的特定情况下,如果服务器没有返回内容长度,则必须在完成响应后关闭流。没有其他可靠的方式让你(作为客户)知道。无论HTTP版本如何@Julian分块编码确实是HTTP/1.1中的一个聪明的升级,但它非常特定于流,没有理由让“普通”Web服务器实现它。这是一个在启动响应之前知道内容长度的服务器。我猜OP没有控制服务器,否则他不会反对丢失HTTP头。

但是,即使您得到了内容长度标题,也不能毫无保留地信任它。服务器实现者也只是容易犯错的人。将其视为“最可能的”响应,初始值为可调整大小的缓冲区。你仍然必须准备好处理更少和更多(更糟糕的情况)。

郎宣
2023-03-14

在HTTP/1.0中,无内容长度的服务器响应是流关闭时的响应

在HTTP/1.1中,无内容长度的服务器响应是指对响应进行分块编码时

 类似资料:
  • 本文向大家介绍Ajax获取响应内容长度的方法,包括了Ajax获取响应内容长度的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Ajax获取响应内容长度的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的Ajax程序设计有所帮助。

  • 如何以编程方式获取包含变量值的邮递员请求的内容长度? 我需要在PUT请求中包含content-length头,我正在将其放在Postman中。我可以在预请求脚本中获得请求内容长度,但是,根据邮递员脚本文档,预请求脚本是在生成请求(或仅发送请求)之前(duh)获得内容长度。这对于我的场景是有问题的,因为我需要在为请求填充变量值之后的内容长度。

  • 我正在为授权服务器编写一个测试,测试oauth响应的内容类型是JSON。授权服务器使用的是< code > spring-security-oauth 2 2 . 0 . 1 . 4 . release ,我的JUnit测试使用的是< code >放心2.9.0。 当我运行这个测试时,我遇到了这个失败。 因此,<code>org.apache.http.entity的值。ContentType</

  • 问题内容: 因此,我有一个简单的客户端应用程序与node.js中的服务器端应用程序进行通信。在客户端,我有以下代码: 奇怪的是,如果我不通过以下方式包含“数据”事件: 响应的“结束”事件永远不会触发。 服务器代码如下: 我想知道当文档(据我所知)不需要您监听数据事件以关闭响应会话时为什么会发生这种情况。 问题答案: 该只调用时所有的数据被消耗,检查下面的参考: 事件:“结束” 当不再提供任何数据时

  • 我试图计算http post请求的请求体的内容长度,但我不断得到错误,表明内容长度错误。请求正文如下所示: 我尝试了两种解决方案,比如将正文的内容连接成一个字符串,比如following,然后将其转换成字节数组并发送其长度,但没有成功。 帖子请求正文是x-wow-form-urlencoded格式,内容长度必须正确计算。任何帮助都很感激,谢谢。

  • 问题内容: 我试图一起使用以发出POST请求。到目前为止,我的代码: 它工作正常,但是,当发生HTTP错误时,会发出警告: 并返回false。有没有办法: 禁止显示警告(如果发生故障,我打算抛出自己的异常) 从流中获取错误信息(至少是响应代码) 问题答案: http://php.net/manual/en/reserved.variables.httpresponseheader.php