概述

最近对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. Linux驱动之USB总线驱动程序框架简析

    通用串行总线(USB)是主机和外围设备之间的一种连接.USB总线规范有1.1版和2.0版,当然现在已经有了3.0版本.USB1.1支持两种传输速度:低速为1.5Mbps,高速为12Mbps.USB2. ...

  2. linux学习第十三天 (Linux就该这么学)找到一本不错的Linux电子书

    今天主要讲了vftp 服务的配置,不家三种访问方式   一,匿名访问模式  二,本地访问模式   三,虚拟用户模式  和,tftp简单文件传输协议 也讲了要孝试的服务,sabma服务的配置,及wind ...

  3. 别人的Linux私房菜(17)进程管理与SELinux初探

    程序在磁盘中,通过用户的执行触发.触发事件时,加载到内存,系统将它定义成进程,给予进程PID,根据触发的用户和属性,给予PID合适的权限. PID和登陆者的UID/GID有关.父进程衍生出来的进程为子 ...

  4. P3805 【模板】manacher算法

    #include <bits/stdc++.h> #define up(i,l,r) for(register int i = (l);i <= (r); i++) #define ...

  5. dremio jdbc使用

    驱动包地址 链接:https://pan.baidu.com/s/1Nivkvze24hRH8pXOQleCgw 提取码:gp9z 使用dremio主要原因 : 1)springboot提供了es组件 ...

  6. Unity中AB资源打包简单的脚本

    脚本应该放在Editor文件夹下 using System.Collections; using System.Collections.Generic; using UnityEngine; usin ...

  7. 更改MAC地址,突破公司绑定MAC地址的限制

    步骤/方法 1 打开开始菜单,选择控制面板. 2   3 打开控制面板项,选择网络和共享中心. 4   5 选择更改适配器设置. 6   7 选择本地要修改MAC地址的网卡. 8   9 右键该网卡, ...

  8. java 调用 api接口

    /* * Copyright 2018 textile.com All right reserved. This software is the * confidential and propriet ...

  9. Linux-3.0.8中基于S5PV210的GPIO模块代码追踪和分析

    编写按键驱动时,想知道内核是如何管理GPIO的,所以开始追踪代码,中间走了一些弯路,现记录于此. 追踪代码之前,我猜测:第一,这部分代码应该在系统set up阶段执行:第二,GPIO的代码应该在mac ...

  10. Python基础-if判断以及其他循环

    if else 判断: #!/usr/bin/env python # -*- coding:utf-8 -*- import getpass name = input("用户名??&quo ...