HTTP

HTTP

URL和URI的区别:URL是URI的子集,在URI的基础上增加了定位能力,URI还有URN,无法定位资源.
PUT不带验证机制,一般不使用,且只能完全替换资源,而PATCH允许部分修改,OPTIONS查询支持的方法,查询指定的URL能够支持的方法。CONNECT要求与代理服务器通信时建立隧道,使用SSL和TLS协议把通信内容加密后经过网络隧道传输,TRACE追踪路径,会把通信路径返回。

  • 状态码:1XX为信息性状态码。接收的请求正在被处理,2XX为请求正常处理,3XX为重定向,附加操作以完成请求,4XX客户端错误,5XX服务器错误。
    记住几个经典的:304 Not Modified:如果请求报文首部的一些条件不满足时返回。400请求报文中存在语法错误,401请求认证失败,500请求时发生错误,503服务器超负载或者停机维修.

连接管理:

  1. 短连接与长连接: 在请求访问时会有多张图片的传输,此时使用长连接,此时使用Connection : Keep-Alive.
  2. 流水线:默认情况下,是按顺序发送请求,在同一长连接中,可以连续发送多个请求,不等待响应返回。

Cookie:新的方式可以用storage和IndexedDB放本地,使用Cookie时会放在请求首部字段发送给服务器,存在两种Cookie,持久性(过期后才删除)和会话期(关闭浏览器自动删除),Domain标识符指定哪些主机可以接受Cookie,标记为HttpOnly的Cookie不能被Js调用,一定程度上避免XSS攻击,标记为Secure的Cookie只能通过HTTPS加密的请求使用。

Session:可以存在服务器端,优点是效率更高且可以存各种类型的数据,登录时提交用户名和密码,验证正确后把用户信息存储在Redis中,在Redis中的Key为SessionID,响应报文中的Set-Cookie首部字段包含这个SessionID,并存进浏览器中,之后请求时使用这个SessionID在Redis中取出信息即可。

缓存:服务器和客户端都可进行缓存,cache-control为no-store时不进行任何缓存,no-cache时需要先确认缓存有效性,private规定资源作为私有缓存(在浏览器中),public为公有缓存(存在代理服务器中).

缓存验证:把缓存资源中的ETag存在If-None-Match首部,判断缓存资源和最新ETag是否一致,如果一致缓存资源有效,返回304 Not Modified

内容协商:根据内容协商返回最合适的内容:

  1. 服务器驱动型:服务器根据HTTP首部字段返回特定的资源,实现复杂,信息冗长
  2. 代理驱动型:客户端发送包含Accept-Language字段请求后,源服务器返回的响应包含Vary:Accept-Language内容,缓存服务器对这个响应进行缓存后,在下一次访问同一个URL资源时,Accept-Language与缓存中对应值相同时才返回缓存。

内容编码:将实体主体进行压缩,减少传输的数据量,浏览器发送的Accept-Encoding包含支持的算法,服务器使用Content-Encoding告诉浏览器使用了哪种算法。

范围请求:网络出现中断时,服务器只发送了一部分数据,客户端可以只请求未发送部分,方法有:

  1. Range:在请求报文中加入Range: bytes=0-1023设置请求范围。
  2. Accept-Ranges:使用Accept-Ranges: bytes告知客户端是否可以处理范围请求.
  3. 响应状态码一般使用206,如果返回200代表不支持范围请求。

分块传输编码:可以将数据分割成多个块,让浏览器逐步显示。

多部分对象集合:一个报文主体可有多种类型的实体同时发送,用boundary分开,Content-Type: multipart/form-data; boundary=AaB03x

虚拟主机:采用虚拟主机让一台服务器拥有多个域名,可看成多个服务器.

通信数据转发:

  1. 代理的作用:缓存,负载均衡,网络访问控制,访问日志记录。
  2. 网关:把HTTP转为其它协议通信,请求非HTTP服务器的服务。
  3. 隧道:采用SSL建立一条安全的通信线路。

HTTPS

让HTTP和SSL通信,再由SSL和TCP通信,从而实现加密,认证,网站性保护.

加密:

  1. 对称密钥加密:加密解密使用同一密钥,可是不够安全。
  2. 非对称加密:公钥所有人可见,发送方拿到公钥进行加密,接收方拿到后用私钥解密。
  3. HTTPS采用的加密:首先使用非对称加密传输对称加密的密钥,即先非对称加密,再对称加密。

认证:

申请CA后,CA会在判明申请者的身份后对已经申请的公钥做数字签名,把公钥放进证书绑定,然后服务器把证书发送给客户端,客户端拿到公钥后使用数字签名验证,验证通过就可以进行通信了。

完整性保护:HTTP也有MD5摘要功能,但内容篡改后无法意识到,而HTTPS结合了加密和认证,如果报文被篡改,也很难重新计算摘要,因为无法轻易获得明文。

HTTP/2.0的特点:

  1. 只有一个TCP连接
  2. 一个数据流有一个唯一标识符和可选优先级。
  3. 消息是与逻辑请求和响应对应的完整的一系列帧。
  4. 帧是最小通信单位,来自不同的数据流的帧可以交错发送,收集后使用标识符进行组装。

首部压缩:
HTTP/2.0要求客户端与服务端维护更新同一个之前见过的首部字段表,所以可以基于之前的表:

安全的方法:GET,HEAD,OPTIONS.不安全的方法有:POST,PUT,DELETE.

幂等性,同样的请求执行一次和执行多次结果相同,服务器状态相同。

posted @ 2022-11-03 23:01  梦呓qwq  阅读(28)  评论(0编辑  收藏  举报