MSDN上说:When SendChunked is true, the request sends data to the Internet resource in segments. The Internet resource must support receiving chunked data.

传统的send request的方式是在request的header头添加ContentLength,然后把内容写在request的body中写入要发送的内容。而如果用了SendChunked的之后,就不用在header中规定ContentLength了。

往更深层次里说,其实SendChunked模式是在客户端和服务器端建立了一个管道,字节流(其实是segment)通过这个管道发送到服务端。

最近有幸同时接触到服务端和客户端,对这个有了更具体的了解,尤其在代码层面上:

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
// http://www.cnblogs.com/AllanDragoon/p/3323370.html
request.KeepAlive = false;
request.ServicePoint.Expect100Continue = false;
request.AllowWriteStreamBuffering = false;

// Turn on support for GZipped response
request.AutomaticDecompression = DecompressionMethods.GZip;
// Request content type
request.ContentType = "application/octetstream";
// Request accept type
request.Accept = "application/xml";
// Set method
request.Method = method;
// 设置SendChunked为true而不必设ContentLength, 反之亦然
request.SendChunked = true;

using (var requestStream = request.GetRequestStream())
{
StreamUtil.CopyStream(stream, requestStream);
}

using (var response = request.GetResponse())
{

}

通过同时调试客户端和服务端代码,我发现,如果设SendChunked为true,那么当调用request.GetRequestStream的时候,客户端会和服务端通信(我想可能是客户端需呀和服务端建立管道连接);如果为false,则不会和服务端通信。

目前我还不知道如何在服务器端实现支持SendChunked。至少明白了当调用request.GetRequestStream的时候,客户端会和服务端通信。

HttpWebRequest中的SendChunked的更多相关文章

  1. 在C#用HttpWebRequest中发送GET/HTTP/HTTPS请求

    通用辅助类  下面是我编写的一个辅助类,在这个类中采用了HttpWebRequest中发送GET/HTTP/HTTPS请求,因为有的时候需 要获取认证信息(如Cookie),所以返回的是HttpWeb ...

  2. (转) 在C#用HttpWebRequest中发送GET/HTTP/HTTPS请求

    转自:http://blog.csdn.net/zhoufoxcn/article/details/6404236 通用辅助类 下面是我编写的一个辅助类,在这个类中采用了HttpWebRequest中 ...

  3. 【转】在C#用HttpWebRequest中发送GET/HTTP/HTTPS请求

    http://zhoufoxcn.blog.51cto.com/792419/561934 这个需求来自于我最近练手的一个项目,在项目中我需要将一些自己发表的和收藏整理的网文集中到一个地方存放,如果全 ...

  4. 在C#用HttpWebRequest中发送GET/HTTP/HTTPS请求【转载】

    标签:C# HTTPS HttpWebRequest HTTP HttpWebResponse 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任. ...

  5. C#中用HttpWebRequest中发送GET/HTTP/HTTPS请求 (转载)

    这个需求来自于我最近练手的一个项目,在项目中我需要将一些自己发表的和收藏整理的网文集中到一个地方存放,如果全部采用手工操作工作量大而且繁琐,因此周公决定利用C#来实现.在很多地方都需要验证用户身份才可 ...

  6. 在C#用HttpWebRequest中发送GET/HTTP/HTTPS请求(转)

    通用辅助类 下面是我编写的一个辅助类,在这个类中采用了HttpWebRequest中发送GET/HTTP/HTTPS请求,因为有的时候需要获取认证信息(如Cookie),所以返回的是HttpWebRe ...

  7. C#中用HttpWebRequest中发送GET/HTTP/HTTPS请求

    C# HttpWebRequest GET HTTP HTTPS 请求  作者:周公(zhoufoxcn)    原文:http://blog.csdn.net/zhoufoxcn 这个需求来自于我最 ...

  8. HttpWebRequest中的KeepAlive

    一直不是非常理解.NET中HttpWebRequest的KeepAlive属性有何用处,看了这篇文章就清楚了! http://www.cnblogs.com/lwzz/archive/2011/08/ ...

  9. HttpWebRequest中GetResponse或者说GetRequestStream偶尔超时,或者是各种操作超时造成的假死的一些解决方案

    今天用了将近一天的时间来查找这个问题的存在,不停的百度查找原因测试原因,发现解决方案很是简单,不过最好还好哦啊都解决了,在这里纪录一下,希望可以帮到你们 payload = System.Text.E ...

随机推荐

  1. forward_list例子

    9.28 编写函数,接受一个forward_list<string>和两个string共三个参数.函数应在链表中查找第一个string,并将第二个string插入到紧接着第一个string ...

  2. [012]泛型--lambda表达式捕获

    lambda表达式的捕获跟参数差不多,可以是值或者引用. 1.值捕获 与传值参数类似,采用值捕获的前期是变量可以拷贝:与参数不通透的是:被捕获的变量的值是在lambda创建时拷贝,而不是调用时拷贝. ...

  3. 【转】如何在Mac上撰寫C++程式

    原文: http://www.macuknow.com/node/4901 本文使用的开发环境:Xcode 5.其实步骤很简单,只需要简单的几步就ok了. 點選Create a new Xcode p ...

  4. Understanding transient variables in Java and how they are practically used in HashMap---reference

    What is the significance of the transient keyword in Java? If you know the answer, good! you are a p ...

  5. 如何查找局域网的外网ip

    方法一:一个简单的方法 用你电脑打开www.ip138.com 就可以看到自己的公网IP地址 方法二:如果一定要从路由器里面看 那就打开路由的配置页面 一般在系统状态里面 会有个WAN口IP 那就是你 ...

  6. Maven项目中如何添加日志

  7. 线程本地变量ThreadLocal

    一.本地线程变量使用场景 并发应用的一个关键地方就是共享数据.如果你创建一个类对象,实现Runnable接口,然后多个Thread对象使用同样的Runnable对象,全部的线程都共享同样的属性.这意味 ...

  8. webbroswer 后台注入脚本 的方法

    HtmlElement script = webBrowser.Document.CreateElement("script"); script.SetAttribute(&quo ...

  9. sqlserver 2012 重启是 ID 自动增长 1000的问题

    1. Open "SQL Server Configuration Manager"2. Click "SQL Server Services" on the ...

  10. Sqlserver 快照

    最近,开发系统使用SqlServer2008 R2,但是由于系统数据压力的增加,准备增加一个和正式数据库同步的库,用来供接口和报表使用,所以开始对SqlServer里面的一些技术开始研究,第一篇先来研 ...