HTTP(Hyper Text Transfer Protocol)名叫超文本传输协议。
早期HTTP只有GET请求,用来简单的拿文件,拿完就断开了连接。
HTTP1.0时期,在单一GET方式中增加了POST、HEAD命令、引入了请求头和响应头、增加了HTTP版本号、增加了响应状态码、引入Content-Type使传输不限于文本。但是该版本还是存在一些问题:
- 连接无法复用,HTTP1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接。
- 发送一次请求时,需要等待服务端响应了才可以继续发送请求。
HTTP1.1中增加了keepalive,允许长连接;支持pipeline,无需等待前面的响应也可以发送第二次请求;增加缓存管理;允许响应数据分块,响应的时候不标明Content-Length,客户端就无法断开连接,直到收到服务端的EOF,利于传输大文件。HTTP1.1也是目前使用最广泛的。
消息结构
HTTP是一个基于TCP/IP协议来传递数据的协议。发送一个HTTP请求的消息包括:请求行、请求头部、空行、请求数据四部分。
接收HTTP请求的服务器响应消息包括:状态行、消息报文、空行、响应正文四部分。
HTTPS
对于使用HTTP发送的数据,很容易被拦截、篡改、以及发起攻击。为了解决这些问题,于是引入了HTTPS,HTTPS由HTTP+SSL/TLS组成,通过SSL证书来验证服务器的身份,并为浏览器和服务器之间的通信进行加密。
一个网站在使用HTTPS之前,需要选择一家公认的CA机构,对网站地址及企业信息进行签字认证,CA机构使用自己的私钥对这些摘要信息进行加密,生成一个CA证书。
然后就是我们使用的浏览器,在浏览器中都已经内置了这些公认的CA机构的公钥,所以当访问HTTPS网站时,浏览器得到数字证书后,就会使用内置的CA机构公钥对证书进行验证。
一个完整的HTTPS请求包含三部分内容:
-
证书校验 浏览器内置的CA公钥对证书进行验证 -
非对称加密 非对称加密的意思就是:加密与解密是使用的不同的钥匙。 这一步浏览器先提取公钥信息,利用公钥生成一个随机key,然后使用公钥将随机key进行加密,发送给服务器。服务器使用私钥将接收到的信息进行解密,得到随机key。 -
对称加密 在第二步中,客户端与服务端都知道了这个随机key,在后面的数据交互过程中,都是使用这个随机key来对数据进行加解密,也就是所谓的对称加密。
|