概述

最近对http很感兴趣,于是开始看《http权威指南》。别人都说这本书有点老了,而且内容太多。我个人觉得这本书写的太好了,非常长知识,让你知道关于http的很多概念,不仅告诉你怎么做,还告诉你为什么这么做。于是我把学到的知识点记录下来,供以后开发时参考,相信对其他人也有用。

http连接的处理

1.Connection首部可以承载3中不同类型的标签:

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

2.串行事务的缺点:

  • 连接时延和慢启动时延会叠加起来。
  • 有些浏览器在对象加载完毕之前无法获知对象的尺寸,因此在加载了足够多的对象之前,无法在屏幕上显示任何内容。

3.并行连接:http允许客户端打开多条连接,并行的执行多个http事务。并行连接并不一定总是更快的,如果客户端的带宽很小,并行连接带来的性能提升就很小,甚至没什么提升。而且,打开大量连接会消耗很多内存资源,从而引发客户端自身的性能问题。

4.持久连接:由于初始化了对服务器http请求的应用程序可能会在不就的将来对那台服务器发起更多的请求(站点本地性),所以http/1.1允许http设备在事务处理结束之后将TCP连接保持在打开状态,以便为未来的http请求重用现存的链接。持久连接能够避开连接时延和慢启动时延。

5.持久连接和并行连接配合使用可能是最高效的方式,现在很多web应用程序都会打开少量的并行连接,其中的每一个都是持久连接。

6.http/1.0+的keep-alive连接:很多http/1.0浏览器和服务器都进行了扩展,以支持一种keep-alive的早期实验型持久连接。这种连接在http/1.1很少使用了。

7.keep-alive连接的限制:

  • 必须发送Connection:Keep-Alive请求首部来激活Keep-Alive连接。
  • 如果客户端没有发送Keep-Alive首部,服务器就会在那条请求之后关闭连接。
  • 需要发送正确的Content-Length。

8.由于有些代理(盲代理)不会识别Connection:Keep-Alive首部,所以它在和浏览器交互的时候会使浏览器一直处于挂起状态,直到客户端或服务器将连接超时,将其关闭为止。为避免此类代理通信问题的发生,现代的代理都绝不能转发Connection首部和所有名字出现在Connection值中的首部。

9.有一种变通的做法能够解决盲中继的问题,那就是插入Proxy-Connection首部。对于盲代理来说,它会转发Proxy-Connection首部,这样不会有任何问题;对于聪明的代理来说,它会用Connection首部来取代Proxy-Connection首部,这样就实现了持久连接。

10.http/1.1持久连接默认是激活的,要关闭的话,http/1.1应用程序需要在报文中添加一个Connection:close首部。当然,如果超时的话,客户端和服务端都可以关闭持久连接。

11.http/1.1允许在持久连接上可选地使用请求管道,这是keep-alive连接上的进一步性能优化。它可以使客户端在响应到达之前就将多条请求放入队列,在上一条请求到达服务器之前,就发送下一条请求。

12.所有http客户端,服务器或者代理都可以在任意时刻关闭一条TCP传输连接。即使在非错误的情况下,连接也可以在任意时刻关闭。这样就可能重复发送大量的同样的请求,这个时候就带来幂等事务的概念:如果一个事务,不管执行一次还是多次,得到的结果都相同,这个事务就是幂等的。比如说,post一条订单就不是幂等的,因为发送多次会有下多张订单的危险。

《http权威指南》读书笔记4的更多相关文章

  1. 【鸟哥的Linux私房菜】笔记1

    Linux是什么 从操作系统与cpu架构关系到linux  Richard Mathew Stallman GPL 关于GNU计划 Linux的发展 Linux的核心版本 Linux的特色 Linux ...

  2. 【鸟哥的Linux私房菜】笔记3

    正确地开机 最好不要使用root账号登陆!GNOME图形界面 View items as a list X WindowShell 文本交互界面bash是Shell的名称,Linux的默认壳程序就是b ...

  3. 【鸟哥的Linux私房菜】笔记2

    Linux的应用 学习资源整理 安装记录 >< 1.Linux的应用: 网络服务器 数据库 学术机构的高效运算任务 嵌入式系统 ... 2.挂载与磁盘分区 学习资源整理 学习 1.书上的网 ...

  4. 《鸟哥的Linux私房菜》笔记——02. 关于Linux

    Unix 历史 1969年以前:伟大的梦想--Bell, MIT 与 GE 的「Multics」系统 1969年:Ken Thompson 的小型 file server system 1973年:U ...

  5. 《鸟哥的Linux私房菜》笔记——03. 磁盘分区

    Everything is a file. 常见硬件对应于 Linux 下的文件(/dev目录下) 装置 装置在Linux内的档名 SCSI/SATA/U盘硬盘机 /dev/sd[a-p] U盘 /d ...

  6. 鸟哥的linux私房菜学习笔记 __ 命令与文件的搜寻

    连续输入两次[tab]按键就能够知道使用者有多少命令可以下达.那你知不知道这些命令的完整档名放在哪里?举例来说,ls 这个常用的命令放在哪里呢? 就透过 which 或 type 来找寻吧! 范例一: ...

  7. 【鸟哥的Linux私房菜】笔记

    操作系统核心的功能! 驱动程序与操作系统的关系 2. [计算机组成之组件] 3.CPU实际要处理的数据完全来自于主存储器,这是一个很重要的概念! 4.CPU是整个计算机系统最重要的部分,那么目前世界上 ...

  8. 《鸟哥的Linux私房菜》笔记——04. 简单命令行

    键入命令 [dmtsai@study ~]$ command [-options] parameter1 parameter2 ... 指令 選項 參數(1) 參數(2) 注意:有时也可以使用 + 放 ...

  9. 鸟哥的Linux私房菜学习笔记——文件权限与目录配置

    Linux的文件权限和目录配置 在linux中的每个用户必需属于一个组,不能独立于组外.在linux中每个文件有所有者.所在组.其它组的概念. (1)所有者 一般为文件的创建者,谁创建了该文件,就是天 ...

  10. 鸟哥的Linux私房菜学习笔记(1)

    2014/10/29 1.档案的权限管理分为三个部分: 拥有者.群组.其他 2.ls -al 命令可以看到档案的详细信息 3.档案的属性中由十个部分构成 第一个部分是档案类型 -代表档案.d代表文件夹 ...

随机推荐

  1. springboot无法加载oracle驱动终极解决

    .ctrl+shirt+s .找到 Maven: com.oracle:ojdbc6: .找到classes 下的路径C:\Users\Administrator\.m2\repository\com ...

  2. instanceof简单用法

    语法: 对象 instanceof 类: 含义:如果这个对象时这个类或者这个类的子类的实例化,那么结果及时ture, 否则 false. 常常用来判断一个类是否是某个类的子类,以此判断A类是否继承或者 ...

  3. Intellij IDEA 环境 tomcat 启动设置

    第一步:选择新的新的配置,我选择是Tomcat Server----->Local配置 第二步:配置Server属性 第三步:配置Deployment 第四步:配置Logs,默认配置 第五步:配 ...

  4. vue-cli 第一章

    一.安装 Node.Python.Git.Ruby 这些都不讲解了   二.安装 Vue-Cli    # 最新稳定版本 # 全局安装 npm install --global vue-cli # 创 ...

  5. iOS dispatch_semaphore_t(信号量)和 2.dispatch_group_t (组)

    2017年,回望过去,前半年还致力于iOS开发,后半年就开始了python的漫漫之路,一路上走走停停,不过还好,总的来说,2017是收获的一年,也是付出的一年.2018加油! 话题转回来,关于线程执行 ...

  6. Koa源码分析(二) -- co的实现

    Abstract 本系列是关于Koa框架的文章,目前关注版本是Koa v1.主要分为以下几个方面: Koa源码分析(一) -- generator Koa源码分析(二) -- co的实现 Koa源码分 ...

  7. Python19/1/11--标签与过滤器/Django模块导入继承/静态文件配置

      1 模板语言之变量: -{{ }} 相当于执行了print -深度查询 . 如果是方法,不能加括号,不能传参数2 过滤器 {{ 变量|过滤器的名字:'参数' }} -add -default -s ...

  8. Logback简单使用

    1.     添加jar包/maven配置 <dependency> <groupId>ch.qos.logback</groupId> <artifactI ...

  9. .gvfs: Permission denied

    命令行输入umount .gvfs rm -rf .gvfs

  10. Dev gridcontrol 添加多列按钮

    gridcontrol中添加按钮的步骤: 1. 把列的ColumnEdit属性设置为RepositoryItemButtonEdit 2. 把TextEditStyle属性设置为HideTextEdi ...