HTTP重点知识复习 | 青训营笔记 第 6 天

84 阅读8分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天

HTTP重点知识复习

浏览器中输入url后发生了什么

该过程可以分为以下六步:

DNS域名解析=>建立TCP连接=>发起HTTP请求=>接受响应结果=>浏览器解析html=>浏览器布局渲染

  1. DNS域名解析
    在浏览器DNS缓存中搜索
    在操作系统DNS缓存中搜索
    读取系统hosts文件,查找其中是否有对应的ip
    向本地配置的首选DNS服务器发起域名解析请求
  2. 建立TCP连接
    为了准确地传输数据,TCP协议采用了三次握手策略。发送端首先发送一个带SYN(synchronize)标志的数据包给接收方,接收方收到后,回传一个带有SYN/ACK(acknowledegment)标志的数据包以示传达确认信息。最后发送方再回传一个带ACK标志的数据包,代表握手结束。在这过程中若出现问题中断,TCP会再次发送相同的数据包。
    TCP是一个端到端的可靠的面向连接的协议,所以HTTP基于传输层TCP协议不用担心数据的传输的各种问题。
  3. 发起HTTP请求
GET:获取资源
POST:传输实体主体
HEAD:获取报文首部
PUT:传输文件
DELETE:删除文件
OPTIONS:询问支持的方法
TRACE:追踪路径

请求报文:


4. 接受响应结果

1**:信息性状态码
2**:成功状态码
200:OK 请求正常处理
204:No Content请求处理成功,但没有资源可返回
206:Partial Content对资源的某一部分的请求
3**:重定向状态码
301:Moved Permanently 永久重定向
302:Found 临时性重定向
304Not Modified 缓存中读取
4**:客户端错误状态码
400:Bad Request 请求报文中存在语法错误
401:Unauthorized需要有通过Http认证的认证信息
403:Forbidden访问被拒绝
404Not Found无法找到请求资源
5**:服务器错误状态码
500:Internal Server Error 服务器端在执行时发生错误
503:Service Unavailable 服务器处于超负载或者正在进行停机维护

响应报文:


5. 浏览器解析html
浏览器按顺序解析html文件,构建DOM树,在解析到外部的css和js文件时,向服务器发起请求下载资源,若是下载css文件,则解析器会在下载的同时继续解析后面的html来构建DOM树,则在下载js文件和执行它时,解析器会停止对html的解析。这便出现了js阻塞问题。
预加载器:
当浏览器被脚本文件阻塞时,预加载器(一个轻量级的解析器)会继续解析后面的html,寻找需要下载的资源。如果发现有需要下载的资源,预加载器在开始接收这些资源。预加载器只能检索HTML标签中的URL,无法检测到使用脚本添加的URL,这些资源要等脚本代码执行时才会获取。
注: 预解析并不改变Dom树,它将这个工作留给主解析过程

浏览器解析css,形成CSSOM树,当DOM树构建完成后,浏览器引擎通过DOM树和CSSOM树构造出渲染树。渲染树中包含可视节点的样式信息(不可见节点将不会被添加到渲染树中,如:head元素和display值为none的元素)

值得注意的是,这个过程是逐步完成的,为了更好的用户体验,渲染引擎将会尽可能早的将内容呈现到屏幕上,并不会等到所有的html都解析完成之后再去构建和布局render树。它是解析完一部分内容就显示一部分内容,同时,可能还在通过网络下载其余内容。

  1. 浏览器布局渲染
    布局:通过计算得到每个渲染对象在可视区域中的具体位置信息(大小和位置),这是一个递归的过程。
    绘制:将计算好的每个像素点信息绘制在屏幕上
    在页面显示的过程中会多次进行Reflow和Repaint操作,而Reflow的成本比Repaint的成本高得多的多。因为Repaint只是将某个部分进行重新绘制而不用改变页面的布局,如:改变了某个元素的背景颜色。而如果将元素的display属性由block改为none则需要Reflow。

减少rpaint和reflow 方法

常见的HTTP状态码

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

1xx:提示信息-表示请求已被接受,继续处理。

  • 100 客户必须继续发出请求;
  • 101 客户要求服务器根据请求转换HTTP协议版本。

2xx:成功-表示请求已被成功接受、理解、接受

  • 200 OK(成功)服务器已成功处理了请求。通常,这表示服务器提供了请求的网页;
  • 201(已创建)请求成功并且服务器创建了新的资源;
  • 202(已接受)服务器已接收请求,但尚未处理。

3xx:重定向-要完成请求必须进行更进一步的操作

  • 300(多种选择)针对请求,服务器可执行多种操作。服务器可根据请求者选取一项操作,或者提供操作列表供请求者选择;
  • 301 Moved Permanently(永久移动-重定向) 请求的网站已永久移动到新位置服务器 返回此响应(对GET、HEAD请求的响应),自动转移到新位置;
  • 302 Found(临时移动-重定向)服务器目前从不同位置的网页响应请求,但请求者继续使用原位置进行请求;
  • 303 See Other:表示请求的资源被分配了新的URL,应使用GET方法定向获取请求的资源;
  • 302与303的区别:后者明确表示客户端应当采用GET方式获取资源
  • 304 Not Modified:表示客户端发送附带条件(是指采用GET方法的请求报文中包含if-Match、If-Modified-Since、If-None-Match、If-Range、If-Unmodified-Since中任一首部)的请求时,服务器端允许访问资源,但是请求为满足条件的情况下返回改状态码;
  • 307 Temporary Redirect:临时重定向,与303有着相同的含义,307会遵照浏览器标准不会从POST变成GET;(不同浏览器可能会出现不同的情况)。

4xx:客户端错误-请求有语法错误或请求无法实现

  • 400 Bad Request(错误请求)服务器不理解请求的语法;
  • 401 Unauthorized(未授权) 发送的请求需要有通过HTTP认证(BASIC认证,DIGEST认证)的认证信息。请求要求身份验证。如需要登陆的网页。
  • 403 Forbidden(禁止)服务器拒绝请求,对请求资源的访问被服务器拒绝了,(权限,未授权IP等);
  • 404 Not Found (未找到):服务器上没有请求的资源。路径错误等,也可以在服务器拒绝请求但不想给拒绝原因时使用。

5xx:服务器端错误-服务器未能实现合法的请求

  • 500 Internal Server Error(服务器内部错误) 服务器遇到错误,无法完成请求,服务器端在执行请求时发生了错误。也有可能是web应用存在bug或某些临时故障;
  • 501 (尚未实施) 服务器不具备完成请求的功能。例如服务器无法识别请求方法;
  • 502 (错误网关) 服务器作为网关或者代理,从上游服务器收到无效响应;
  • 503 Service Unavailable(服务不可用)服务器目前无法使用(由于超载或者停机维护),现在无法处理请求,通常只是暂时状态;
  • 504(网关超时)服务器作为网关或者代理,但是没有及时从上游服务器收到请求;
  • 505(HTTP版本不支持) 服务器不支持请求中所使用的HTTP协议版本。
1**:信息性状态码
2**:成功状态码
200:OK 请求正常处理
204:No Content请求处理成功,但没有资源可返回
206:Partial Content对资源的某一部分的请求
3**:重定向状态码
301:Moved Permanently 永久重定向
302:Found 临时性重定向
304Not Modified 缓存中读取
4**:客户端错误状态码
400:Bad Request 请求报文中存在语法错误
401:Unauthorized需要有通过Http认证的认证信息
403:Forbidden访问被拒绝
404Not Found无法找到请求资源
5**:服务器错误状态码
500:Internal Server Error 服务器端在执行时发生错误
503:Service Unavailable 服务器处于超负载或者正在进行停机维护