HTTP(HyperText Transfer Protocol)超文本传输协议,是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。http协议由于其简单高效以及无状态所以迅速流行起来了,但是随着web应用的发展也暴露出部分缺点了。http是基于tcp/ip传输层协议之上的应用层协议。
两台计算机要互相通信最重要的两点:
1、如何寻找到对方(IP网络协议)
2、和对方以什么共同语言交流(TCP传输控制协议)
IP:计算机之间的通信
TCP:应用程序之间的通信
tcp/ip参考模型
通常是客户发起一个请求,服务器处理一个请求然后响应给客户端。无法服务器主
动响应给客户端。但是现实场景中,有一些web应用可能有从服务器端主动发信息
给客户端,传统的方式可以使客户端用ajax轮询服务器达到类似的效果,但是这样
对服务器的开销比较大,自从定义了websocket协议之后,就可以达到服务器主动
发信息给客户端了。(备注需要服务器提供websocket支持)
HTTP是一个无状态的协议。无状态是指客户机(Web浏览器)和服务器之间不需要
建立持久的连接,这意味着当一个客户端向服务器端发出请求,然后服务器返回
响应(response),连接就被关闭了,在服务器端不保留连接的有关信息.HTTP遵
循请求(Request)/应答(Response)模型。客户机(浏览器)向服务器发送请求
,服务器处理请求并返回适当的应答。所有HTTP连接都被构造成一套请求和应答。
1、域名解析
如用客户端浏览器请求这个页面:http://localhost.com:8080/index.htm
从中分解出协议名、主机名、端口、对象路径等部分,对于我们的这个地址,解析得到的结果如下:
协议名:http
主机名:localhost.com
端口:8080
对象路径:/index.htm
在这一步,需要域名系统DNS解析域名localhost.com,得主机的IP地址。
域名解析过程
1、查看浏览器缓存
2、查看本机hosts配置文件
3、联网去查询
2、封装HTTP请求数据包
把以上部分结合本机自己的信息,封装成一个HTTP请求数据包
3、封装成TCP包,建立TCP连接(TCP的三次握手)
4、客户机发送请求命令
对应java Servelt Request对象
5、服务器响应
对应java Servlet Response对象
6、服务器关闭TCP连接
一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然
后如果浏览器或者服务器在其头信息加入了这行代码
Connection:keep-alive
TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发
送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。
客户机发起一次请求的时候:
客户机会将请求封装成http数据包-->封装成Tcp数据包-->封装成Ip数据包---
>封装成数据帧--->硬件将帧数据转换成bit流(二进制数据)-->最后通过物理
>硬件(网卡芯片)发送到指定地点。
服务器硬件首先收到bit流....... 然后转换成ip数据包。于是通过ip协议解析
Ip数据包,然后又发现里面是tcp数据包,就通过tcp协议解析Tcp数据包,接着
发现是http数据包通过http协议再解析http数据包得到数据。
HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL。其所用的端口号是443。
SSL:安全套接层,是netscape公司设计的主要用于web的安全传输协议。这种协议在WEB上获得了广泛的应用。通过证书认证来确保客户端和网站服务器之间的通信数据是加密安全的。
有两种基本的加解密算法类型:
1)对称加密(symmetrcic encryption):密钥只有一个,加密解密为同一个
密码,且加解密速度快,典型的对称加密算法有DES、AES,RC5,3DES等;
对称加密主要问题是共享秘钥,除你的计算机(客户端)知道另外一台计算机
(服务器)的私钥秘钥,否则无法对通信流进行加密解密。解决这个问题的方案非对称秘钥。
2)非对称加密:使用两个秘钥:公共秘钥和私有秘钥。私有秘钥由一方密码保存
(一般是服务器保存),另一方任何人都可以获得公共秘钥。
这种密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加
密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对
对称加密速度较慢,典型的非对称加密算法有RSA、DSA等。
https的通信过程
1)SSL客户端通过TCP和服务器建立连接之后(443端口),并且在一般的tcp连接
协商(握手)过程中请求证书。即客户端发出一个消息给服务器,这个消息里面包
含了自己可实现的算法列表和其它一些需要的消息,SSL的服务器端会回应一个数
据包,这里面确定了这次通信所需要的算法,然后服务器向客户端返回证书。(证
书里面包含了服务器信息:域名。申请证书的公司,公共秘钥)。
2)Client在收到服务器返回的证书后,判断签发这个证书的公共签发机构,并使
用这个机构的公共秘钥确认签名是否有效,客户端还会确保证书中列出的域名就是它正在连接的域名。
3)如果确认证书有效,那么生成对称秘钥并使用服务器的公共秘钥进行加密。然后
发送给服务器,服务器使用它的私钥对它进行解密,这样两台计算机可以开始进
行对称加密进行通信。
https通信的优点:
1)客户端产生的密钥只有客户端和服务器端能得到
2)加密的数据只有客户端和服务器端才能得到明文
3)客户端到服务端的通信是安全的。
http://blog.csdn.net/hguisu/article/details/8680808
https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol
https://en.wikipedia.org/wiki/HTTP/2
https://en.wikipedia.org/wiki/HTTPS