面试必备之HTTP与HTTPS

HTTP

什么是HTTP

HTTP即超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法

HTTP发展历史

版本产生时间内容发展现状
HTTP/0.91991年不涉及数据包传输,规定客户端和服务器之间通信格式,只能GET请求没有作为正式的标准
HTTP/1.01996年传输内容格式不限制,增加PUT、PATCH、HEAD、 OPTIONS、DELETE命令正式作为标准
HTTP/1.11997年持久连接(长连接)、节约带宽、HOST域、管道机制、分块传输编码2015年前使用最广泛
HTTP/22015年多路复用、服务器推送、头信息压缩、二进制协议等逐渐覆盖市场

HTTP/1.1与HTTP/2的比较

img

HTTP/2采用多路复用技术,通过单一的HTTP/2连接请求发起多重的请求-响应消息,多个请求stream共享一个TCP连接,实现多留并行而不是依赖建立多个TCP连接。


HTTP的报文格式

img

报文格式解析
请求行
方法

方法有很多种:GET,POST,HEAD, PUT, DELETE,TRACE,OPTIONS

img

其中GETPOST。两者的区别如下:

(1)作用:get是从服务器上获取数据,post是向服务器传送数据。

(2)生成方式不同

Get:URL输入;超连接;Form表单中method属性为get;Form表单中method为空。

Post:只有一种:Form表单中method为Post。

(3)数据传送方式:Get传递的请求数据按照key-value的方式放在URL后面,在网址中可以直接看到,使用?分割URL和传输数据,传输的参数之间以&相连,如:login.action?name=user&password=123。所以安全性差。

POST方法会把请求的参数放到请求头部和空格下面的请求数据字段就是请求正文(请求体)中以&分隔各个字段,请求行不包含参数,URL中不会额外附带参数。所以安全性高。

(4)发送数据大小的限制:通常GET请求可以用于获取轻量级的数据,而POST请求的内容数据量比较庞大些。

Get:1~2KB。get方法提交数据的大小直接影响到了URL的长度,但HTTP协议规范中其实是没有对URL限制长度的,限制URL长度的是客户端或服务器的支持的不同所影响。

Post:没有要求。post方式HTTP协议规范中也没有限定,起限制作用的是服务器的处理程序的能力。

(5)提交数据的安全:POST比GET方式的安全性要高。Get安全性差,Post安全性高。

通过GET提交数据,用户名和密码将明文出现在URL上,如果登录页面有浏览器缓存,或者其他人查看浏览器的历史记录,那么就可以拿到用户的账号和密码了。安全性将会很差。

URL

URL字段是请求对象在服务器上的路径

版本号

使用的HTTP协议版本

CRLF

空行

首部行

首部行关键字/值对组成,每行一对关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息,典型的请求头有:

User-Agent:产生请求的浏览器类型
Accept:客户端可识别的内容类型列表
Host请求的主机名允许多个域名同处一个IP地址即虚拟主机

实体主体

请求数据不在GET方法中使用而是在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求数据相关的最常使用的请求头Content-Type(这个主体的对象类型)和Content-Length(主体的长度)


HTTPS

HTTPS是如何选择加密方式的

HTTP在网络上是以明文形式传输的,因此容易受到攻击者的监听窃取,甚至会遭到篡改,是非常不安全的。因此想要解决这个问题,我们首先想到的就是对传输的数据进行加密,常用的加密算法有对称加密非对称加密,对称加密的优点是加解密效率高,而我们在网络上传输数据是非常讲究效率的,因此首先考虑对称加密,但是对称加密存在一个问题,进行通信的双方是如何确定对称密钥是个难题。因此我们采用非对称加密先创建对称加密密钥,我们想要安全地创建一个对称加密的密钥,可以让浏览器这边来随机生成,但是生成出来的密钥不能直接在网络上传输,而是要用网站提供的公钥对其进行非对称加密。由于公钥加密后的数据只能使用私钥来解密,因此这段数据在网络上传输是绝对安全的。而网站在收到消息之后,只需要使用私钥对其解密,就获取到浏览器生成的密钥了。

另外,使用这种方式,只有在浏览器和网站首次商定密钥的时候需要使用非对称加密,一旦网站收到了浏览器随机生成的密钥之后,双方就可以都使用对称加密来进行通信了,因此工作效率是非常高的。

CA机构

上述的工作机制你认为已经非常完善了吗?其实并没有,因为我们还是差了非常关键的一步,浏览器该怎样才能获取到网站的公钥呢?虽然公钥是属于公开的数据,在网络上传输不怕被别人监听,但是如果公钥被别人篡改了怎么办?

这时候我们采用CA机构。CA机构专门用于给各个网站签发数字证书,从而保证浏览器可以安全地获得各个网站的公钥。

CA机构的工作原理

首先,我们作为一个网站的管理员需要向CA机构进行申请,将自己的公钥提交给CA机构。CA机构则会使用我们提交的公钥,再加上一系列其他的信息,如网站域名、有效时长等,来制作证书。

证书制作完成后,CA机构会使用自己的私钥对其加密,并将加密后的数据返回给我们,我们只需要将获得的加密数据配置到网站服务器上即可。

然后,每当有浏览器请求我们的网站时,首先会将这段加密数据返回给浏览器,此时浏览器会用CA机构的公钥来对这段数据解密。

如果能解密成功,就可以得到CA机构给我们网站颁发的证书了,其中当然也包括了我们网站的公钥。

得到了公钥之后,接下来就可以利用公钥获取对称加密的密钥,进而双方就可以进行对称加密传输。

浏览器如何获取到CA机构的公钥

上面提到浏览器会使用CA机构的公钥来对数据解密,那么浏览器是如何得到CA机构的公钥的呢?

因为世界上的网站是无限多的,而CA机构总共就那么几家。任何正版操作系统都会将所有主流CA机构的公钥内置到操作系统当中,所以我们不用额外获取,解密时只需遍历系统中所有内置的CA机构的公钥,只要有任何一个公钥能够正常解密出数据,就说明它是合法的。

即浏览器使用的是其所在操作系统内置好的CA机构的公钥。

HTTP与HTTPS对比

HTTP特点
  1. 无状态:协议对客户端没有状态存储,对事物处理没有“记忆”能力,比如访问一个网站需要反复进行登录操作。
  2. 无连接:HTTP/1.1之前,由于无状态特点,每次请求需要通过TCP三次握手四次挥手,和服务器重新建立连接。比如某个客户机在短时间多次请求同一个资源,服务器并不能区别是否已经响应过用户的请求,所以每次需要重新响应请求,需要耗费不必要的时间和流量。
  3. 基于请求和响应:基本的特性,由客户端发起请求,服务端响应。
  4. 简单快速、灵活
  5. 通信使用明文、请求和响应不会对通信方进行确认、无法保护数据的完整性。
HTTPS特点
  1. 内容加密:采用混合加密技术,中间者无法直接查看明文内容。
  2. 验证身份:通过证书认证客户端访问的是自己的服务器。
  3. 保护数据完整性:防止传输的内容被中间人冒充或者篡改。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值