HTTP和HTTPS
HTTP
1.网站通信粗略过程
我们知道HTTP是在应用层中的,显然,我们在Web通信的过程中,不仅仅是需要HTTP协议的,还会涉及到其他的协议的。
DNS:负责解析域名
-
我们访问一个网页的时候,往往是通过域名来访问的
www.zhongfucheng.site
,而计算机通信只认的是我们的主机地址(192.168.xxx.xxx),因此,当我们输入域名的时候,需要DNS把域名解析成主机来进行访问。
HTTP:产生请求报文数据
-
当我们对Web页面进行操作的时候,就会产生HTTP报文数据,请求对应的服务端进行响应。
DNS和HTTP都属于应用层
TCP协议:分割HTTP数据,保证数据运输
-
TCP协议采用了三次握手的方式来保证数据的准确运输,在运输的数据的时候,发送标识过去给服务器,服务器也返回标识给客户端,而客户端收到消息后再次返回标识给服务器。这样一来就保证了数据运输是可靠的。
TCP属于运输层
IP协议:传输数据包,找到通信目的地地址。
-
IP协议把我们的产生的数据包发送给对方,IP地址指明了节点被分配的地址,但IP地址可能会变换,我们可以使用ARP协议来将IP地址反射为MAC地址。MAC地址是不会更改的,是网卡所属的固定地址。
-
在找到通信目的地之前,我们是需要不断的中转的,这过程我们称作为:“路由中转”,我们并不知道路由中转了多少次的。因此是不能全面了解到互联网中的传输状况的。
IP属于网际层
PORT:确认两个电脑互相通信的进程
-
两个电脑的网络通信实际上是两个电脑的进程之间的通信,端口用来标识一个进程
PORT属于网络接口层
2.HTTP是不保存状态的协议
HTTP是无状态的,也就是说,它是不对通信状态进行保存的。它并不知道之前通信的对方是谁。这样设计的目的就是为了让HTTP简单化,能够快速处理大量的事务!
但是,我们经常是需要知道访问的人是谁,于是就有了Cookie技术了。
-
要是服务器端想要记住客户端是谁,那么就颁发一个cookie给客户端
-
客户端把Cookie保存在硬盘中,当下次访问服务器的时候,浏览器会自动把客户端的cookie带过去。
-
就这样,服务器就能够知道这家伙是谁了
3.持久连接
在HTTP1.0的时候,每一次进行HTTP通信就会断开一次连接。如果容量很少的文本传输是没有问题的。但是如果我们访问一个网页,该网页有非常多的图片。一个图片就算上一个HTTP请求了。那么在中途中就不断地建立TCP连接、获取图片、断开TCP连接。
这样是非常浪费资源的,因此在HTTP1.1版本,就是持久连接了。一次HTTP连接能够处理多个请求。
持久连接为“管线化”方式发送成为了可能:在一次HTTP连接里面,不需要等待服务器响应请求,就能够继续发送第二次请求。
4.提升传输效率
在说明之前,首先我们要知道什么是实体主体
-
实体主体就是作为数据在HTTP中传输的数据。
一般地,实体主体可以等价为报文主体,报文主体是HTTP中的一部分。
我们如果不使用任何手段,服务器返回的数据实体主体是原样返回的。我们可以使用两种方式来提高传输效率
-
使用压缩技术把实体主体压小,在客户端再把数据解析
-
使用分块传输编码,将实体主体分块传输,当浏览器解析到实体主体就能够显示了。
我们如果在下载东西的过程中断了,按照以前我们是需要重新下载的,但是现在可以在中断中继续下载。我们可以使用到获取范围数据,这种叫做范围请求!
这种请求只会下载资源的一部分。
-
比如我的图片下载到一半了,我们只需要下载另一半就可以组成一张完整的图片了。那么请求的时候请求没有下载的一部分即可。
HTTPS
我们最好就是使用SSL建立安全的通信线路,就可以在这条线路上进行HTTP通信了。
其实HTTPS就是披着SSL的HTTP
流程如下:
1、因为CA是工信机构,会内置到浏览器或操作系统中,所以客户端会持有CA机构的公钥
2、服务器去认证的CA机构申请一份数字证书。数字证书会经过CA机构的私钥加密,里面包含有证书持有者、证书有效期、服务器公钥等信息
4、如果证书是可信的,客户端解密出服务器的公钥。客户端生成一个对称加密的随机Key,并用证书内的服务器公钥进行加密,发送给服务端
5、服务端收到消息,用自己的私钥解密,拿到客户端随机生成的Key,加密数据后返回给客户端;客户端收到消息,就可以用之前生成的Key来解密服务端返回的数据。后续就可以通过对称加密的key发送/接收消息了
HTTP常见面试题
1.HTTP与HTTPS的区别
-
HTTP 的URL 以http:// 开头,而HTTPS 的URL 以https:// 开头
-
HTTP 是不安全的,而 HTTPS 是安全的
-
HTTP 标准端口是80 ,而 HTTPS 的标准端口是443
-
在OSI 网络模型中,HTTP工作于应用层,而HTTPS 的安全传输机制工作在传输层
-
HTTP 无法加密,而HTTPS 对传输的数据进行加密
-
HTTP无需证书,而HTTPS 需要CA机构wosign的颁发的SSL证书