HTTP 响应何时完成?

2024-02-10

我正在 .NET 中编写一个简单的 HTTP 客户端用于学习目的。我正在使用.NETSocket http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.aspx类,最终使用Winsock http://en.wikipedia.org/wiki/Winsock。我不想使用网络请求 http://msdn.microsoft.com/en-us/library/system.net.webrequest.aspx, HttpWeb请求 http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.aspx, or Http客户端 http://msdn.microsoft.com/en-us/library/system.net.http.httpclient.aspx类,因为他们使用WinINet http://msdn.microsoft.com/en-us/library/windows/desktop/aa383630.aspx,我不想使用它,因为我这样做是为了我自己对 HTTP 工作原理的理解。

我想知道如何确定 HTTP 响应何时完成。通过阅读 HTTP/1.1 规范(RFC 2616 http://www.ietf.org/rfc/rfc2616.txt),我认为下面的伪代码是如何确定HTTP响应何时完成。

parse HTTP headers
if parse not successful:
    throw error
if HTTP version is 1.1 and Transfer-encoding is chunked:
    parse first line of each chunk as an ASCII hexadecimal, the chunk size
    if parse not successful:
        throw error
    read each chunk until chunk size 0
else if Content-Length is specified:
    read Content-Length number of bytes
else:
    throw error

这是一个或多或少正确的方法吗?


您的理解大部分是正确的,根据以下内容进行了一些细微的更正RFC 2616 第 4.4 节 https://www.rfc-editor.org/rfc/rfc2616#section-4.4:

Read and parse HTTP headers
if not successful:
    throw error
if response can contain message body:
    if HTTP version is 1.1+ and Transfer-encoding is not identity:
        while true:
            read line, extract delimited ASCII hexadecimal, the chunk size
            if not successful:
                throw error
             if chunk size is 0:
                break while loop
             read chunk size number of bytes
        read and parse trailing HTTP headers
    else if Content-Length is specified:
        read Content-Length number of bytes
    else if Content-Type is "multipart/byteranges":
        read and parse MIME-encoded chunks until terminating MIME boundary is reached
    else:
        read until connection is closed
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HTTP 响应何时完成? 的相关文章

  • 由于索引无效,无法加载计数器名称数据 -Exception

    我使用 C 和 WPF 操作系统是 windows 7 Professional 和 Visual Studio 2012 SQL Server 2012 我在wpf中使用了Devexpress Grid 我想使用 ADO Net 服务器模
  • 以编程方式设置 maxRequestLength

    有一个配置值叫做maxRequestLength 在配置文件中 它看起来像这样
  • 在 SQL 2005+ 中,CLR 存储过程是否优于 TSQL 存储过程?

    我目前的观点是否定的 更喜欢 Transact SQL 存储过程 因为它们是重量更轻且 可能 性能更高的选项 而 CLR 过程允许开发人员进行各种恶作剧 然而最近我需要调试一些写得非常糟糕的 TSQL 存储过程 像往常一样 我发现许多问题是
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • 浏览器显示 clojure 环中不存在 access-control-allow-origin 标头

    我通过客户端浏览器向服务器发出请求 如下所示https example com bar https example com bar 但出现错误 Access to XMLHttpRequest at https example com ba
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • 收到“路径‘OPTIONS’被禁止”。 ASP.NET网站异常

    我收到错误System Web HttpException Path OPTIONS is forbidden 自从我们将网站转移到新的服务器设置以来 我无法重新创建该错误 但我每天至少会收到几次有关此异常的电子邮件 有什么想法可能导致此问
  • 使用“Openxml writer”合并 Excel 中的单元格

    我想合并单元格是excel 通过使用 DOM 方法 我可以轻松做到这一点 但由于我的 Excel 文件太大 当我尝试获取工作表时 它会抛出内存不足异常 所以我必须使用SAX方法来读取excel文件 但我不知道如何用这种方法合并单元格 查了很
  • XNA 窗口调整大小调用 LoadContent

    每当我将 XNA 窗口大小调整到尽可能小的分辨率 0 像素高 时 程序都会再次开始调用 LoadContent 这会导致我的应用程序崩溃 因为我只希望它加载内容一次 我能做什么 有没有办法阻止用户过度调整窗口大小 例如 Java 中的 se
  • ASP.NET Core 应用程序生命周期

    目前是否有关于生命周期的 ASP NET Core 文档 我希望能够在正确的点融入生命周期 它与现有的 ASP NET MVC 5 生命周期相似吗 http www asp azureedge net v 2016 09 01 001 me
  • .Net Standard项目,如何使用System.ServiceModel类

    我已将 PCL 项目转换为 Net Standard 1 5 项目 我已经从 nuget 安装了 System ServiceModel 包 但找不到使用 System ServiceModel 命名空间的方法 任何帮助表示赞赏 安装 Sy
  • .NET - MVC 应用程序外部的 Razor - 删除 @inherits 和提供 @model 时出现问题

    抱歉问了这么长的问题 我把它分成了三个问题 可以分别阅读 如果你能帮我解决一个问题 请帮我 我有一个 Razor 引擎的自定义实现 所有作品和模板均已编译并可以使用 手头有一些实现涉及具有通用的基类Model允许强类型视图 模板 的属性 此
  • 如何使用c#/VB.NET在word中插入书签

    我正在尝试使用 C 在 Word 文档中添加书签 但它不起作用 而且我在 msdn 文档和互联网上都找不到任何帮助 这就是我正在尝试做的事情 我正在阅读 Word 文档 然后在该文档中搜索关键字 然后将该文本转换为超链接 效果很好 现在 我
  • 如何防止打印屏幕

    我有一个要求 我正在开发的应用程序阻止用户轻松捕获屏幕内容 我已经表示 没有可行的方法可以完全防止这种情况发生 但我正在寻找方法来为这一过程引入一些障碍 我正在使用 C NET 2 0 和 WinForms 你不能 您能做的最好的事情就是在
  • SolrNet:尝试添加和提交时 SolrConnectionException (400) 错误请求

    我已经到了 SolrNet 执行 Add 方法的地步 但是当我尝试 Commit 时 我收到了错误 以下是我的 schema xml 模型 调用它的代码以及我得到的错误 更奇怪的是 尽管出现错误 但在我重新启动 Tomcat 后 该模型仍会
  • DI Control-Freak 反模式:难以理解

    我正在阅读 Mark Seemann 写的 NET 中的依赖注入 但我无论如何也无法理解这一点 虽然new当涉及到 VOLATILE 时 关键字是一种代码味道 依赖性 您无需担心将其用于稳定 依赖性 这new一般来说 关键字不会突然变得 非
  • 寻找自定义 SynchronizationContext 的示例(单元测试所需)

    我需要定制同步上下文 http msdn microsoft com en us library system threading synchronizationcontext aspx that 拥有一个运行 Posts 和 Sends
  • 如何在android中创建nanohttpd服务器?

    其实我也查过一些问题 然后去github上找了一下 但我是新来的 我无法理解这个例子 我想在android中创建http服务器 这样我就可以在PC浏览器中访问它 我有一个类扩展 nanohttpd 的实例 但服务器无法工作 不知道为什么 我
  • 对于一般不成功的请求(不是错误),适当的 HTTP 状态代码响应是什么?

    我正在创建一个 RESTful API 它将处理许多用户交互 包括使用存储的信用卡下订单 如果订单成功 我将返回 200 OK 如果订单请求格式错误或无效 我将返回 400 Bad Request 但如果订单实际处理过程中出现问题 我该怎么
  • List 与 IEnumerable 的协变和逆变

    所以 假设我有 Public Interface ISomeInterface End Interface Public Class SomeClass Implements ISomeInterface End Class 如果我有MyL

随机推荐

  • 如何在DNN中获取父页面的名称和链接

    我希望子页面上有一个链接 它不仅是父页面的名称 而且还链接到 DNN 中的父页面 在你的皮肤 ascx 文件中使用它 a href a 注意 这是针对 C 皮肤的
  • 在 Windows Phone 7 开发中使用 SQLite

    我是 Windows Phone 7 开发的新手 我使用 SQLite 作为数据库 那么任何人都可以帮助我了解如何使用它吗 如果您有任何有关此问题的帮助链接或论坛 请帮助我 我已经搜索了两天了 但我没有得到我想要的东西 Thanks 您是否
  • Proguard 重复的 Zip 条目

    我试图通过 Proguard 运行我的 Android 应用程序 但是这个不断出现 Warning Exception while processing task java io IOException Can t write C User
  • 在 Rails 的会话中存储对象

    我一直被教导在会话中存储对象是一个坏主意 相反 应该存储 ID 以便在需要时检索记录 但是 我有一个应用程序 我想知道它是否是该规则的例外 我正在构建一个抽认卡应用程序 被测验的单词位于数据库中的一个表中 其架构不会更改 我想存储当前在会话
  • 捕获承诺中的拒绝

    我想保留错误func reject 不直接到onError 通过选择 在我总是让func resolve 并确定后的返回结果yield func 如果我想直接前往onError use throw 想知道有什么更好的主意我可以让func r
  • RedirectToAction 到另一个控制器中的操作不起作用

    在我的 mvc3 POST ActionResult 方法中 我有一部分如下代码 if button Save as Pdf RedirectToAction getPdf Pdf resultObtained 当用户单击按钮时 它会将用户
  • Python配置文件:有什么文件格式推荐吗? INI格式还合适吗?看起来很老派

    我需要存储 Python 应用程序的配置 键 值 并且我正在寻找将这些配置存储在文件中的最佳方法 我遇到了Python的配置解析器 http docs python org library configparser html我想知道 INI
  • 使用 rspec 调用特定 url

    我想在 rspec 中创建一个 get 请求 get exec query gt bla id gt something user id gt user 这会构建一个类似以下的 URL user query something exec q
  • 在静默模式下安装 sqlcmd 接受 EULA

    我正在尝试以静默模式安装 sqlcmd 但我不知道如何自动接受 EULA 我尝试安装的文件名为 MsSqlCmdLnUtils msi 从 MS 下载中心下载 这是我到目前为止所尝试过的 通过谷歌找到 msiexec i MsSqlCmdL
  • 隐藏部分溢出的元素

    我正在寻找一种纯 CSS 方法来隐藏已部分溢出其容器的 div 3 请参阅附图 这是一个可行的解决方案 它将完全隐藏不适合其父级固定高度的项目 Codepen https codepen io PhilippeVay pen JyBQOy
  • 用模型方法查询?

    我在仅对活动对象执行查询时遇到问题 我在数据库中没有活动列 相反 在模型游戏上 我有以下方法 def complete self winner true false end 这样如果一场比赛有赢家 complete 将返回 true 我想查
  • 微服务异步操作HTTP响应

    我们正在构建一个微服务应用程序 客户可以在其中创建projects 下图展示了该过程的技术流程 我的问题 API 网关应向客户端返回什么 HTTP 响应 步骤 1 我最初的想法是返回 202 但问题是我不知道Location yet pro
  • SQL - 两个相互依赖的外键

    目前的结构如下 Table RowType RowTypeID Table RowSubType RowSubTypeID FK RowTypeID Table ColumnDef FK RowTypeID FK RowSubTypeID
  • 使用 otool(递归)查找应用程序所需的共享库

    我有一个 Cocoa 应用程序 它使用 otool 来查找应用程序正常运行所需的共享库 例如 假设我在使用 QTKit framework 的应用程序上运行 otool L 我得到了程序使用的共享库的列表 包括 Cocoa framewor
  • 无法加载文件或程序集“Microsoft.Web.Deployment,版本=9.0.0.0”

    我有 VS 2013 Ultimate 我的远程服务器是 IIS 7 5 并启用了远程部署 我已通过 Web Platform Installer 4 6 安装了 Web Deploy Tool 2 1 并且安装成功 当我尝试在发布工具上验
  • 如何告诉 DBD::mysql mysql.sock 在哪里?

    将 DBD mysql 与 DBI 一起使用 尝试连接到数据库时出现以下错误 DBI connect database mydb host localhost someuser failed Can t connect to local M
  • pyqtSlot 的功能[重复]

    这个问题在这里已经有答案了 我刚刚阅读了有关 pyqt5 按钮的教程here https pythonspot com en pyqt5 buttons 代码如下 有一个问题是关于button clicked connect self on
  • Grails - 跨控制器代码,在每个请求上执行

    有没有办法在调用任何控制器操作之前执行某些代码 我需要根据获取参数的值设置会话变量 而不考虑调用哪个控制器 当然 一旦完成此处理 请求需要按照其正常方式到达相应的控制器 操作 Thanks 听起来你想使用filter http grails
  • 树的等级是多少? (如树ADT)[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 据我所知 一个节点的度数是它拥有的子节点的数量 但是 我们如何定义树的度呢 基本上 树的度是它的子节点的总数 即源自它的节点的总数 树的叶
  • HTTP 响应何时完成?

    我正在 NET 中编写一个简单的 HTTP 客户端用于学习目的 我正在使用 NETSocket http msdn microsoft com en us library system net sockets socket aspx类 最终