《http权威指南》读书笔记4
概述
最近对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的更多相关文章
- 【鸟哥的Linux私房菜】笔记1
Linux是什么 从操作系统与cpu架构关系到linux Richard Mathew Stallman GPL 关于GNU计划 Linux的发展 Linux的核心版本 Linux的特色 Linux ...
- 【鸟哥的Linux私房菜】笔记3
正确地开机 最好不要使用root账号登陆!GNOME图形界面 View items as a list X WindowShell 文本交互界面bash是Shell的名称,Linux的默认壳程序就是b ...
- 【鸟哥的Linux私房菜】笔记2
Linux的应用 学习资源整理 安装记录 >< 1.Linux的应用: 网络服务器 数据库 学术机构的高效运算任务 嵌入式系统 ... 2.挂载与磁盘分区 学习资源整理 学习 1.书上的网 ...
- 《鸟哥的Linux私房菜》笔记——02. 关于Linux
Unix 历史 1969年以前:伟大的梦想--Bell, MIT 与 GE 的「Multics」系统 1969年:Ken Thompson 的小型 file server system 1973年:U ...
- 《鸟哥的Linux私房菜》笔记——03. 磁盘分区
Everything is a file. 常见硬件对应于 Linux 下的文件(/dev目录下) 装置 装置在Linux内的档名 SCSI/SATA/U盘硬盘机 /dev/sd[a-p] U盘 /d ...
- 鸟哥的linux私房菜学习笔记 __ 命令与文件的搜寻
连续输入两次[tab]按键就能够知道使用者有多少命令可以下达.那你知不知道这些命令的完整档名放在哪里?举例来说,ls 这个常用的命令放在哪里呢? 就透过 which 或 type 来找寻吧! 范例一: ...
- 【鸟哥的Linux私房菜】笔记
操作系统核心的功能! 驱动程序与操作系统的关系 2. [计算机组成之组件] 3.CPU实际要处理的数据完全来自于主存储器,这是一个很重要的概念! 4.CPU是整个计算机系统最重要的部分,那么目前世界上 ...
- 《鸟哥的Linux私房菜》笔记——04. 简单命令行
键入命令 [dmtsai@study ~]$ command [-options] parameter1 parameter2 ... 指令 選項 參數(1) 參數(2) 注意:有时也可以使用 + 放 ...
- 鸟哥的Linux私房菜学习笔记——文件权限与目录配置
Linux的文件权限和目录配置 在linux中的每个用户必需属于一个组,不能独立于组外.在linux中每个文件有所有者.所在组.其它组的概念. (1)所有者 一般为文件的创建者,谁创建了该文件,就是天 ...
- 鸟哥的Linux私房菜学习笔记(1)
2014/10/29 1.档案的权限管理分为三个部分: 拥有者.群组.其他 2.ls -al 命令可以看到档案的详细信息 3.档案的属性中由十个部分构成 第一个部分是档案类型 -代表档案.d代表文件夹 ...
随机推荐
- Linux驱动之USB总线驱动程序框架简析
通用串行总线(USB)是主机和外围设备之间的一种连接.USB总线规范有1.1版和2.0版,当然现在已经有了3.0版本.USB1.1支持两种传输速度:低速为1.5Mbps,高速为12Mbps.USB2. ...
- linux学习第十三天 (Linux就该这么学)找到一本不错的Linux电子书
今天主要讲了vftp 服务的配置,不家三种访问方式 一,匿名访问模式 二,本地访问模式 三,虚拟用户模式 和,tftp简单文件传输协议 也讲了要孝试的服务,sabma服务的配置,及wind ...
- 别人的Linux私房菜(17)进程管理与SELinux初探
程序在磁盘中,通过用户的执行触发.触发事件时,加载到内存,系统将它定义成进程,给予进程PID,根据触发的用户和属性,给予PID合适的权限. PID和登陆者的UID/GID有关.父进程衍生出来的进程为子 ...
- P3805 【模板】manacher算法
#include <bits/stdc++.h> #define up(i,l,r) for(register int i = (l);i <= (r); i++) #define ...
- dremio jdbc使用
驱动包地址 链接:https://pan.baidu.com/s/1Nivkvze24hRH8pXOQleCgw 提取码:gp9z 使用dremio主要原因 : 1)springboot提供了es组件 ...
- Unity中AB资源打包简单的脚本
脚本应该放在Editor文件夹下 using System.Collections; using System.Collections.Generic; using UnityEngine; usin ...
- 更改MAC地址,突破公司绑定MAC地址的限制
步骤/方法 1 打开开始菜单,选择控制面板. 2 3 打开控制面板项,选择网络和共享中心. 4 5 选择更改适配器设置. 6 7 选择本地要修改MAC地址的网卡. 8 9 右键该网卡, ...
- java 调用 api接口
/* * Copyright 2018 textile.com All right reserved. This software is the * confidential and propriet ...
- Linux-3.0.8中基于S5PV210的GPIO模块代码追踪和分析
编写按键驱动时,想知道内核是如何管理GPIO的,所以开始追踪代码,中间走了一些弯路,现记录于此. 追踪代码之前,我猜测:第一,这部分代码应该在系统set up阶段执行:第二,GPIO的代码应该在mac ...
- Python基础-if判断以及其他循环
if else 判断: #!/usr/bin/env python # -*- coding:utf-8 -*- import getpass name = input("用户名??&quo ...