- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 System.Net.HttpWebRequest类来实现一个简单的 HTTP 下载器,可以暂停、取消甚至在取消后恢复(使用 HTTP Range 请求 header )。
很明显,HttpWebRequest.GetResponse()是HTTP请求真正发送到服务器的时候,当收到HTTP响应(或者发生超时)时该方法返回。但是,响应主体是用 Stream 表示的,这让我想知道响应主体是否实际上与响应 header 一起传输(即,当 GetResponse() 返回时它已经下载),或者它只是按需下载,当我尝试从响应流中读取?或者当我调用 HttpWebResponse.GetResponseStream() 方法时?
不幸的是,msdn 文档没有说明,而且我对 HTTP 协议(protocol)的了解还不够多,无法说明。
在这种情况下,分块传输等行为如何(也就是说,我应该如何在我的 C# 应用程序中处理它们)?响应数据实际上是什么时候从服务器下载的?
最佳答案
这一切都依赖于HTTP的底层协议(protocol)TCP。 TCP 的工作方式是数据分段发送。每当客户端向服务器发送一个段时,发送的数据中包含有关它准备好接收多少额外数据的信息。这通常对应于客户端的某种缓冲区。当客户端接收到一些数据时,它也会向服务器发送一个报文段,确认接收到的数据。
因此,假设客户端在处理接收到的数据时非常慢,事件的顺序可能是这样的:
这对于 GetResponse()
意味着什么?当您调用 GetResponse()
时,客户端发送请求,读取响应的 HTTP header (通常适合一个段,但也可能更多)并返回。此时,如果您不开始读取响应流(通过调用 GetResponseStream()
获得),则会收到来自服务器的一些数据,但只是为了填充缓冲区。当它已满时,在您开始读取响应流之前不会传输更多数据。
关于c# - HttpWebResponse.GetResponseStream() : when is the response body transmitted?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6641415/
A 有效 JSON 语法是这样的: { "username": "admin", "password": "123" } 但是,如果我想传输一组“用户”(给出示例)而不是单个“用户”怎么办?
我正在使用 System.Net.HttpWebRequest类来实现一个简单的 HTTP 下载器,可以暂停、取消甚至在取消后恢复(使用 HTTP Range 请求 header )。 很明显,Htt
我昨天将我的三星 Galaxy S4 从最新的 KitKat 升级到 Lollipop (5.0.1),我使用了几个月的红外遥控应用程序停止工作。 由于我使用的是 KitKat ConsumerIrM
我正在尝试使用 iOS BLE 设备作为 BLE 外围设备,它也在后台做广告。 我已经想出如何在后台做广告并让另一台寻找特定蓝牙 UUDID 的设备检测到它。 不幸的是,当应用程序处于后台时,不会传输
我正在尝试编写一个小型 Android 应用程序,该应用程序利用 Android 4.4 KitKat 中添加的新红外 API。 →Documentation 我遇到了麻烦,因为我的应用程序因无响应而
当我在 Camel 上下文组件中向其端点发送消息时,我必须等待带有确认的响应消息。如果在超时时间内没有收到响应,则会向camel路由抛出异常。 我尝试通过以下方式实现它:当原始消息发送到端点时,我使用
通过传输层传输用户凭证 (Active Directory) 的最佳/最简单方法是什么。 我有两个系统 A 和 B,它们与第 3 方消息层 C 相连。 有没有什么方法(在 .NET 中更可取)以某种方
我的问题比较难描述,所以我会着重说明情况。所以假设我有 2 个不同的实体,它们可能在不同的机器上运行。我们将第一个称为Manager,将第二个称为Generator。管理器是唯一可以通过用户调用的。
我正在尝试根据请求从服务器端发送文件到客户端。发送的文件是加密的,客户端需要解密它。加密过程工作正常,但在解密时我需要拥有使用序列化的 DerIOBuffer 对象等。我该怎么办..请帮忙 服务器:
我关注了this教程并设法让它在 10% 到 15% 的时间内正常工作。 这是我为客户端提供的 Main 方法,其中发生了异常: static void Main(string[] args)
我正在使用 boost 1.53 和序列化通过 TCP/IP 传输 520 个 float 的数组。我放了一个调试代码打印输出来查看要发送的数据量:大约 5 K。这里对我来说没问题,但这个值在某种程度
我正在开发一个 Android 项目,在该项目中我从我们的服务器加载图像,同时加载有关餐馆的其他信息。问题是,加载需要花费大量时间,每当我尝试再次加载信息或将手机从横向移动到纵向或反之时,我都会遇到内
我正在为一个 Mac 应用程序开发 UI,尝试了很多改进 UI,但我无法让它像预期的那样流畅,:D。我想构建一个流畅的 UI,例如 Transmit 应用。 我还在所有 View 上启用了核心动画,但
有人尝试过新的 Firebase 崩溃报告吗? 创建崩溃后我遇到了以下错误 Firebase Crash Reporting: Failed to transmit crash: Error Doma
“AAaarg”!请帮忙!!! 这是我正在尝试做的... 我有一个 Django 站点 site1,它需要访问另一个服务 site2 的 API。然而,为了做到这一点,site1 需要使用它自己的登录
给定一个由边容量为 c_e 的节点组成的二叉树网络。叶节点处有数据,每个节点的数据大小为s_v。 L_e 是边 e 下面的子树中所有叶子的集合。我们的目标是找到叶子的子集 S,使得传输到根 r 的数据
我正在 BeagleBoneBlack 上开发应用程序。嵌入式 linux 对我来说很新 =/ 我面临的问题是,我想实现一个RS485通讯,我使用 SeriaLib-Library 编写了一段 C++
我正在开发监视 CLBeaconRegion 并在用户进入/退出区域时向用户显示本地通知的应用程序。一切正常,但在测试时我发现如果我进入区域,收到 locationManager:didEnterRe
我有一个 ubuntu aws ec2。我可以使用 os X 终端传输文件 sudo scp -i /my-key.pem /path/to/local/file username@hostname
对于 ACR122U,我知道您可以使用直接传输命令将直接消息传输到 NFC Controller (PN532):0xff 0x00 0x00 0x00...。 我看ACR1251U的手册说:读卡器的
我是一名优秀的程序员,十分优秀!