http(1.0|http(1.0,1.1,2.0)与https协议

HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。
HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。如下图所示:
默认HTTP的端口号为80,HTTPS的端口号为443。
http(1.0|http(1.0,1.1,2.0)与https协议
文章图片
图片.png HTTP的发展历程(1.0,1.1,2.0)
http 1.0 规定浏览器与服务器保持较短时间的链接,浏览器每次请求都和服务器经过三次握手和慢启动(基本思想是当TCP开始传输数据或发现数据丢失并开始重发时,首先慢慢的对网路实际容量进行试探,避免由于发送了过量的数据而导致阻塞)建 立一个TCP链接,服务器完成请求处理后立即断开TCP链接,而且不跟踪每个浏览器的历史请求。
http 1.1 默认支持长连接(在request和response中的header中的connection是close或者Keep-Alive进行控制)增加了请求头和响应头来扩充功能
一个TCP链接可以串行传送多个http请求和响应,减少了TCP建立链接和关闭链接的消耗。另外http1.1允许客户端不用等待上一次 请求结果返回,就可以发出下一次请求,但服务器端必须按照接收到客户端请求的先后顺序依次回送响应结果,以保证客户端能 够区分出每次请求的响应内容。
http 2.0
HTTP/2引入二进制数据帧和流的概念,其中帧对数据进行顺序标识,如下图所示,这样浏览器收到数据之后,就可以按照序列对数据进行合并,而不会出现合并后数据错乱的情况。
http 2.0多路复用 用了多路复用的技术,做到一轮三次握手同一个连接并发处理多个请求
http 2.0头部压缩 在HTTP1.x中,头部元数据都是以纯文本的形式发送的,通常会给每个请求增加500~800字节的负荷。
HTTP2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。高效的压缩算法可以很大的压缩header,减少发送包的数量从而降低延迟。
http工作流程(url到页面的过程):
1)首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。 1.浏览器解析出主机名
解析出的主机名是www.baidu.com
2.浏览器查询这个主机名的ip地址(dns)
dns解析的作用就是把域名解析成ip地址,这样才能在广域网路由器转发报文给目标ip,不然路由器不知道要把报文发给谁。下面就讲下大概的过程,不会涉及太多细节。(以chrome为例子)
(1)浏览器启动时,首先浏览器会去操作系统获取dns服务器地址,然后把这个地址缓存下来。同时浏览器还会去读取和解析hosts文件,同样放到缓存中。浏览器对解析过的域名和ip地址,都会保存着这两者的映射关系。(存到cache中)
(2)当解析域名的时候,首先浏览器会去cache中查找有没有缓存好的映射关系,如果没有的话,就去hosts文件中查找,如果也没有的话,浏览器就会发起请求去dns服务器缓存查询了,如果缓存里面也没有,那最后就是dns服务器去查询了。
3.浏览器获取端口号
4.浏览器向目标ip地址发起一条到ip地址的tcp连接
为了传输的可靠性,tcp协议要有三次握手过程:
(1)首先浏览器会向服务器发起一个连接请求
(2)服务器会对连接请求做出响应,表示同意建立连接
(3)浏览器收到响应后,再告知对方,它知道服务器同意它建立连接了。
5.数据包在ip层传输,通过多台计算机和网络设备中转,在中转时,利用中转设备的mac地址搜索下一个中转目标(采用ARP协议,根据通信方的ip地址就可以反查出对应的mac地址),直到目标ip地址。
6.数据链路层处理网络连接的硬件部分,比如网卡,找到服务器的网卡
7.浏览器向服务器发送一条http报文
2)建立连接后,客户机发送一个请求给服务器,

http请求由三部分组成,分别是:请求行、消息报头、请求正文
请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下:Method Request-URI HTTP-Version CRLF
其中 Method表示请求方法;Request-URI是一个统一资源标识符;HTTP-Version表示请求的HTTP协议版本;CRLF表示回车和换行。
3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
HTTP响应也是由三个部分组成,分别是:状态行、消息报头、响应正文
状态代码是状态行的一部分有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
常用:
200 – OK – 一切正常
201 – OK – 新的资源已经成功创建
204 – OK – 资源已经成功擅长
304 – Not Modified – 客户端使用缓存数据
400 – Bad Request – 请求无效,需要附加细节解释如 "JSON无效"
401 – Unauthorized – 请求需要用户验证
403 – Forbidden – 服务器已经理解了请求,但是拒绝服务或这种请求的访问是不允许的。
404 – Not found – 没有发现该资源
422 – Unprocessable Entity – 只有服务器不能处理实体时使用,比如图像不能被格式化,或者重要字段丢失。
500 – Internal Server Error – API开发者应该避免这种错误。
4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,根据响应存储cookie信息,然后客户机与服务器断开连接。 HTTPS:
是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL(所谓的“HTTP over SSL”,实际上是在原有的 HTTP 数据外面加了一层 SSL 的封装。HTTP 协议原有的 GET、POST 之类的机制,基本上原封不动)SSL 是洋文“Secure Sockets Layer”的缩写,中文叫做“安全套接层”。
安装并部署证书后,一般通过nignx对443端口进行代理, 绑定证书并配置协议,并使用全站加密,http自动跳转https。
HTTPS原理概诉参考:
http(1.0|http(1.0,1.1,2.0)与https协议
文章图片
图片.png HTTPS要使客户端与服务器端的通信过程得到安全保证,必须使用的对称加密算法,但是协商对称加密算法具体实现的过程,需要使用非对称加密算法来保证安全,然而直接使用非对称加密的过程本身也不安全,会有中间人篡改公钥的可能性,所以客户端与服务器不直接使用公钥,而是使用数字证书签发机构颁发的证书来保证非对称加密过程本身的安全。这样通过这些机制协商出一个对称加密算法,就此双方使用该算法进行加密解密。从而解决了客户端与服务器端之间的通信安全问题。
其中涉及到的数字证书签发机构颁发的证书就是我们服务器https配置要第一步申请的SSL证书了:
目前提供有挺多机构进行免费的https证书发放
安装并部署证书后,通过nignx对443端口进行代理, 绑定证书并配置协议,并使用全站加密,http自动跳转https。
考虑使用https主要有2点理由: (1)由于QQ微信占据社交入口并且只对htpps的链接进行安全标志,项目的某些资讯要通过微信/QQ传播, 项目想要在腾讯的应用宝上架也要通过安全审核。
(2)项目,对安全性要求较高,使用https可以进一步保障交互数据的安全和服务器安全。
【http(1.0|http(1.0,1.1,2.0)与https协议】———————————————————————————————————————
HTTPS配置
参考

    推荐阅读