概述

最近对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. VUE(相关简介及初始)

    1.什么是vue Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的 渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库只关注视图层, ...

  2. 把button中文字的省略号放到后面

    butt.titleLabel.lineBreakMode = NSLineBreakByTruncatingTail; 加上这句话就可以,uibutton有uilabel的方法

  3. Linux学习笔记:nginx基础

    nginx [engine x] is an HTTP and reverse proxy server, a mail proxy server, and a generic TCP/UDP pro ...

  4. 一、PTA实验作业

    一.PTA实验作业 1.题目1: 6-2 线性表元素的区间删除 2. 设计思路 定义i,j; 判断L,minD,maxD; while(i<l->Last) { 判断所有满足条件的数,de ...

  5. Lambda表达式按字段名字排序

    using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; us ...

  6. 数据库基础 RDBMS、NoSQL

  7. 20175316盛茂淞 2018-2019-2 《Java程序设计》第8周学习总结

    20175316盛茂淞 2018-2019-2 <Java程序设计>第8周学习总结 教材学习内容总结 第十五章 泛型 -- 主要目的是可以建立具有类型安全的集合框架,如链表.散列映射等数据 ...

  8. JS-MD5加密

    首先,下载MD5文件压缩包 点击下载MD5压缩包 然后,在需要加密的页面引用MD5脚本文件 <script src="js/md5.js" type="text/j ...

  9. Web缓存和静态化

    Web缓存和静态化 目录 Web缓存基础... 1 什么是Web缓存... 1 Web缓存的类型... 1 为何要使用Web缓存... 1 重验证... 1 更新... 2 浏览器缓存... 2 工作 ...

  10. LOJ-10094(强连通分量)

    题目链接:传送门 思路: 先缩点,然后统计入度为0的点即可. #include<iostream> #include<cstdio> #include<cstring&g ...