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

HTTPS是基于TLS上实现的,在网络上,只要是客户端和服务端在交互,那就有可能被挟持。而客户端是需要确切地知道服务端是不是真实的,所以我们需要CA(公信机构)来帮客户端认定服务端是真实的

 

流程如下:

1、因为CA是工信机构,会内置到浏览器或操作系统中,所以客户端会持有CA机构的公钥

2、服务器去认证的CA机构申请一份数字证书。数字证书会经过CA机构的私钥加密,里面包含有证书持有者、证书有效期、服务器公钥等信息

3、客户端请求服务器,服务器返回一个证书给客户端,客户端用CA的公钥对证书解密,客户端会判断这个证书是否可信/有无被篡改(私钥加密,公钥解密我们一般用来做数字签名(看有无被篡改))

4、如果证书是可信的,客户端解密出服务器的公钥。客户端生成一个对称加密的随机Key,并用证书内的服务器公钥进行加密,发送给服务端

5、服务端收到消息,用自己的私钥解密,拿到客户端随机生成的Key,加密数据后返回给客户端;客户端收到消息,就可以用之前生成的Key来解密服务端返回的数据。后续就可以通过对称加密的key发送/接收消息了

HTTP常见面试题

1.HTTP与HTTPS的区别

  1. HTTP 的URL 以http:// 开头,而HTTPS 的URL 以https:// 开头

  2. HTTP 是不安全的,而 HTTPS 是安全的

  3. HTTP 标准端口是80 ,而 HTTPS 的标准端口是443

  4. 在OSI 网络模型中,HTTP工作于应用层,而HTTPS 的安全传输机制工作在传输层

  5. HTTP 无法加密,而HTTPS 对传输的数据进行加密

  6. HTTP无需证书,而HTTPS 需要CA机构wosign的颁发的SSL证书

 

原文地址:https://www.cnblogs.com/yjh1995/p/13514543.html