《图解HTTP》

小知识点记录:
状态码:204是http响应中传输数据量最小的,body为空,content-length为0,这种状态可以用于性能优化中,对于一个大型网站,对于一些不需要返回数据的请求就可以使用204状态码,减少传输的数据量,减少带宽浪费。
/*************************************** 正文 ****************************************************/
http相关的三大协议:** tcp + ip + dns **。

http的几大方法:

- get:请求资源
- post:发送数据
- put:发送文件
- delete:删除文件
- trace:追踪路径
- options:请求资源允许的获取方法
- head:返回响应的报文头部(报文体不返回)
- connect:建立隧道进行数据传输

http是持久连接,节省tcp链接反复断开和重建的时间,提高速度。

http是无状态协议,要保持登录等状态的场景下,需要借助cookie来维持状态;在请求和响应的报文头部,需要携带相应的cookie信息。

http响应类别有以下5种:

状态码 类别 原因短语
1XX Information(信息性状态码) 接收的请求正在处理
2XX Success(成功状态码) 请求正常处理完毕
3XX Redirection(重定向状态码) 需要进行附加操作以完成请求
4XX Client Error(客户端错误状态码) 服务器无法处理请求
5XX Server Error(服务器错误状态码) 服务器处理请求出错

当在浏览器中输入一个url或者按F5刷新页面的时候,都发生了什么:

1. 域名解析:首先进行DNS查找,先浏览器查找自身的DNS缓存(查看方式:chrome://net-internals/#dns,chrome是1min过期)
2. 若浏览器没查找到,则查找操作系统的DNS缓存(存放在某一文件中,一般1d过期)
3. 若还是没查找到,读取本地HOST文件
4. 若未找到,浏览器发起一个DNS的系统调用
    a)宽带运营商服务器查看本身缓存
    b)若无,运营商服务器代替浏览器发起一个迭代DNS解析的请求(接下来就是一些DNS根域等进行查找的过程)。结果获取到后,运营商服务器把结果返回操作系统内核,并缓存。内核再把结果返回浏览器,浏览器至此获取到了目标域名的IP地址。
5. 浏览器拿到IP后,进行TCP/IP三次握手,建立连接
6. 链接建立好后,进行http请求的发送
7. 服务器接收到请求,进行一些后端处理并返回,假如请求的是个页面,则返回相应的html代码
8. 浏览器拿到html代码后,在解析和渲染的过程中,里面的js、css、图片静态资源,他们也是一个个的http请求,也会经历上面的步骤进行获取。
9. 最终一个完整的页面呈现给用户。

http请求头部信息中,会指定host字段,这是因为,一台物理服务器上可能部署多个web站点,在真实的网络通信中,域名被解析成ip地址,所以到了服务器端的话,可能ip地址都是一样的,究竟访问的是哪个站点,就需要请求头部信息中的host字段来区分了。

网关和代理区别的理解:二者工作方式比较相近

网关:一个局域网统一的出口,可以使用非http协议,可加密保障安全性;
代理:通过设置代理服务器,从而更快的到达目标服务器(如公司禁止登陆qq,可通过设置代理的方式),分缓存代理和透明代理(对报文不做处理,直接转发)
隧道:比较安全的一种通信方式

缓存服务器:减少服务器压力(注意:缓存文件的有效性)

报文首部与报文主体之间有一个空行(CR+LF),报文首部包含:

请求|响应行;请求首部字段;通用首部字段;实体首部字段;其他;

请求行:方法 url  http版本
响应行:http版本 状态码 短语

首部字段的值 可以有多个

http首部字段类型:

请求首部字段  响应首部字段  通用首部字段  实体首部字段
Language分类:

以下两种写法均正确,后者描述更精准(新标准),但目前浏览器和操作系统都只支持前者,使用新标准可能会造成无法匹配浏览器用户定义字体、网页翻译、程序语言自动切换等功能,前端和码农为了兼容性推荐使用前者:

zh-CN 中文(简体, 中国大陆) 对应cmn-Hans-CN 普通话 (简体,中国大陆)

zh-SG 中文(简体, 新加坡)   对应 cmn-Hans-SG 普通话(简体, 新加坡)

zh-HK 中文(繁体, 香港)     对应 cmn-Hant-HK 普通话(繁体, 香港)

zh-MO 中文(繁体, 澳门)     对应 cmn-Hant-MO 普通话(繁体, 澳门)

zh-TW 中文(繁体, 台湾)     对应 cmn-Hant-TW 普通话(繁体, 台湾)

9种浏览器端缓存机制(开发者工具-resource下的既是):

《图解HTTP》_第1张图片
无标题.png
  • WebSql IndexedDB:浏览器可以实现小型数据库功能来存储数据
  • Application Cache:离线应用(缓存的文件存储在manifest文件中)
  • Cache:
  • Storage:

HTTP通用首部字段
字段 说明
Cache-Control 缓存相关的指令(请求+响应),详情见下表
Connection 1、跳到跳:不再被转发的字段,需删除相应字段后再转发;
2、端到端:管理持久连接keep-alive 、close
Date 报文创建日期
Via 追踪报文传输路径,每经过一个服务器都会加入对应服务器的信息
Upgrade 协商是否可以使用其他版本协议或其他协议来通信,服务器可以返回101switching protocols来响应
Transfer-Encoding 报文主体传输编码方式:chunked分块传输(跳到跳)
Pragma http1.1废弃字段,为了兼容,控制缓存时,一般同时指明cache-control: no-cache 与 pragma: no-cache
trailer 在报文主体尾部定义的其他字段
Warning 与缓存相关的警告信息(警告码+详情)

Cache-control字段相关的取值

取值 客户端发起的请求 服务器返回的响应
No-Cache 不要缓存的内容,必须转发至源服务器(其实缓存服务器会向源服务器发起验证,若通过则还是返回缓存) 缓存服务器可以缓存,但是使用前需要验证有效性
No-Store 不缓存请求相关的信息 不缓存响应相关的信息
Public 其他人都可以使用缓存
Private 只有特定用户可以使用缓存
Max-age 请求缓存时间不超过给定值的缓存 资源可以缓存的最大时间(最大缓存有效期)
s-maxage 同max-age,但是特指公共缓存服务器
Min-fresh 请求缓存新鲜时间不小于给定值的缓存
Max-stale 请求过期时间不超过给定值的缓存
Only-if-cached 只要求返回缓存,若无返回504gateway timeout
No-transform 不允许更改某体类型 不允许更改某体类型
Must-revalidate 可缓存,但必须向源服务器验证缓存有效性
Proxy-revalidate 要求中间缓存服务器向源服务器验证有效性,同must-revalidate,但不适用于代理缓存
Cache-extension 扩展字段,可添加新字段 扩展字段,可添加新字段

HTTP响应首部字段

字段 说明
Accept-ranges 服务器是否能处理范围请求:bytes or none
Age 资源从创建到现在的时间
Proxy-authenticate 告知客户端代理所需要的认证信息
www-authenticate http访问认证:告知客户端认证方案
Etag 实体标识(无固定算法,服务器统一分配),分强Etag和弱Etag
Server 服务器的协议、版本等相关信息
Retry-after 告知客户端多久后重试(配合3XX或者503service unavailable),可以是秒数,也可以是时间
Location 资源重定向的URI(配合3XX重定向使用)
Vary 对缓存进行控制:只对源服务器vary指定字段的请求进行缓存

HTTP实体首部字段

字段 说明
Allow 服务器返回某资源支持的所有http方法。当以某一个不支持的方法访问该资源时,服务器返回405 method not allowed,并将所有支持的http方法设置到allow字段返回。
Content-Encoding 实体主体的内容编码方式及优先级:gzip、compress、deflate、identity。
Content-Language 实体主体的自然语言
Content-Length 实体主体的长度(字节B)
Content-MD5 实体主体的校验和,用来确认内容是否完整,但可能会被篡改
Content-Location 返回资源的URI。当返回资源与实际请求对象不同时,返回该字段。
Content-Range 部分请求返回的字节范围。一般206partial content的请求会返回该字段。
Content-Type 实体主体的媒体类型
Expires 资源的过期时间(会优先处理cache-control的max-age)
Last-Modified 资源最后一次修改的日期

HTTP请求首部字段
web性能优化中一个重要的指标TTFB(time to firstbyte),从请求发出到接收到响应的第一个字节开始的时间。

字段 说明
待整理 待整理

为cookie服务的首部字段:
Cookie:管理服务器和客户端的状态(工作机制是用户识别和状态管理)
Cookie使用前会验证其有效期、域名、路径等,所以不会泄露给其他web站点。

字段 说明
Set-Cookie(响应首部) Name = value
Expires:
Path: 可以使用cookie的路径
Domain:
Secure: 只有使用https访问的才可以进行cookie的设置
httpOnly: js脚本无法获取cookie,防止XSS攻击
Cookie(请求首部) 浏览器发送的cookie列表

其他首部字段:
注:区分标准首部和非标准首部的是:X-前缀

字段 说明
X-frame-options(响应首部) 取值:deny or sameorigin,控制资源在其他网站frame标签内的显示问题,防止点击劫持,占用自己网站的流量
X-XSS-protection(响应首部) 取值0 1,控制浏览器对XSS防护的开启
DNT:拒绝个人信息被收集(请求首部) 取值有0 1,拒绝被精准广告追踪的方法
P3P:在线隐私偏好平台(请求首部) 将隐私设置成程序可理解的文件,达到保护用户隐私的目的

你可能感兴趣的:(《图解HTTP》)