1、HTTP是什么
超文本传输协议,计算机通过网络进行通信的协议,基于请求和响应、无状态,应用层的协议,基于TCP/IP协议传输数据。
特点:
- 支持C/S(客户/服务器)
- 无连接:每次连接只处理一个请求,服务器端处理完用户的请求,收到用户的响应后就断开连接,这种方式节省数据传输时间
- 无状态:HTTP协议是无状态协议,无状态指协议对事物处理没有记忆,无状态意味着如果后续处理需要之前的信息,需要重传数据,这会使每次连接传输的数据量过大,但是当服务器不需要之前的信息时传输速度就快。
针对无状态的解决策略
有时需要对用户之前的HTTP 通信状态进行保存,比如执行一次登录操作,接下来的30分钟免登录。于是引进了 Cookie 技术。
还有上面提到的 长连接(HTTP keep-alive),通过在请求首部字段中加入 Connection: keep-alive
2、HTTP请求报文
一个HTTP 请求报文由请求行(request line),请求头部(header),空行和请求数据4个部分组成,请求报文的一般格式如下。
- 请求行
- 请求方法:HTTP/1.1 定义的请求方法有8钟:GET,POST,PUT,DELEGATE,PATCH,HEAD,OPTIONS,TRACE.
- 请求地址(url):
组成:协议://主机:端口号/路径
http://localhost:8080/index.html?key1=value1&key2=value2
- 请求头
请求头部为请求报文添加了一些附加信息,由 ”名/值“ 对组成,每行一堆,名和值之间使用冒号分隔。
常见请求头
- 请求数据
POST /index.php HTTP/1.1 请求行
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2 请求头
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer:http://localhost/
Content-Length:25
Content-Type:application/x-www-form-urlencoded
空行
username=aa&password=1234 请求数据
3、HTTP响应报文
响应报文由状态行、响应报头、空行、响应正文组成
- 状态行
- 协议版本
- 状态码
- 状态码描述
//常见状态码
200 OK:客户端请求成功
400 Bad Request:客户端请求有语法错误,服务器无法理解。
401 Unauthorized:请求未经授权,这个状态码必须和WWW-Authenticate报头域一起使用
403 Forbidden:服务器收到请求,但是拒绝提供服务
500 Internal Server Error:服务器内部错误,无法完成请求
503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常
- 响应报头
示例:
4、HTTP工作流程
- 建立TCP/IP连接,客户端与服务器通过Socket三次握手进行连接。
- 客户端向服务器发起HTTP请求
- 客户端发送请求头信息,请求内容,最后一行会发送空白行,标示客户端请求完毕
- 服务器做出应答,标示对于客户端请求的应答,例如 HTTP/1.1 200 ok
- 服务器向客户端发送应答头信息
- 服务器向客户端发送请求头信息后,也会发送一空白行,标示应答头信息发送完毕,接着就以 Content-type 要求的数据格式发送数据给客户端
- 服务端关闭 TCP 连接,如果服务器或者客户端增 Connection:keep-alive 就标示客户端与服务器端继续保持连接,在下次请求时可以继续使用这次连接
5、HTTPS
https和http最主要的区别操作就在于它在应用层和传输层之间加上了一个SSL安全协议的认证。其目的是为了保证数据在传输的过程中不会被第三方查看到。
SSL和TSL
- SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。该协议由两层组成:SSL记录协议和SSL握手协议。
- TLS:(Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性。该协议由两层组成:TLS记录协议和TLS握手协议
HTTPS工作原理
- 1、客户端发起 HTTPS 请求
这个没什么好说的,就是用户在浏览器里输入一个 https 网址,然后连接到 server 的 443 端口。 - 2、服务端的配置
采用 HTTPS 协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面(startssl 就是个不错的选择,有 1 年的免费服务)。
这套证书其实就是一对公钥和私钥,如果对公钥和私钥不太理解,可以想象成一把钥匙和一个锁头,只是全世界只有你一个人有这把钥匙,你可以把锁头给别人,别人可以用这个锁把重要的东西锁起来,然后发给你,因为只有你一个人有这把钥匙,所以只有你才能看到被这把锁锁起来的东西。 - 3、传送证书
这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等等。 - 4、客户端解析证书
这部分工作是有客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。
如果证书没有问题,那么就生成一个随机值,然后用证书对该随机值进行加密,就好像上面说的,把随机值用锁头锁起来,这样除非有钥匙,不然看不到被锁住的内容。 - 5、传送加密信息
这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。 - 6、服务端解密信息
服务端用私钥解密后,得到了客户端传过来的随机值(私钥),然后把内容通过该值进行对称加密,所谓对称加密就是,将信息和私钥通过某种算法混合在一起,这样除非知道私钥,不然无法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全。 - 7、传输加密后的信息
这部分信息是服务段用私钥加密后的信息,可以在客户端被还原。 - 8、客户端解密信息
客户端用之前生成的私钥解密服务段传过来的信息,于是获取了解密后的内容,整个过程第三方即使监听到了数据,也束手无策。
HTTP和HTTPS的区别
- 端口:HTTP的端口是80,HTTPS的端口是443
- HTTP信息是明文传输,HTTPS信息是加密传输
- 使用https一般需要CA机构颁发的证书,免费的证书较少,一般需要购买