浏览器解析URL流程:

  1. 浏览器解析出域名;
  2. 浏览器查询这个主机名的IP地址;
  3. 浏览器获得端口号;
  4. 浏览器发起到主机名IP地址端口的80连接;
  5. 浏览器向服务器发送一条HTTP–GET报文;
  6. 浏览器从服务器读取HTTP响应报文;

HTTP事物的时延有以下几种主要原因:

  1. 客户端首先要根据URL确定Web服务器的IP地址和端口号;
  2. 客户端会向服务器发送一条TCP连接请求;
  3. 连接建立后,客户端就会通过新建立的TCP管道来发送HTTP请求;
  4. Web服务器会回送HTTP响应;

大多数HTTP客户端都有一个小的DNS缓存,用来保存近期所有访问站点的IP地址。

TCP网络时延的大小取决于硬件速度、网络和服务器的负载、请求和响应保存的尺寸、以及客户端和服务器之间的距离。

HTTP连接方式

并行连接

并行连接:并行地执行多个事务,每个事务都有自己的TCP连接。多个连接会产生一些额外的开销,使用并行连接装载整个页面的时间很可能并串行下载时间更长。

持久连接

持久连接:在事务处理结束之后仍然保持在打开状态的TCP连接被成为持久连接。非持久连接会在每个事务结束之后关闭,持久连接会在不同事务之间保持打开状态,直到客户端或服务器决定将其关闭为止。重用持久连接,就可以避开缓慢的连接建立阶段。而且已经打开的连接还可以避免慢启动的拥挤适应阶段,以便更快地进行数据的传输。

持久以及并行连接:渐进式图片应用:先显示低分辨率的近似图像,然后再逐渐增减图片的分辨率。

持久连接两种类型:

  1. Keep-alive
  2. 持久连接

Keep-alive:实现 HTTP/1.0Keep-alive 连接的客户端可以通过包含 Connection:Keep-Alive 首部请求将一条连接保持在打开状态。如果服务器愿意为下一条请求将连接保持在打开状态,就在响应中包含相同的首部,如果响应中没有 Connection:Keep-Alive,客户端就会认为服务器不支持Keep-alive。会在相应报文后关闭连接。

Keep-Alive限制和规则:

  1. 默认不使用,发送 Connection:Keep-Alive 激活;
  2. 首部必须随所有希望保持持久连接的报文一起发送;
  3. 实体的主体部分必须有正确的 Content-Length
  4. 代理和网关必须执行 Connection 首部的规则。

HTTP/1.1 逐渐停止了对 Keep-alive 连接的支持,用一种名为 持久连接 的改进型设计取代了它。在 HTTP/1.1 中,持久连接默认是激活的。

持久连接的规则和限制:

  1. 发送了 Connection:close 请求首部之后,客户端就无法在那条连接上发送更多的请求了;
  2. 如果客户端不想在连接上发送其它请求了,就应该在最后一条请求中发送一个 Connection:close 首部;
  3. 只有当实体部分的长度和相应的 Content-Length 一致,或是用分块传输编码方式编码的情况下,连接才能持久保持;
  4. 一个客户端对任何服务器或代理最多只能维护两条持久连接,以防服务器过载;

管道化连接:

HTTP/1.1 允许在持久化上可选地使用请求管道。这是在 Keep-Alive 连接上的进一步想能优化,在响应到达之前,可以将多条请求放入队列,当第一条请求通过网络流向另一端服务器时,第二条和第三条请求也可以开始发送了。

规则和限制:

  1. 如果客户端无法确认连接是持久的,就不应该使用管道;
  2. 必须按照与请求相同的顺序回送HTTP响应;
  3. 客户端必须能够应付持久连接过早关闭,并重新发送为完成请求;

幂等的概念:

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

幂等请求: GET HEAD PUT DELETE TRACE OPTIONS

非幂等请求: POST,非幂等方法或序列不能自动重试。比如:大多数浏览器都会在重载一个缓存的POST相应时提供一个对话框,询问用户是否希望再次发起事务处理。

完全关闭和半关闭:

应用程序可以关闭 TCP 输入和输出信道中任意一个,或者将两个都关闭。

套接字调用 close() 会将 TCP 连接的输入和输出传到都关闭了,称为“完全关闭”,还可以调用 shutdown() 单独关闭输入或输出信道,成为 “半关闭”。

图灵图书 -- HTTP权威指南

豆瓣读书 -- HTTP权威指南

《HTTP权威指南》– 4.HTTP连接管理的更多相关文章

  1. HTTP权威协议笔记-4.连接管理

    4.1 TCP连接 TCP为HTTP提供了一条可靠的比特传输管道,按顺序正确的传输,步骤如下: 浏览器解析主机名. 查询这个主机名的IP地址(DNS) 获得端口号. 浏览器对服务器该端口号发起连接. ...

  2. 《HTTP权威指南》4-连接管理

    TCP连接 TCP/IP是全球计算机及网络设备都在使用的一种常见的分组交换网络分层协议集客户端应用程序可以打开一条TCP/IP连接.连接到可能运行在世界任何地方的服务器应用程序 TCP的可靠数据管道 ...

  3. ElasticSearch权威指南学习(索引管理)

    创建索引 当我们需要确保索引被创建在适当数量的分片上,在索引数据之前设置好分析器和类型映射. 手动创建索引,在请求中加入所有设置和类型映射,如下所示: PUT /my_index { "se ...

  4. Http权威指南(TCP连接)

    1.HTTP请求的过程 世界上几乎所有的HTTP通信都是由TCP/IP承载的,当发生HTTP请求时,实际上经过了以下几个步骤: ①浏览器从请求的URL中解析主机名 ②浏览器查询这个主机名的IP地址 ③ ...

  5. 《HTTP权威指南》之HTTP连接管理及对TCP性能的考虑

    在上一篇博客中(<HTTP权威指南>之HTTP相关概念详解)我们简单对HTTP相关的基本概念做了一些简单的了解,但未对HTTP连接管理的内容做一些详细的介绍.本篇博客我们就一起来看一下HT ...

  6. 和我一起学《HTTP权威指南》——连接管理

    连接管理 1.TCP连接 几乎所有的HTTP通信都是由TCP/IP承载的. 浏览网页时客户端执行的操作: 如浏览http://www.joes-hardware.com:80/power-tools. ...

  7. 《Ansible权威指南》笔记(3)——Ad-Hoc命令集,常用模块

    五.Ad-Hoc命令集1.Ad-Hoc命令集通过/usr/bin/ansible命令实现:ansible <host-pattern> [options]    -v,--verbose  ...

  8. 《Ansible权威指南》笔记(1)——安装,ssh密钥登陆,命令

    2016-12-23 读这本<Ansible权威指南>学习ansible,根据本书内容和网上的各种文档,以及经过自己测试,写出以下笔记.另,这本书内容很好,但印刷错误比较多,作者说第二版会 ...

  9. HTTP连接管理

    本文是<HTTP权威指南>读书笔记: 几乎所有的HTTP通信都是通过TCP/IP承载的,当HTTP要传送一些报文时,会以流的形式将报文数据的内容通过一条打开的TCP连接按序传输.因此HTT ...

  10. Netty权威指南

    Netty权威指南(异步非阻塞通信领域的经典之作,国内首本深入剖析Netty的著作,全面系统讲解原理.实战和源码,带你完美进阶Netty工程师.) 李林锋 著   ISBN 978-7-121-233 ...

随机推荐

  1. 使用kuboard界面配置springcloud的其中一个模块设置环境变量,使用nacos配置地址等有关设置

    总结: 工作负载类型是StatefulSet的pod,不论其上层的service是nodeport还是Headless, 对外提供的地址格式是: <pod name>.<servic ...

  2. 基于CentOS 8服务器来搭建FastDFS高可用集群环境

    服务器版本 我们在服务器的命令行输入如下命令来查看服务器的内核版本. [root@localhost lib]# cat /etc/redhat-release CentOS Linux releas ...

  3. 组件化开发3-cocoaPods私有库制作

    一.创建索引项目ZHMCSSpec 1-1 在代码托管网站上建立索引项目ZHMCSSpec(以这个名称为例) 1-2 在本地创建ZHMCSSpec,并与远程索引建立联系 pod repo add ZH ...

  4. 【Azure 应用服务】App Service频繁出现 Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener 异常分析

    问题描述 在使用App Service的过程中,发现应用频繁出现503错误,通过Kudu站点获取到Logfiles. 在 Eventlog.xml 文件中,发现大量的 Microsoft.Window ...

  5. [题解] Codeforces 1548 C The Three Little Pigs 组合数学,生成函数

    题目 首先令\(x=i\)时的答案为\(f_i\) ,令\(f_i\)对应的普通生成函数为\(F(x)\). 很容易发现\(F(x)=\sum_{i=0}^n (1+x)^{3i}\),sigma是在 ...

  6. C++面向对象编程之复合、委托和继承

    1.复合,表示has a template <typename T> calss A{ protected: B<T> c; } 这里表示 A 里面有一个 B,A 可以调用 B ...

  7. java多线程的两种创建方式

    方式一:继承Thread类 1.创建一个继承于Thread类的子类 2.重写Thread类的run()方法---> 将此线程执行的操作声明在run()中 3.创建Thread类的子类的对象 4. ...

  8. 创建线程的方式三:实现Callable接口。 --- JDK 5.0新增

    如何理解实现Callable接口的方式创建多线程比实现Runnable接口创建多线程方式强大? call()可以有返回值的.call()可以抛出异常,被外面的操作捕获,获取异常的信息Callable是 ...

  9. 数据结构中的哈希表(java实现)利用哈希表实现学生信息的存储

    哈希表 解释 哈希表是一种根据关键码去寻找值的数据映射结构,该结构通过把关键码映射的位置去寻找存放值的地方 内存结构分析图 1.定义一个类为结点,存储的信息 2.定义链表的相关操作 3.定义一个数组存 ...

  10. JSP的内置对象 request和response

    文章目录 1.request对象 2.response响应对象 3.out输出对象 4.session会话对象 5.application应用对象 概述 在使用JSP内置对象的时候.不需要先定义这些对 ...