《HTTP权威指南》4-连接管理
TCP连接
TCP/IP是全球计算机及网络设备都在使用的一种常见的分组交换网络分层协议集
客户端应用程序可以打开一条TCP/IP连接。连接到可能运行在世界任何地方的服务器应用程序
TCP的可靠数据管道
HTTP连接实际上就是TCP连接和一些使用连接的规则
TCP为HTTP提供了一条可靠的比特传输管道
从TCP连接一端填入的字节会从另一端以原有的顺序,正确的传送出来
TCP流是分段的,由IP分组传送
HTTP要传送一条报文时,会进行如下传送:
- 以流的形式将报文数据的内容通过一条打开的TCP连接按序传输
- TCP接收到数据流后,将数据流砍成被称作段的小数据块
- 将段封装在IP分组中,通过因特网进行传输
保持TCP连接的正确运行
任意时刻计算机都可以有几条TCP连接处于打开状态,TCP是通过端口号来保持所有这些连接的正确运行的。
TCP连接是通过4个值来是识别的:<源IP地址、源端口号、目的IP地址、目的端口号>
对TCP性能的考虑
HTTP事务的时延

HTTP事务时延有一下几种主要原因:
- 从URL中解析IP地址及端口号
- 建立TCP连接
- 传输请求报文,及服务器处理请求报文
- 返回响应报文
TCP网络时延的大小取决于硬件速度,网络和服务器的负载,请求和响应报文的尺寸,客户端和服务器的距离等
HTTP连接的处理
Connection首部
HTTP允许在客户端和最终的源端服务器之间存在一串HTTP中间实体,包括代理,网关,缓存等。
在某些情况下,两个相邻的HTTP应用程序会为它们共享的连接应用一组选项。
HTTP的Connection首部字段中有一个由逗号分隔的连接标签列表,这些标签为此连接指定了一些不会传播到其他连接中去的选项。
- 当HTTP应用程序收到一条带有Connection首部的报文时,接收端会接卸发送端请求的所有选项,并将其应用。
- 在将此报文转发给下一跳地址之前,删除Connection首部及Connection中列出的所有首部
并行连接
HTTP允许客户端打开多条连接,并行地执行多个HTTP事务
并行连接可能会提高页面的加载速度

并行连接不一定会更快
并行连接的速度可能会更快,但不一定总是更快。
当客户端的网络带宽不足时,大部分的时间肯能都是用来传送数据的,一个连接到速度较快的服务器上的HTTP事务很容易好近所有可能用的Modem带宽。
而且,打开大量连接会消耗很多内存资源,从而引发自身的性能问题
并行连接可能让人“感觉”更快一些
当更多的组件对象同时出现在屏幕上,使用户能够看到加载的进展,哪怕速度上没有变化,也会让人感觉更快
持久连接
Web客户端经常会打开同一个站点的连接。
HTTP/1.1允许HTTP设备在事务处理结束之后将TCP连接保持在打开状态,以便为未来的HTTP请求重用现存的连接。
在事务处理结束后仍然保持在打开状态的TCP连接被称为持久连接
管道化连接
HTTP/1.1允许在持久连接上可选地使用请求管道。
在响应到达之前,可以将多条请求放入队列。
当第一条请求通过网络流向地球另一端的服务器时,第二条和第三条也可以开始发送了
管道化连接有如下几条限制:
- 如果HTTP客户端无法确认连接是持久的,就不应该使用管道
- 必须按照与请求相同的顺序回送HTTP响应
- HTTP客户端必须做好连接会在任意时刻关闭的准备
- HTTP客户端不应该用管道化的方式发送会产生副作用的请求,如POST,否则,当出错时,就会存在某些方法永远不会被执行的风险。
几种连接图

《HTTP权威指南》4-连接管理的更多相关文章
- 和我一起学《HTTP权威指南》——连接管理
连接管理 1.TCP连接 几乎所有的HTTP通信都是由TCP/IP承载的. 浏览网页时客户端执行的操作: 如浏览http://www.joes-hardware.com:80/power-tools. ...
- HTTP权威指南之连接管理
TCP连接世界上几乎所有的 HTTP 通信都是由 TCP/IP 承载的, TCP/IP 是全球计算机及网络设备都在使用的一种常用的分组交换网络分层协议集. 客户端应用程序可以打开一条 TCP/IP 连 ...
- HTTP权威指南读书笔记
HTTP权威指南笔记 读书有两种境界,第一种境界是将书读薄,另一种是读厚.本篇文章就是HTTP权威指南的读书笔记,算是读书的第一重境界,将厚书读薄.文章对HTTP的一些关键概念做了比较详细的概述,通读 ...
- 《HTTP权威指南》之HTTP连接管理及对TCP性能的考虑
在上一篇博客中(<HTTP权威指南>之HTTP相关概念详解)我们简单对HTTP相关的基本概念做了一些简单的了解,但未对HTTP连接管理的内容做一些详细的介绍.本篇博客我们就一起来看一下HT ...
- 《Ansible权威指南》笔记(3)——Ad-Hoc命令集,常用模块
五.Ad-Hoc命令集1.Ad-Hoc命令集通过/usr/bin/ansible命令实现:ansible <host-pattern> [options] -v,--verbose ...
- 《Ansible权威指南》笔记(1)——安装,ssh密钥登陆,命令
2016-12-23 读这本<Ansible权威指南>学习ansible,根据本书内容和网上的各种文档,以及经过自己测试,写出以下笔记.另,这本书内容很好,但印刷错误比较多,作者说第二版会 ...
- HTTP连接管理
本文是<HTTP权威指南>读书笔记: 几乎所有的HTTP通信都是通过TCP/IP承载的,当HTTP要传送一些报文时,会以流的形式将报文数据的内容通过一条打开的TCP连接按序传输.因此HTT ...
- Netty权威指南
Netty权威指南(异步非阻塞通信领域的经典之作,国内首本深入剖析Netty的著作,全面系统讲解原理.实战和源码,带你完美进阶Netty工程师.) 李林锋 著 ISBN 978-7-121-233 ...
- Android开发权威指南(第2版)新书发布
<Android 开发权威指南(第二版)>是畅销书<Android开发权威指南>的升级版,内容更新超过80%,是一本全面介绍Android应用开发的专著,拥有45 章精彩内容供 ...
- Hadoop权威指南:HDFS-数据流
Hadoop权威指南:HDFS-数据流 [TOC] 剖析文件读取 客户端通过调用FileSystem对象的open()方法来打开希望读取的文件,对于HDFS来说, 这个对象是分布式文件系统的一个实例 ...
随机推荐
- Ubuntu 批量添加用户
#!/bin/bash cat user.txt | while read linedo user=$(echo $line | cut -d ' ' -f1) passwd=$(echo ...
- git 安装及常见问题处理
卸载掉自带的: yum remove git 安装: yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-de ...
- 项目总结22:Java UDP Socket数据的发送和接收
项目总结22:Java UDP Socket数据的发送和接收 1-先上demo 客户端(发送数据) package com.hs.pretest.udp; import java.io.IOExcep ...
- 在vscode中使用eslint
一.vs中安装eslint插件 二.npm 全局安装 eslint sudo npm i -g eslint 三.vs终端运行eslint --init 四.在vscode的setting中设置 ...
- ReentrantLock示例说明
1.ReentrantLock锁 import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Lock; impor ...
- jmeter的各种调用
1. 开发将dubbo协议的接口转化成了webservices后,jmeter直接添加http请求,输入网址就好,但是这种需要增加开发测试页面的工作量 2.jmeter自身无法调用zk连接服务器(Jm ...
- AutoMapper 忽略某个字段
以前要在定义中忽略 Mapper.CreateMap<Source, Destination>() .ForMember(dest => dest.SomeValuefff, opt ...
- (三)Bootstrap.jar
catalina.bat 在最后启动了bootstrap.jar, 传递了start作为参数(如果多个参数的话,start在尾部). 然后org.apache.catalina.startup.Boo ...
- STS中logback.xml配置文件
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="false ...
- Jmeter如何把响应数据的结果保存到本地的一个文件
当做性能压测时,可能会需要把响应数据的一些字段统计出来.这里简单介绍一下. 1.首先把接口调通,确定需要统计的字段,这里以统计ccmpSeq字段来做例子. 2.添加正则表达式提取器,用来提取响应结果中 ...