HTTP训练

87 阅读9分钟

HTTP请求有哪些方式,分别用在哪些场景下*

方式:GET、POST、PUT、DELETE、OPTIONS

GET和POST请求的区别:

场景上:

  • GET用于获取资源,不对服务资源做更改提交的请求,特点:幂等(一次和多次请求都是一样的)
  • POST会对服务资源做更改,进而影响数据,特点:不幂等

状态:

  • 浏览器不会对post请求进行主动缓存
  • 一般会对get请求进行缓存

安全性:

  • get的参数放在URL,请求参数会以请求路径明文方式进行发送
  • post的参数放在请求体,使用https时,可以被加密

参数:

  • post支持更多种类的请求参数数据类型

POST和PUT的区别:

对于更新的定义:

  • put请求通常会修改数据的内容,但不会增加种类或数量(更新状态)
  • post请求既可以修改内容,同时也可能增加类型种类(创建状态)

OPTIONS请求方法及使用场景:

options是一种http请求方法,获取当前服务器的状态、性能、特征(有哪些接收或不接收的方法);检查访问权限

在发生正式的请求之前,先进行一次预检请求,看服务端返回一些信息,浏览器拿到之后,看后台是否允许进行访问

了解http协议的头部算法吗?如何降低开销?

HPACK算法:

  • 在客户端和服务端共同维护建立字典,引用索引来标识重复的字符串(如,content-type可以进行索引)
  • 通过编码算法压缩字符串,从而进一步减小头的大小

有了字典之后,客户端和服务端利用字典来跟踪和实时存储之前发送的数据值,实时记忆,对于相同的数据,不再通过每次请求和响应重复发送

字典的生命周期是如何的?如何保证被更新的?

  • 首部表,http连接期内,始终保证存在并独立的,由客户端和服务端共同演进更新
  • 每次新增的首部键值对,都会被追加到末尾,更新的值会替换原有值的位置

请求头和响应头

了解的请求和响应头分别有哪些?常见的content-type有哪些?

请求头:浏览器告知服务端,自己的能力和配置

  • Accept:*,表示的是浏览器的能力
  • connection:浏览器和服务端之间的连接类型
  • cookie:页面设置的内容(服务端注入的有关权限身份相关的内容,页面读取)
  • host:页面所在的域
  • referer:表示当前页面的运行身份
  • user-agent:判断执行环境(浏览器类型、操作系统版本、iPhone、Android)

响应头:服务端回复告知自己能力

  • Date:当前请求发送的时间
  • server:当前服务器
  • connection:浏览器和服务端之间的连接类型
  • cache-control:http缓存
  • content-type:表示文档类型

content-type属性值:

  • application/x-www-form-urlencoded:原生form表单形式
  • multipart/form-data:post请求、表单提交
  • application/json:序列化后的JSON字符串

http状态码

简述了解的状态码有哪些?

  • 1xx:信息类,接收请求并且正在处理
  • 2xx:成功,请求正常并且处理完毕(200:OK;204:No content,正确处理,但返回为空;206:客户端进行了范围请求,请求头中有content-range,部分参数索引或部分时间维度去筛选)
  • 3xx:重定向,需要进行附加操作完成当前请求(301:永久重定向,场景是域名、资源地址换了;302:临时重定向,场景是指向某个临时活动;303:请求的资源中含有另一个url,使用get去定向的请求另一个资源;304:跟浏览器缓存相关,代表本次请求附带的条件,未满足服务器端允许访问的要求,浏览器会使用之前的缓存去请求数据)
  • 4xx:客户端错误,服务端无法根据当前请求参数处理(400:请求报文出现了语法错误;401:认证失败;403:明确拒绝,黑名单;404:服务端找不到对应资源,当服务端拒绝查询资源,且不想说明理由的时候也会返回404;405:请求方式不被允许)
  • 5xx:服务端处理请求错误(500:执行请求发生错误;501:不支持某个功能操作;503:超负荷或停机维护;)

302、303、307三种重定向的区别:

  • 302:http1.0中出现的重定向,http1.1中细化派生出了303、307
  • 303:当前的请求应该是使用get获取,但使用了post,将当前的post请求变为get请求进行重定向
  • 307:当前的重定向会严格按照浏览器的诉求,不会从post变成get

http不同的版本,1.0、1.1、2.0

http1.0和1.1之间有哪些区别?

连接上:

  • 持久型连接:1.1通过持久型连接能够把多个http请求复用到同一个TCP连接上(建立一次TCP,发送多次请求)

资源上:

  • 1.1不用整体的资源查询,通过range来做部分查询

缓存上:

  • 1.0:modified-xx expires 判断是否命中缓存
  • 1.1:etag if-match 根据条件语句,缓存策略主动化,缓存策略更多

http1.1和2.0的区别?

二进制协议:

  • 1.1:头信息是文本,数据体是文本或二进制
  • 2.0:头信息和数据体都是二进制,统称为信息流,在流中以帧为概念(数据帧)

多路复用:

  • 2.0:一方面复用TCP连接,同时在连接中,同时发送多个请求或者回应(所有的请求复用同一个通路,多条通路可以同时发送)

数据流:

  • 2.0:引入了数据流概念,并且以数据流ID进行索引(数据包不按顺序发送)

头信息压缩:

  • 2.0:对头信息进行字典化索引以及压缩

服务端推送:

  • 2.0:允许服务端主动向客户端未经请求的推送资源(仅限资源,而非动态数据)

keep-alive

了解什么是keep-alive?建立过程是什么样的,使用场景?优缺点?

  • 1.0:默认是短链接的形式,需要主动在connection中打开keep-alive,开启长链接
  • 1.1:默认是长链接的形式,需要主动关闭

建立过程:

  • 客户端发送报文夹带kepp-alive的头配置
  • 服务端接收并处理,并返回keep-alive的返回头
  • 客户端服务端共同维持当前长链接建立

断开链接:

服务端主动断开:

  • 需要等待客户端请求
  • 服务端返回请求,并且不带keep-alive
  • 关闭连接

客户端主动断开:

  • 客户端请求头connection带上close字段
  • 服务端接受受处理并断开连接
  • 客户端接收资源并关闭连接

好处:

  • 服务端:CPU和内存占用都下降了
  • 请求和回复复用管道变少:降低了拥堵
  • 减少后续请求的延时
  • 无需每次异常都关闭TCP

缺点:

  • 长时间的连接可能会导致无效占用,浪费系统资源

https和websocket

https和http的区别

https经由http进行通信,利用了SSL/TLS来加密数据包,实现了数据交换的可行性和安全性

http采用的是明文传输存在安全性问题

SSL/TLS利用了身份验证+信息加密+完整性校验

结合了http的传输能力同时,对发起的http请求数据进行加密操作,对接受到的http内容进行解密

使用https不需要对http本身做改造

SSL/TLS是什么?作用和工作原理?

传输层安全协议:在应用层http和tcp之间的,不具有http传输的能力,也没有tcp建立通道的能力,是一层安全性协议

主要依赖是散列函数hash、对称加密、非对称加密

  • 散列函数hash:MD5、SHA1、SHA256,特点:单向不可逆,且输入敏感型,输出长度固定,任何对于数据的修改都会导致值的变化,用来验证信息的完整性
  • 对称加密:特点:两者共用一种秘钥,同时用其进行加解密,问题:如何保证秘钥的传输安全性
  • 非对称加密:利用公钥和对应私钥的互相加密能力进行加密,问题:中间截取问题,由此演变出了数字证书:可信度很高的机构

websocket基础原理?使用方式特点?

是全双工的网络技术,属于应用层协议,基于TCP传输协议,可以复用http的通道

原理:

  • 请求:客户端向服务端发送一个通知notify,包含接收者id和本身的事件event
  • 推送:服务端接收到之后,立即通知所有连接的客户端,只有id对应的客户端响应当前推送的反馈

特点:实时性强

DNS与网络协议

理解DNS的作用和传输机制?

作用:

  • 将域名解析为ip地址,客户端会向DNS服务器发送查询请求
  • 服务器返回给我们对应的ip地址

传输机制:

  • 迭代查询:每次请求都会单次访问不同级别的DNS服务器(可能会发送多次请求)
  • 递归查询:只向目标服务器发送一次请求,优先自我查找,向下一级服务器进行进一步查询,查询到结果再一层一层返回(只请求一次)

OSI七层模型、TCP模型

image.png

TCP和UDP区别

  • TCP:有握手机制、校验、安全保障
  • TCP注重完整性、确定性的领域
  • UDP注重分发速率
  • 无所谓优劣,只有应用场景的不同