Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HTTP相关系列 二.HTTP、HTTPS、HTTP2 #5

Open
helingjuan opened this issue Sep 7, 2020 · 0 comments
Open

HTTP相关系列 二.HTTP、HTTPS、HTTP2 #5

helingjuan opened this issue Sep 7, 2020 · 0 comments
Labels

Comments

@helingjuan
Copy link
Owner

helingjuan commented Sep 7, 2020

HTTP相关系列 二.HTTP、HTTPS、HTTP2

1 HTTP几个常见状态码

2XX 成功

  • 200 OK, 表示从客户端发来的请求在服务器端被正确处理
  • 204 Not content , 表示请求成功,但相应报文不含实体的主体部分
  • 206 Partial Content,进行范围请求

3XX 重定向

  • 301 moved permanently 永久性重定向,表示资源已被永久分配给新的URL
  • 302 found, 临时性重定向,表示资源临时被分配给了新的URL
  • 303 see other, 表示资源存在着另一个URL,应使用GET方法获取资源
  • 304 not modified, 表示该资源被浏览器缓存了,不需要重新请求服务器
  • 307 temporary redirect ,临时重定向,和302含义相同

4XX 客户端错误

  • 400 bad request ,请求报文存在语法错误
  • 401 unauthorized, 权限不足
  • 403 forbidden, 表示对请求资源的访问被服务器拒绝
  • 404 not Found, 表示在服务器端没有找到请求的资源

5XX 服务端错误

  • 500 internal server error ,表示服务器端在执行请求时发生了错误
  • 502 Bad GateWay ,后端服务挂掉或者压力过大的时候,Nginx接到的请求无法及时传递给后端的服务进行处理,这时候就会报502.
  • 503 service unavaliable, 表示服务器暂时处于超负荷或者正在停机维护,无法处理请求

2 HTTP的基本概念

HTTP(HyperText Transfer Protocol)

超文本传输协议

什么是HTTP的无状态性?

主要是指协议层的无状态性,就是服务器的写一次无需为不同的请求之间建立任何相关关系。但是这并不代表建立在HTTP协议之上的应用程序就无法维持状态

应用层可以通过会话Session来跟踪用户请求之间的相关性,服务器会为每个会话对象绑上一个唯一的会话ID,浏览器可以将会话ID记录在本地缓存LocalStorage或者Cookie里,在后续的请求都带上这个会话ID,服务器就可以为每个请求找到相应的会话状态

HTTP有哪些Method?

  • GET 获取资源
  • POST 创建活修改资源,在RESTFUL规范里POST只用来创建资源
  • PUT 修改资源, 覆盖式全部修改
  • PATCH 修改资源,局部字段修改
  • DELETE 删除资源
  • HEAD 获取资源的元信息,不常用,和GET类似,区别是不返回Body内容,只返回HTTP头信息
  • OPTIONS 跨域相关,预请求

HTTP协议的风险

因为HTTP协议是明文传输的,所以有这么几点风险:

  • 窃听,第三方可以截获并查看你的内容
  • 篡改,修改你的内容
  • 冒充,第三方可以伪装成通信方与你通信

所以就有了HTTPS协议

3. HTTPS

以安全为目标的HTTP通道,就是在HTTP下加入SSL层,HTTP的安全版。
https的SSL加密,是在传输层实现的

https协议的主要作用:建立一个信息安全通道,来确保数据的传输,确保网站的真实性

https协议的工作原理

https的核心在SSL/TSL上,SSL/TSL就是负责加密解密等安全处理的模块
image

流程:

  1. 浏览器发起往服务器的 443 端口发起请求,请求携带了浏览器支持的加密算法和哈希算法。
  2. 服务器收到请求,选择浏览器支持的加密算法和哈希算法。
  3. 服务器下将数字证书返回给浏览器,这里的数字证书可以是向某个可靠机构申请的,也可以是自制的。
  4. 浏览器进入数字证书认证环节,这一部分是浏览器内置的 TSL 完成的
  5. 浏览器将加密的 R 传送给服务器。
  6. 服务器用自己的私钥解密得到 R
  7. 服务器以 R 为密钥使用了对称加密算法加密网页内容并传输给浏览器
  8. 浏览器以 R 为密钥使用之前约定好的解密算法获取网页内容

https协议的优缺点

优点:

  • 可认证用户和服务器,确保数据发送到正确的客户端和服务端
  • HTTPS协议可以防止数据在传输中不被窃取、改变,可以确保数据的完整性
  • HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本

缺点:

  • https握手阶段会比较费时,会使页面加载时间延长50%,增加数据开销
  • SSL证书需要付费,越强大的证书费用越高

4. HTTP和HTTPS的区别?

  • HTTP是明文传输,HTTPS 是加密传输,更加安全
  • HTTPS是在HTTP和SSL的集成,是HTTP的安全版
  • HTTP的默认端口号是80,HTTPS 的默认端口号是443

HTTP连接的创建过程?以及为什么HTTPS 是安全的?

三次握手,客户端向服务端发起请求,服务端回应,表明客户端的发送和服务端的接收能力正常;然后客户端再回应,表明客户端的响应和服务端的发送能力正常;
这样就确保TCP连接创建成功,然后HTTP请求就会在TCP连接上进行请求响应。

因为HTTP是明文传输的,而HTTP基于SSL加密的HTTP协议,在传输层进行加密,确保了数据不会被篡改和窃取,所以HTTPS是相对安全的。因为互联网上是没有绝对安全的,所以HTTPS只是相对来说安全,因为要破解它相对来说比较费劲。

5. HTTP2

HTTP2 是为了解决HTTP/1.1存在的问题而出现的。
那HTTP/1.1 有什么问题呢?

  1. TCP连接串行,在同一时间,针对统一域名下的请求有一定数量限制,超过限制会被阻塞,后一个HTTP请求只能等待前一个结束后,才开始
  2. 数据传输是以字符串形式
  3. 服务器端只能响应客户端请求,不可以主动推送消息

那么久很明显的看出HTTP2的特点

  1. 二进制传输
  2. 信道复用:TCP连接上可以并行地发起请求,就是说一个网站只需要一个TCP连接即可,减少了TCP连接的握手挥手和HTTP请求的串行等待时间,从而提升了访问速度
  3. 头信息压缩
  4. 服务端可以主动推送消息给客户端

HTTP2的信道复用为什么能提高性能?

HTTP2较HTTP1.1 最大的特性是 信道复用,这样就可以大大提升了访问速度
因为该网站只需要一个TCP连接,且TCP连接上的HTTP请求可以并行地发起请求,就意味着不需要等待,减少了非常多时间,这个在请求数多的网站来说影响巨大!

参考资料

@helingjuan helingjuan added the HTTP label Sep 7, 2020
@helingjuan helingjuan changed the title HTTP相关系列 之 二.HTTP、HTTPS、HTTP2 HTTP相关系列 二.HTTP、HTTPS、HTTP2 Sep 7, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant