HTTP协议_请求头_状态码、三次握手、浏览器缓存机制

44 阅读5分钟

1. HTTP协议相关

1.1 浏览器访问网站的过程

从地址栏点击回车之后发生的一些事情,如图: image.png

  1. 解析地址栏url
  • http/https:协议
  • www.baidu.com: 域名
  • http协议不写端口默认是80端口,https协议不写端口默认是443端口
  1. 调用本地DNS缓存查询是否知道该域名
  2. 本地DNS未查询到的话,查找远程DNS服务器获取IP
  • 建立TCP协议:三次握手的连接建立机制,默认页签关闭时断开连接:四次挥手断开连接
  • 请求和响应数据都转成二进制报文格式进行交互
1.2 三次握手

从知乎看到一篇文章三次握手和四次挥手机制写的很好,三次握手总结图我引用过来了 image.png 图片来源深入浅出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 请求头
  1. set-cookie常用属性
  • set-cookie的站点与当前访问站点一致且cookie未过期,浏览器自动携带cookie(默认过期是关闭浏览器时,可以使用Expires属性设置过期时间)
  • path 代表当前站点下的相关路径才使用这个cookie
  • HttpOnly设置为true,则不可以使用js操作cookie(document.cookie)
  1. 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)
  1. expires(是为了兼容IE)
  • 服务器说: expires过期时间日期对象,2021-11-24 22:00:00 => index.html
  • 客户端理解:在2021-11-24 22:00:00 以后才向服务器发起请求,在这之前都不用重新发送请求
  • 先根据当前的请求,进行尝试命中当前请求, 根据缓存时间来决定是否发起请求
  1. cache-control(毫秒数)/max-age=时间(以秒为单位)
  • 服务器说:你访问的/index.html 在300秒后过期
  • 客户端理解: 再次请求同域名下的index.html 是否在上次请求后的300秒内,如果在之内,不请求
2.2 协商缓存(性能更好)
  1. ETag: => 文件的hash码,文件没有被改变过,计算其大小、特征得出的一个唯一标识,文件更改后eTag变化
  2. Last-Modified: 最后修改时间
  3. If-Match: "737060cd8c284d8af7ad3082f209582d"
  4. If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT
2.3 浏览器缓存流程图

image.png

3. 补充信息

3.1 http常见请求头

image.png

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版本