JAVAWEB开发中对HTTP协议的学习(持续补充更正中。。。)

HTTP协议

最近在做WEB开发,对HTTP的一些认识和学习进行总结



一、协议特点

1.1、支持客户端/服务端模式

是一种请求/响应模式的协议。

1.2、简单快速

当客户端向服务端请求时,只需要传输请求方法和路径,就能访问。

1.3、灵活

HTTP允许传输任意类型的数据对象,正在传输的类型由Content-Type(Content-Type是HTTP包中用来表示内容类型的标识)加以标记。

1.4、无连接

每请求一次,就释放一次连接,每次连接只能处理一个请求,优点就是实现简单,不会一直占用资源。这是针对HTTP1.0来说的,后续版本出现了长链接,以解决效率问题。当HTTP协议头部中字段Connection:keep-alive表示支持长链接。

1.5、无状态

指对于事务处理没有记忆能力,意味着后续处理如果需要前面的信息,则必须重传,从而可能导致传输的数据量较大。但这同时也以为这不需要前面信息时可以更快地响应。于是session和cookie应运而生。

二、TCP连接

2.1、TCP三次握手

  • 第一次握手:客户端发送带有SYN标志的数据包到服务端;客户端确认自己发送正常。
  • 第二次握手:服务端发送带有SYN/ACK标志的数据包到客户端:客户端确认自己发送、接收正常,确认对方发送、接收正常;服务端确认自己接收正常,对方发送正常。
  • 第三次握手:客户端发送带有ACK标志的数据包到服务端:客户端确认自己发送、接收正常,确认对方发送、接收正常;服务端确认自己发送、接收正常,对方发送、接收正常。

需要三次握手才能让双方确认自己和对方都是正常的。

2.2、TCP报文包

TCP头信息+TCP数据体
TCP头信息包含了以下6种控制位:

  1. URG: urgent data,这是一条紧急信息;
  2. ACK:确认已收到
  3. PSH:提示接收端应用程序应该立即从TCP接收缓冲区中读走数据
  4. RST:表示要求对方重新建立连接
  5. SYN:表示请求建立一个连接
  6. FIN:表示通知对方本端要关闭连接了

三、断开连接(HTTP版本、四次挥手和HTTPS)

3.1、HTTP版本

3.1.1 HTTP1.0
每一次请求,会建立一个TCP连接,完成响应后,TCP连接断开,下次请求时会重新建立TCP连接。

3.1.2 HTTP1.1
一次请求/响应完成后,允许不断开TCP连接,后续的请求/响应直接使用这个TCP连接,而不再建立新连接。即长连接,一次TCP连接允许多次HTTP会话。浏览器在请求时请求头会携带一个参数:Connection:keep-alive,表示浏览器要求与服务器建立长链接,服务器也可以设置是否愿意建立长连接。
请求头
3.1.3 HTTP2.0

  • 同域名的所有通信都在单个连接完成,更高效,避免频繁建立TCP连接;
  • 单个连接可以承载任意数量的双向数据流;
  • 多路复用的流。数据流以消息的形式发送,而消息又由一个或多个帧组成,多个帧之间可以乱序发送,因为根据帧首部的流标识可以重新组装。
  • HPACK,HTTP/2头部压缩,使用“首部表”来跟踪和存储之前发送的键-值对,对于相同的数据,不再通过每次请求和响应发送。

二进制协议
前三点说明:HTTP1.1虽然可以建立长连接,但是为了实现高并发,不得不使用多个TCP连接的方式,但不同浏览器对于多开的数量有限制。在HTTP2.0中,引入了流的概念,可以在一条 TCP中乱序流水线的发送和接收流,再在终点组装header和data。

3.2、四次挥手

  • 客户端发出连接释放报文,并且停止发送数据
  • 服务端收到连接释放报文,发出确认报文。
  • 服务端将最后的数据发送完毕,向客户端发送连接释放报文
  • 客户端收到服务器的连接释放报文后,发出确认,客户端等待2MSL后关闭;服务器收到客户端发出的确认后进入关闭状态。

3.3、HTTPS

HTTPS为了解决HTTP以明文方式进行数据传输,不提供任何形式的数据加密问题而诞生。HTTPS在HTTP的基础上加入了SSL/TLS协议,SSL/TLS依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
HTTPS协议主要是两种作用:一种是建立一个信息安全通道,来保证数据传输的安全,另一种就是确认网站的真实性。
与HTTP的区别:

  1. HTTPS协议需要到CA申请证书。
  2. HTTP是超文本传输协议,是明文传输,HTTPS则是具有安全性的SSL/TLS加密 传输协议。
  3. HTTP默认端口是80,HTTPS默认端口是443.
  4. HTTP连接是无状态的;HTTPS是由SSL/TLS+HTTP协议构建的可进行加密传输、 身份认证的网络协议,比HTTP协议更安全。

3.3.1 CA证书
加密原理:
第一层:HTTPS是为了实现加密通信,本质上是双方都持有一个对称加密的密钥,然后进行安全通信。但是对于第一次传输的对称密钥,无论是从服务端到客户端或者是相反,在传输中都有被篡改的风险,因此采用加密传输。
第二层:为了避免被篡改,使用非对称加密传输对称秘钥。那么就需要将公钥传给客户端,让客户端可以解密得到对称密钥。但是公钥在网络中明文传输,也有被攻击的风险,因此引入第三方机构。
第三层:引入CA证书机构,让服务端把公钥传输给CA证书机构,让CA用CA的密钥加密,然后返回加密结果。
为什么不能直接使用非对称加密?
第一,中间人可以在服务端和客户端交换公钥时,替换公钥。
第二,截获客户端消息,篡改后用服务器的公钥加密后发往服务器,服务器将收到错误的消息。
第三,非对称加密更耗资源。

3.3.2 SSL和TLS
SSL:安全套接字层,位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。由SSL记录协议和SSL握手协议组成。
TLS: 传输层安全协议,是HTTP和TCP协议之间的一层,通常TLS发生在TCP三次握手之后,此时进行TLS四次握手,然后再进行HTTP通信。

下图是一个nginx配置ssl证书的例子

nginx配置ssl证书

TIPS:

  1. 文本协议和二进制协议
    文本协议:由一串ASCLL码字符组成的数据,包括数据,大小写字母,百分号,还有回车、换行和空格等。文本协议便于理解,解析复杂。
    二进制协议:二进制协议是一串字节流,通常包含消息头和消息体,消息头的长度固定,并且包含了消息体的长度。二进制协议字段较固定,传输高效,解析高效,不便于调试。

参考:

  1. https://blog.csdn.net/qq_35642036/article/details/82788421?utm_source=app&app_version=4.18.0&code=app_1562916241&uLinkId=usr1mkqgl919blen《HTTP与HTTPS的区别,详细介绍》
  2. https://blog.csdn.net/weixin_42709563/article/details/106433654?utm_source=app&app_version=4.18.0&code=app_1562916241&uLinkId=usr1mkqgl919blen 《一文搞懂HTTP协议(带图文)》
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值