http1.0/http1.1/http2的区别
HTTP1.0
- 只提供简单的认证,用户名和密码都没有进行加密操作,不安全,很
容易被窃取; - 只支持短连接,每次传输数据前都需要建立连接,传输数据后断开连接,再次传输数据时需要再重新建立连接,性能很低;
- 只用header中的if-Modified-since和Expires来作为缓存失效的标准;
- 不支持断点续传,也就是每次传输都只能传输整个页面和数据;
- 认为一个计算机只能绑定一个ip,所以在请求消息中并没有加入主机名。
HTTP1.1
- 使用了摘要算法来进行安全检测;
- 默认为长连接,可以通过Connection中的keep-alive来设置,这样只会在第一次传输的时候建立连接,在传输完的时候断开连接,提高了性能;
- 还增加了很多缓存失效的标准,比如if-Match,if-None-Match;
- 支持断点续传,可以每次只传输一部分,可以通过range来设置;
- 使用了虚拟网络,一台物理服务器上可以有多台主机,这些主机共享一个ip地址。
HTTP2.0
- 使用了头部压缩,因为头部中可能会出现很多字段,而请求体中的内容可能就只有几个字节,就会出现头部偏重的现象,使用了HPACK来进行头部压缩;
- 使用了二进制数据,使用了更靠近tcp/ip的二进制数据格式,是解析的效率大大提高;
- 更注重安全,安全已经得到很大的重视,HTTP2.0一般用在HTTPS上;
- 多路复用,每一个请求都可以用作连接共享,一个请求对应一个ip,一个连接就可以有多个请求。
常见状态码
- 200:请求成功。
- 301:永久移动,所请求的资源已经永久的移动到新的URI中,返回的信息中包含着新的URI,浏览器会自动定位到新的URI,以后所有的请求都需要用新的URI。
- 302:临时移动,还用以前的URI。
- 307:重定向。
- 304:未改变,返回此状态码并不会返回任何信息。浏览器一般会缓存访问过的资源,然后给一个头部信息,告诉服务器只返回给定日期之后改变的资源。
- 400:语法错误。
- 401:未登录,需要进行身份验证。
- 403:登录了但是权限不够,拒绝访问,比如不是VIP,充的钱太少了。
- 404:找不到。
- 405:不支持此方法。
- 500:服务器在执行过程中出错。
- 502:网关或代理服务器,未能从上游服务器获得有效资源。
- 504:网关或代理服务器,未能及时从上游服务器或辅助服务器获得资源。
http和https的区别
- http默认端口为80;https默认端口为443。
- http都是明文传输的,在传输路途中很容易被窃取和篡改,不安全;https在传输前加密,在接收后解密,是比较安全的。
- https需要向CA机构认证,一般需要费用。
对称加密
- 加密和解密用的是同一把秘钥,这把秘钥既能加密也能解密,加密和解密的速度比较快,这把秘钥可以任意发布,在客户端可能会被窃取。
非对称加密
- 将钥匙分成公钥和私钥,公钥在客户端,私钥在服务器,公钥加密的数据只能由私钥解密,私钥加密的数据只能由公钥来解密,效率可能不太高,但是安全。
https建立连接过程
https在第一次传输的时候用的是非对称加密,之后用的是对称加密的方式。
- 客户端向服务器发送请求,请求建立SSL连接;
- 服务器收到客户端消息后,将服务器网站的证书包含公钥发送给客户端;
- 客户端校验证书的合法性,包括证书的有效期,是否是自己请求的网站的证书等一些信息,如果校验成功,就随机生成一个会话秘钥,然后用公钥进行加密,发送给服务器;
- 服务器用私钥对数据进行解密就可以获得客户端生成的秘钥,然后将要发送的数据用会话秘钥进行加密,返回给客户端;
- 之后客户端和服务器都用这个会话秘钥来进行加密解密。