`
yangchildren
  • 浏览: 7243 次
社区版块
存档分类
最新评论

《HTTP权威指南》-第4章 连接管理

阅读更多

《HTTP权威指南》-第4章 连接管理

 


4.1 TCP连接

4.1.1 TCP的可靠数据管道



 

4.1.2 TCP流是分段的、由IP分组传送



 

4.1.3 保持TCP连接的正确运行

承载TCP 段的IP 分组,它承戴了TCP 数据流中的小块数据: 


 

4.1.4 用TCP套接字编程




 
 

TCP 客户端和服务器是如何通过TCP 套接字接口进行通信的 


 

4.2 对TCP性能的考虑

4.2.1 HTTP事务的时延



 

4.2.2 性能聚焦区域

  • TCP 连接建立握手;
  • TCP 慢启动拥塞控制;
  • 数据聚集的Nagle 算法;
  • 用于捎带确认的TCP 延迟确认算法,TIME_WAIT 时延和端口耗尽。

4.2.3 TCP连接的握手时延

4.2.4 延迟确认

延迟确认算越会在一个特定的窗口时间(通常是1 00 ~ 200 毫秒) 内将输出确认存放在缓冲区中,以寻找能够捎带它的输出数据分组。如果在那 
个时间段内没有输出数据分组, 就将确认信息放在单独的分组中传送。

4.2.5 TCP慢启动

4.2.6 Nagle算法与TCP_NODELAY

HTTP 应用程序常常会在自己的枝中设置参数TCP_NODELA Y ,禁用Nagle 算法, 
提高性能。如果要这么傲的话, 一定要确保会向TCP 写入大块的数据,这样就不会产生一堆小分组了。

4.2.7 TIME_WAIT累积与端口耗尽

4.3 HTTP连接的处理

4.3.1 常被误解的connection首部

connection 首部可以承载3 种不同类型的标签,因此有时会很令人费解:

  • HTTP 首部字段名,列 出了只与此连接有关的首。
  • 任意标签值,用于描述此连接的非标准选项。
  • 值close ,说明操作完成之后需关闭这条持久连接。 


     

HTTP 应用程序收到一条带有Connection 首部的报文肘,接收端会解析发送端请求的所有选项,并将其应用。然后会在将此报文转发给下一跳地址之前,删除connection 首部以及 Connection 中列出的所有首部。而且,可能还会有少量没有作为connection 首都值列出,但一定不能被代理转发的逐跳首部。其中包括Prxoy- Authenticate 、Proxy- Connection、Transfer-Encoding 和Upgrade.

4.3 .2 串行事务处理时延

4个事务串行: 


 

  • 并行连接 
    通过多条TCP 连接发起并发的HTTP 请求。
  • 持久连接 
    重用TCP 连接, 以消除连接及关闭时延。
  • 管道化连接 
    通过共享的TCP 连接发起并发的HTTP 请求。

4.4 并行连接



 

4.4.1 并行连接可能会提高页面的加载速度

4.4.2 并行连接不一定更快

浏览器确实使用了并行连接,但它们会将并行连接的总数限制为一个较小的值(通常是4 个) 。服务器可以随意关闭来自特定客户端的超量连接。

4.4.3 并行连接可能让人“感觉”更快一些

4.5 持久连接

4.5.1 持久以及并行连接

4.5.2 HTTP/1.0+ keep-alive连接

4.5.3 Keep - Alive操作

实现HTTP/1 .0 keep-alive 连接的客户端可以通过包含connecti。n: Keep-Alive 首部请求将一条连接保持在打开状态。 
如果晌应中没有c。nnection: Keep-Alive 首部,客户端就认为服务器不支持keep-alive ,会在发回响应报文之后关闭连接。 

4.5.5 Keep - Alive选项

  • 参数timeout 是在Keep - Alive 响应首部发迭的。它估计了服务器希望将连接保持在活跃状态的时间。这并不是一个承诺值。
  • 参数max 是在Keep - Alive 响应首部发迭的。它估计了服务器还希望为多少个事务保持此连接的活跃状态。这并不是一个承诺值。
  • Keep-Alive 首部还可支持任意未经处理的属性,这些属性主要用于诊断和调试。语法为name [=value ]。

4.5.5 Keep-Alive 连接的限制和规则

4 .5.6 Keep-Alive和哑代理

  1. Connection首部和盲中继 
    问题出在代理上一一尤其是那些不理解c。nnection 首部,而且不知道在沿着转发链路将其发迭出去之前,应该将该首部删除的代理。很多老的或简单的代理都是盲中继( blind relay),它们只是将字节从一个连接转发到另一个连接中去,不对Connection 首部进行特殊的处理。 

  2. 代理和逐跳首部 
    为避免此类代理通信问题的发生,现代的代理都绝不能转发Connection 首部 
    和所有名字出现在connection 值中的首部。因此,如果一个代理收到了一个 
    connection: Keep-Alive 首部,是不应该转发Connection 首部,或所有名为 
    Keep-Alive 的首部的。 
    另外,还有几个不能作为Connection 首部值列出,也不能被代理转发或作为缓存响应使用的首部。其中包括Proxy - Authenticate 、Proxy - Connection 、Transfer - Encoding 和Upgrade。

4.5.7 插入Proxy-Connection

在网景的变通做法是,浏览器会向代理发送非标准的Proxy-connection 扩展首部, 而不是官方支持的著名的connection 首部。如果代理是盲中继,它会将无意义的Proxy-Connection 首部转发给Web 服务器,服务器会忽略此首部,不会带来任何问题。但如果代理是个聪明的代理(能够理解持久连接的握手动作),就用一个connect ion 首部取代无意义的Proxy-Connection 首部,然后将其发送给服务器,以收到预期的效果。 

4.5.8 HTTP/1.1 持久连接

HTTP/1.1 逐渐停止了对keep-alive 连接的支持,用一种名为持久连接( persistent connection )的改进型设计取代了它。 
与HTTP/1.0+的keep-alive 连接不同, HTTP/1.1 持久连接在默认情况下是激活 
的。除非特别指明,否则HTTP/1.1 假定所有连接都是持久的。要在事务处理结束之后将连接关闭, HTTP/1.1 应用程序必须向报文中显式地添加一个Connection: close 首部。

4.5.9 持久连接的限制和规则

4.6 管道化连接

HTTP/1.1 允许在持久连接上可远地使用请求管道。这是在keep-alive 连接上的进一步性能优化。在响应到达之前,可以将多条请求放入队列。当第一条请求通过网络流向地球另一端的服务器时,第二条和第三条请求也可以开始发送了。在高时延网络条件下,这样做可以降低网络的环回时间,提高性能。 

4.7 关闭连接的奥秘

4.7.1 “任意” 解除连接

4.7.2 content - Length及截尾操作

每条HTTP 响应都应该有精确的Content - Length 首部,用以描述响应主体的尺寸。一些老的HTTP 服务据会省略content-Length 首部,或者包含错误的长度指示,这样就要依赖服务器发出的连接关闭来说明数据的真实末尾。

客户端或代理收到一条随连接关闭而结束的HTTP响应,且实际传输的实体长度与content-Length 并不匹配(或没有content-Length)时,接收端就应该质疑长度的正确性。

如果接收端是个缓存代理,接收端就不应该缓存这条响应(以降低今后将潜在的错误报文混合起来的可能)。代理应该将有问题的报文原封不动地转发出去,而不应该试图去“校正” content - Length ,以维护语义的透明性。

4.7.3 连接关闭容限、重试以及事等性

如果一个事务,不管是执行一次还是很多次,得到的结果都相同,这个事务就是幂等的。

客户端不应该以管道化方式传送非幂等请求(比如POST)。否则,传输连接的过早终止就会造成一些不确定的后果。要发送一条非事等请求,就需要等待来自前一条请求的响应状态。

4.7.4 正常关闭连接

  1. 完全关闭与半关闭
  2. TCP关闭及重置错误 

  3. 正常关闭

 

  • 大小: 127 KB
  • 大小: 68.2 KB
  • 大小: 164.1 KB
  • 大小: 96.8 KB
  • 大小: 73.1 KB
  • 大小: 35.9 KB
  • 大小: 56 KB
  • 大小: 44.3 KB
  • 大小: 88.5 KB
  • 大小: 50.5 KB
  • 大小: 97.5 KB
  • 大小: 68.1 KB
  • 大小: 73.4 KB
  • 大小: 261.7 KB
  • 大小: 133.4 KB
  • 大小: 64.5 KB
1
0
分享到:
评论

相关推荐

    Hadoop权威指南 第二版(中文版)

    第4章 Hadoop I/O  数据完整性  HDFS的数据完整性  LocalFileSystem  ChecksumFileSystem  压缩  codec  压缩和输入切分  在MapReduce中使用压缩  序列化  Writable接口  Writable类  实现定制的...

    baohenglin#HLBlog#《HTTP权威指南》1

    《HTTP权威指南》|《第 1 章 HTTP概述》《第 2 章 URL与资源》《第 3 章 HTTP报文》《第 4 章 连接管理》《第 5 章 Web服务器》

    MySQL 5权威指南(第3版) 中文版 下载地址

     第4章 mysql、mysqladmin和mysqldump  4.1 mysql  4.2 mysqladmin  4.3 mysqldump  第5章 MySQL Administrator和MySQL Query Browser  5.1 安装  5.2 与MySQL服务器建立连接  5.3 MySQL ...

    Ubuntu权威指南(2/2)

    第4章 文件系统基础知识 86 4.1 文件系统的层次结构 87 4.1.1 树形层次结构 87 4.1.2 路径名 88 4.2 文件系统的组织结构 88 4.3 文件的类型 92 4.3.1 普通文件 92 4.3.2 目录文件 94 4.3.3 特殊文件 95 4.3.4 链接...

    MongoDB权威指南(中文版)高清

    423.5 请求和连接 43第4章 查询 454.1 find简介 454.1.1 指定返回的键 464.1.2 限制 464.2 查询条件 474.2.1 查询条件 474.2.2 OR查询 474.2.3 $not 484.2.4 条件句的规则 494.3 特定于类型的...

    Oracle Database 11g初学者指南--详细书签版

    第4章 SQL:结构化查询语言 77 4.1 SQL语句的组成 78 4.1.1 DDL 78 4.1.2 DML 79 4.2 基本的insert和select语句 79 4.2.1 insert 79 4.2.2 select 80 4.3 简单的where子句 81 4.3.1 带and/or的where子句 84 ...

    Hadoop权威指南(中文版)2015上传.rar

    第4章 Hadoop I/O 数据完整性 HDFS的数据完整性 LocalFileSystem ChecksumFileSystem 压缩 codec 压缩和输入切分 在MapReduce中使用压缩 序列化 Writable接口 Writable类 实现定制的Writable类型 序列化框架 Avro ...

    电子书:MongoDB权威指南(中文版)

    263.3.2 使用修改器 273.3.3 Upsert 363.3.4 更新多个文档 383.3.5 返回已更新的文档 383.4 瞬间完成 413.4.1 安全操作 413.4.2 捕获“常规”错误 423.5 请求和连接 43第4 章 查询 454.1 find ...

    Android驱动开发权威指南

    第4章Linux内核编程与内核模块 4.1 Linux内核源代码目录结构 4.2 Linux内核的编译与启动 4.3 Linux内核的C编程 4.4 Linux内核模块基础与骨架 4.5 Linux模块的加载与卸载 4.6 Linux模块的参数与导出符号 4.7 Linux...

    XQuery权威指南(简码·扫描版)

    第4章 使用路径定位输入文件 4.1 路径表达式 4.2 谓词 4.3 动态路径 4.4 输入文件 4.5 深入了解上下文 第5章 在结果中增加元素和属性  5.1 包含输入文件中的元素和属性  5.2 直接元素构造器  5.3 计算构造器 第6...

    802.11无线网络权威指南(第二版全_非扫描).pdf

    华为三康机密,未经许可不得扩散 第4 页, 共508 页 3.3.4 Spectralink 语音优先性...................................................................... 56 3.3.5 帧的分段与重组.................................

    memcached权威指南

    第四章 编译 PHP 及 memcached 扩展.......................................................................................... 14 4.1 编译 apache+...

    MySQL5 权威指南第3版中文版_part1

     第4章 mysql、mysqladmin和mysqldump  4.1 mysql  4.2 mysqladmin  4.3 mysqldump  第5章 MySQL Administrator和MySQL Query Browser  5.1 安装  5.2 与MySQL服务器建立连接  5.3 MySQL Administrator  ...

    Ubuntu权威指南(1/2)

    第4章 文件系统基础知识 86 4.1 文件系统的层次结构 87 4.1.1 树形层次结构 87 4.1.2 路径名 88 4.2 文件系统的组织结构 88 4.3 文件的类型 92 4.3.1 普通文件 92 4.3.2 目录文件 94 4.3.3 特殊文件 95 4.3.4 链接...

    SQL.Server.2008管理员必备指南.part2.rar(2/4)

     第4章 配置和优化SQL Server 2008 68  4.1 访问SQL Server的配置数据 69  4.1.1 使用系统目录和目录视图 70  4.1.2 使用系统存储过程 75  4.2 管理SQL Server配置选项的技巧 82  4.2.1 设置配置选项 82  ...

    OPhone应用开发权威指南(黄晓庆)

    《OPhone应用开发权威指南》2010 黄晓庆 博文视点 broadview 第1章 OPhone平台概述 1 1.1 OPhone的架构 1 1.1.1 Linux内核 2 1.1.2 本地库 2 1.1.3 OPhone运行环境 3 1.1.4 Widget运行环境 3 1.1.5 应用程序框架 4 ...

    Eclipse权威开发指南2.pdf

    第4章 Java程序的运行与调试 107 4.1 运行Java代码...... 108 4.1.1 使用运行和调试命令..... 108 4.1.2 管理启动配置..... 109 4.1.3 对代码片断编辑测试窗页面中的表达式进行求值..... 111 4.2 调试...... 112 ...

Global site tag (gtag.js) - Google Analytics