这是我参与「第四届青训营 」笔记创作活动的第8天
HTTP概述
概念
-
HTTP:(Hyper Text Transfer Protocol),超文本传输协议
-
HTTP是应用层协议
-
HTTP是可靠传输协议,基于TCP/IP协议“尽量”保证数据送达
-
HTTP使用了请求响应模式,客户端主动发送请求,服务端回复请求
-
HTTP是简单可扩展的,可以任意添加头字段实现任意功能
-
HTTP本质上是无状态的,每个请求都是相互独立,毫无关联的,协议不要求客户端和服务端记录请求相关的信息
TCP IP DNS
与HTTP密不可分的协议:TCP,IP,DNS
-
确保可靠性传输的TCP协议:TCP位于传输层提供可靠的字节流服务,TCP通过三次握手建立连接。
-
负责传输的IP协议:作用是把各种数据包传送给对方,要保证确实传送到对方那里,两个重要的条件是IP地址和MAC地址
-
负责域名解析的DNS协议:DNS将域名转换为IP地址。
各协议与HTTP关系如图所示:
URL与URI
-
URL:统一资源定位符,表示资源的地点
-
URI:统一资源标识符,用字符串表示某一互联网资源,所以URL相当于URI的子集
协议分析
HTTP 1.0/1.1区别
-
长连接:HTTP1.0中是默认非持久连接的,每次通讯都要重新建立一个连接,可以通过
keep-alive参数来设置成长连接,但HTTP1.1中是默认持久连接的,就可以发送多个请求,提高了性能。 -
节约宽带:HTTP1.1支持只发送header信息,如果服务器认为客户端有权限请求服务器,返回状态码100,否则返回401,客户端接收到100,才能开始发送body信息,节约了宽带。(HTTP还支持传送内容的一部分,这样当客户端已经有一部分资源的时候,只需要向服务端请求另一部分资源)
-
HOST域:HTTP1.1才支持HOST域,即Web Server上的多个虚拟栈可以享受同一个IP和端口
-
错误通知的处理:HTTP1.1新增了24个错误状态状态码,如409(请求的资源与当前资源状态冲突),410(服务器的某个资源被永久性删除)等
-
缓存策略:在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略
HTTP 1.1/2.0区别
-
多路复用:HTTP2.0运用了多路复用的技术,做到同一个连接并发处理多个请求,并发请求的数量比HTTP1.1大了好几个数量级
-
数据压缩:HTTP2.0支持header数据的压缩,这样数据体积小了,在网络上传输就会更快。
-
服务器推送:为了改善延迟,HTTP2.0引入了server push,它允许服务端推送资源给浏览器,在浏览器明确地请求之前,免得客户端再次创建连接发送请求到服务器端获取。这样客户端可以直接从本地加载这些资源,不用再通过网络。
-
新的二进制格式:HTTP1.x的解析都是基于文本,文本的格式具有多样性且由诸多缺陷,HTTP2.0的文本格式改用二进制格式,更为简单,且更为稳定和安全。
HTTP方法
常用请求头和响应头
HTTP状态码
-
200:客户端请求成功
-
301:永久重定向,资源(网页等)被永久转移到其他URL
-
302:临时重定向
-
401:请求未经授权
-
404:请求资源不存在,可能是输错了URL
-
500:服务器内部发生了不可预期的错误
-
504:网关或者代理的服务器无法在规定的时间内获得想要的响应
HTTPS
HTTP + 加密 + 认证 + 完整保护 = HTTPS
-
使用两把密钥的公开密钥加密:使用一对非对称的密钥,一把私有密钥,一把公开密钥,使用公开加密的方式,发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息之后,用自己的私有密钥进行解密
-
采用混合加密模式:HTTPS采用共享密钥加密和公开密钥加密两者并用的混合加密模式。若密钥能够实现安全交换,则会考虑仅使用公开密钥加密的方式来通信,但是与共享密钥加密的方式速度更慢。
-
经过TSL/SSL加密