1. HTTP协议相关
1.1 浏览器访问网站的过程
从地址栏点击回车之后发生的一些事情,如图:
- 解析地址栏url
- http/https:协议
- www.baidu.com: 域名
- http协议不写端口默认是80端口,https协议不写端口默认是443端口
- 调用本地DNS缓存查询是否知道该域名
- 本地DNS未查询到的话,查找远程DNS服务器获取IP
- 建立TCP协议:三次握手的连接建立机制,默认页签关闭时断开连接:四次挥手断开连接
- 请求和响应数据都转成二进制报文格式进行交互
1.2 三次握手
从知乎看到一篇文章三次握手和四次挥手机制写的很好,三次握手总结图我引用过来了
图片来源深入浅出TCP三次握手 (多图详解) - 知乎 (zhihu.com)
三次握手大致过程:
- 客户端发送向服务器发送标志位SYN=1和序号seq=X
- 服务器收到后,响应发送回标志位SYN=1、确认序号ack=x+1、确认标志ACK=1、服务器序号seq=y
- 客户端收到后,再次向服务器发送确认标志ACK=1、请求序号x+1、确认序号ack=y+1
完成以上第三个步骤后,就成功简历连接,可以开始数据传输
1.3 请求头
- set-cookie常用属性
- set-cookie的站点与当前访问站点一致且cookie未过期,浏览器自动携带cookie(默认过期是关闭浏览器时,可以使用Expires属性设置过期时间)
- path 代表当前站点下的相关路径才使用这个cookie
- HttpOnly设置为true,则不可以使用js操作cookie(document.cookie)
- Content-Type(传输的数据类型)
- application/json:json格式(例如{ “xx”:123 })
- application/x-www-form-urlencoded:表单格式,key-value(例如key=val&key=val)
- multipart/form-data; boundary=xxxx:上传文件(boundary=xxxx 就是区分文件的边界标识)
HTTP常见请求头和常见响应状态码在文章最后附上
2. 浏览器 缓存机制
2.1 强缓存(cache-control优先级高于expires)
- expires(是为了兼容IE)
- 服务器说: expires过期时间日期对象,2021-11-24 22:00:00 => index.html
- 客户端理解:在2021-11-24 22:00:00 以后才向服务器发起请求,在这之前都不用重新发送请求
- 先根据当前的请求,进行尝试命中当前请求, 根据缓存时间来决定是否发起请求
- cache-control(毫秒数)/max-age=时间(以秒为单位)
- 服务器说:你访问的/index.html 在300秒后过期
- 客户端理解: 再次请求同域名下的index.html 是否在上次请求后的300秒内,如果在之内,不请求
2.2 协商缓存(性能更好)
- ETag: => 文件的hash码,文件没有被改变过,计算其大小、特征得出的一个唯一标识,文件更改后eTag变化
- Last-Modified: 最后修改时间
- If-Match: "737060cd8c284d8af7ad3082f209582d"
- If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT
2.3 浏览器缓存流程图
3. 补充信息
3.1 http常见请求头
3.2 http状态码
- 100——客户必须继续发出请求
- 101——客户要求服务器根据请求转换HTTP协议版本
- 200——交易成功
- 201——提示知道新文件的URL
- 202——接受和处理、但处理未完成
- 203——返回信息不确定或不完整
- 204——请求收到,但返回信息为空
- 205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件
- 206——服务器已经完成了部分用户的GET请求
- 300——请求的资源可在多处得到
- 301——删除请求数据
- 302——在其他地址发现了请求数据
- 303——建议客户访问其他URL或访问方式
- 304——客户端已经执行了GET,但文件未变化
- 305——请求的资源必须从服务器指定的地址得到
- 306——前一版本HTTP中使用的代码,现行版本中不再使用
- 307——申明请求的资源临时性删除
- 400——错误请求,如语法错误
- 401——请求授权失败
- 402——保留有效ChargeTo头响应
- 403——请求不允许【服务器自定义拒绝,常见的情况:非百名单访问、连接超负载,统一拒绝,找后端沟通】
- 404——没有发现文件、查询或URl
- 405——用户在Request-Line字段定义的方法不允许
- 406——根据用户发送的Accept拖,请求资源不可访问
- 407——类似401,用户必须首先在代理服务器上得到授权
- 408——客户端没有在用户指定的饿时间内完成请求
- 409——对当前资源状态,请求不能完成
- 410——服务器上不再有此资源且无进一步的参考地址
- 411——服务器拒绝用户定义的Content-Length属性请求
- 412——一个或多个请求头字段在当前请求中错误
- 413——请求的资源大于服务器允许的大小
- 414——请求的资源URL长于服务器允许的长度
- 415——请求资源不支持请求项目格式
- 416——请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求也不包含IfRange请求头字段
- 417——服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下一级服务器不能满足请求
- 500——服务器产生内部错误
- 501——服务器不支持请求的函数
- 502——服务器暂时不可用,有时是为了防止发生系统过载
- 503——服务器过载或暂停维修
- 504——关口过载,服务器使用另一个关口或服务来响应用户,等待时间设定值较长
- 505——服务器不支持或拒绝支请求头中指定的HTTP版本