关于我至今无法全文背诵http相关内容这件事

2021.03.16
评论

HTTP

一.请求方法、用途

  • get:获取数据
  • post:上传数据
  • put:修改数据
  • delete:删除数据
  • head:获取数据元信息
  • connect:建立连接通道,用于代理服务器
  • option:列出可对资源实行的请求方法,用来跨域请求
  • trace:追踪请求-响应的传输路径

常见问题:get和post的区别

  1. get会被浏览器自动缓存下来,post不会
  2. get只能进行url编码,只能接收ASCII 字符,post无限制
  3. get携带参数一般处于url中,而post处于请求体中,post较为安全
  4. get具有幂等性,而post没有
  5. get会在请求时将请求报文一次性发送,而post会先发送header、再发送body

二.返回状态码

  • 1xx:目前是协议处理的中间状态,还需要后续操作。
  • 2xx:成功状态
  • 3xx:重定向状态,资源位置发生变动,需要重新请求
  • 4xx:请求报文有误
  • 5xx:服务器端发生错误

三.一个 tcp 连接能发几个 http 请求

  • 在http1.0协议时,默认情况一个tcp只支持一个http请求,且不支持长链接,在请求发送完成后就会立即断开;如果需要多条保持活跃,则需要在请求头中传入Connection: Keep-Alive,但其依然有部分限制
  • 在http1.1协议后,默认支持长链接,只要tcp不断开则可以一直发送http请求,没有上限

四.cookie与session

cookie指服务器向浏览器发送的一小块数据,他在浏览器下次请求时会携带传向服务器;session指服务器和浏览器的一次会话过程

差别

  • cookie存在浏览器,而session存在服务器
  • cookie 只能保存 ASCII,而session可以保存任何数据
  • cookie能长时间保存,而session一般失效较快,关闭浏览器和服务器都会失效
  • cookie没有session安全,因为存储地方
  • cookie的大小一般只能在4k,而session远大于此

关联

两者可以单独使用,也可以配合使用,配合情况较多。如:浏览器第一次发送请求时,服务器接收并使用session返回用户id,浏览器将id存入cookie,然后第二请求时根据cookie内容请求对应数据

禁用cookie后的登录判断方法

  1. 每个请求都携带一个关键参数
  2. Token。在服务器中输出一串字符串,在请求时携带此字符串

五.网站从输入url到跳转发生了什么

1).网络

  1. 构建请求
  2. 查找强缓存,如果命中,直接走缓存
  3. 解析DNS(域名系统)。由于一般使用的域名,所以需要解析出具体的ip。默认端口80
  4. 构建TCP(传输控制协议)连接。这个阶段首先经历三次握手,来确定建立连接;接着进行数据传输,这里接收方接收到数据后会向发送方发送一条确认接收的消息,如果没接收到则判定丢失,并重新发送(*发送时会将较大的数据包拆分,依次发送后由接收方组装);最后通过四次挥手断开
  5. 发送请求。在tcp确定链接后,浏览器则可以和服务器通信

2).解析

  1. 构建dom树。这个阶段将html字符串解析为dom对象,最终将dom对象压入dom树结构中
  2. 样式计算。首先格式化样式表,渲染引擎将css样式表解析为一个结构化对象styleSheets;接着将样式代名词转换为标准样式(em->px,blod->700,white->#fff等);最终将具体样式绑定到节点,则中间主要为继承和层叠
  3. 生成布局树。遍历生成的dom树,将其添加到布局树(只会处理可见元素,如head中和display:none的内容不会处理)

3).渲染

  1. 建立图层树。对特定的节点进行分层,分为显式合成和隐式合成。前者分为层叠上下文(html根元素、position不为static且应用z-index、opcity不为1等)和需要裁减的元素(文本超出容器宽度,文本需要换行);后者在于当层级低的节点提升为单独图层后,原本比起高的节点都会成为单独图层

  2. 生成绘制列表。这一步渲染引擎将图层的绘制拆分为一个个绘制指令,然后按顺序合成一个绘制列表

  3. 生成图块、位图。将绘制列表交给合成线程,合成线程将图层分块(一般为256\*256、512\*512)

  4. 显示器显示。在上面的操作完成后,浏览器进程中的viz组件接受到命令,将页面内容绘制到内存,然后内存交给显卡

六.其他

  1. cros预请求。需预检的请求,首先使用options发去预检到服务器,通过后才可发送实际请求,可以用处理跨域。只允许get、post、head
  2. tcp三次握手。1.客户端发送请求链接,服务器接收报文段;2.服务器确定报文,返回客户端报文;3.客户端确定报文,向服务器返回最后一段报文
  3. 如何把项目中的http更换为https?在项目搭建时最请求就进行封装,独立basePath,更换时直接更改basePath;可使用<meta http-equiv ="Content-Security-Policy" content="upgrade-insecure-requests">替换