http协议简介

什么是Http协议呢?

  http是HyperText Transfer Protocol(超文本传输协议)的缩写,它的发展是由万维网协会(Word Wide Web Consortium)和Internet工作小组IETF(Intent Engineering Task Force)合作的结果,是目前互联网上应用最广的一种网络协议。所有的www文件都必须遵循一个标准,是以ASCII码传输,建立在TCP/IP协议之上的应用层规范。 它可以使浏览器更加高效,使网络传输减少;不仅保证计算机正确快速的传输超文本文档,还确定文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。

HTTP/0.9(1991年)

  • a,只有一个命令GET;
  • b,没有HEADER等描述数据的信息,服务器只能返回HTML格式的字符串数据;
  • c,服务器发送完毕便立即关闭TCP连接.

http/1.0(1996年)

  • a,新增了POST命令和HEAD命令。

  • b,新增了Status Code和HTTP Header。

  • c,多字符集的支持、多部分发送、权限和缓存等。

  • d,缺点是每个TCP连接还是和之前一样,每次只能发送一个请求。数据发送完毕,连接就关闭,如果还要请求其他资源,就必须新建一个连接。

  • e,增加了content-type ,传输数据不再局限于文本 但是http/1.0 并不是一个标准,只是记录已有实践和模式的一份参考文档,不具有实际的约束力,相当于一个备忘录。

http/1.1(1999年)

  发布了RFC文档,编号为2616,而从这个版本起,这就是一份正式的标准,而不是一份参考文档;而且这个版本极大的优化了网络链接,奠定了之后的Web1.0,Web2.0时代。

  • a,支持持久连接(keepalive),持久连接即为TCP连接在服务器发送完数据默认不关闭,可以被多个请求复用

  • b,引入管道机制(Pipelining)。即在同一个TCP连接里面,客户端可以同时发送多个请求。上述两个特性便解决了上面一个版本我们提到的缺点。

  • c,增加了Host和其他一些命令。Host用来指定服务器域名。有了Host我们便可以在同一物理服务器上运行多个web服务。

  • d,增加了PUT/DELETE/OPITIONS 等新方法 e,增加了缓存控制和管理  (Cache control)

http/2(2015年)

标准委员会不打算发布子版本了,所以不叫2.0,下一个版本就是http/3。这个版本解决了1.1存在的2个问题:

  1.连接慢,因为引入管到机制,但是请求都是串行的;

  2.性能差,1.1是纯文本方式,借助cpu的zip压缩方式减少了网络带宽,但是耗费了前端后端的cpu.

  • a,http/2中使用二进制传输,不再是纯文本,头信息和数据体都是二进制,并且统称为”帧"(frame):头信息帧和数据帧。

  • b,正是由于二进制传输,同一个连接里面发送多个请求时,服务器端不再需要按照顺序来返回处理后的数据了,可以在TCP中进行并行的请求,彻底解决了1.1中连接慢的问题。

  • c,头信息压缩以及推送等提高效率的功能:有效的减少带宽使用。

  • d,允许服务器主动向客户端推送数据。

  • e,增强了安全性,基于 TLS 协议。 http/2 的主要问题有队头阻塞问题,也就是说,若干个 HTTP 请求在复用一个 TCP 的连接,那么一旦发生丢包,造成的问题就是所有的请求都必须等待这个丢了的包重传回来,哪怕这个包不是我这个 HTTP 请求的。这个问题相信在未来的http/3会得到有效的解决。

Http是如何工作的

当我们在浏览器地址栏上输入要访问的URL后,浏览器会分析出URL上面的域名,然后通过DNS服务器查询出域名映射的IP地址,浏览器根据查询到的IP地址与Web服务器进行通信,而通信的协议就是HTTP协议。

 

 

 

https(承载于TLS或者SSL协议层之上)

随着浏览器与web服务器建立起了通信,那么http协议就会发挥作用,想要了解http协议的工作,就需要了解TCP/IP协议,因为http是构建在TCP/IP之上的,是TCP/IP协议的一个子集;有时候也是承载于TLS或者SSL协议层之上,这个时候就变成了我们所说的https

 

应用层:一般是我们编写的应用程序,其决定了向用户提供的应用服务。应用层可以通过系统调用与传输层进行通信。例如FTP,Http等

传输层:传输层通过系统调用向应用层提供处于网络连接中的两台计算机之间的数据传输功能。在传输层有两个性质不同的协议:TCP(Transmission Control Protocol,传输控制协议)和UDP(User Data Protocol,用户数据报协议)。

网络层:网络层用来处理在网络上流动的数据包,数据包是网络传输的最小数据单位。该层规定了通过怎样的路径(传输路线)到达对方计算机,并把数据包传输给对方。

链路层:链路层用来处理连接网络的硬件部分,包括控制操作系统、硬件设备驱动、NIC(Network Interface Card,网络适配器)以及光纤等物理可见部分。硬件上的范畴均在链路层的作用范围之内。

   

 

 

 

在发送端发送数据时,数据会从上层传输到下层,且每经过一层都会被打上该层的头部信息。而接收端接收数据时,数据会从下层传输到上层,传输前会把下层的头部信息删除。

如下展示 由于下层协议的头部信息对上层协议是没有实际的用途,所以在下层协议传输数据给上层协议的时候会把该层的头部信息去掉,这个封装过程对于上层协议来说是完全透明的。这样做的好处是,应用层只需要关心应用服务的实现,而不用管底层的实现。

 

Http请求方法

根据http的标准,http请求可以有多种请求方法。

  Http1.0定义了三种请求方法:GET, POST 和 HEAD方法。

  Http1.1新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。

 

 

 

GET和POST的区别:

GET在浏览器回退时是无害的,而POST会再次提交请求。

GET产生的URL地址可以被Bookmark,而POST不可以。

GET请求会被浏览器主动cache,而POST不会,除非手动设置。

GET请求只能进行url编码,而POST支持多种编码方式。

GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

GET请求在URL中传送的参数是有长度限制的,而POST么有。

对参数的数据类型,GET只接受ASCII字符,而POST没有限制。

GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

GET参数通过URL传递,POST放在Request body中。

GET和POST还有一个重大区别

简单的说: GET产生一个TCP数据包;POST产生两个TCP数据包。  

长的说: 对于GET方式的请求,浏览器会把HTTP HEADER和DATA一并发送出去,服务器响应200(返回数据);

而对于POST,浏览器先发送HEADER,服务器响应100 CONTINUE,浏览器再发送DATA,服务器响应200 OK(返回数据)。  

也就是说,GET只需要汽车跑一趟就把货送到了,而POST得跑两趟,第一趟,先去和服务器打个招呼“嗨,我等下要送一批货来,你们打开门迎接我”,然后再回头把货送过去。   因为POST需要两步,时间上消耗的要多一点,看起来GET比POST更有效。因此YAHOO团队有推荐用GET替换POST来优化网站性能。但这是一个坑!跳入需谨慎。为什么?

1. GET与POST都有自己的语义,不能随便混用。

2. 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。

3. 并不是所有浏览器都会在POST中发送两次包,FIREFOX就只发送一次。

 

HTTP状态码-Status Code

当访问一个网页时,浏览者的浏览器会向网页发出请求,当浏览器接受并显示网页之前,服务器会发送一个包涵HTTP状态码的信息头,用来响应这个请求。 Http状态码由三个十进制数字组成,第一个十进制定义了状态码的类型,后两个数字没有分类作用。从第一个十进制数字,

大体上把状态码分为五类:

  • 1**:信息,服务器收到请求,需要请求者继续执行操作
  • 2**:成功,操作被成功接收并处理
  • 3**:重定向,需要进一步的操作以完成请求
  • 4**:客户端错误,请求包含语法错误或无法完成请求
  • 5**:服务器错误,服务器在处理请求的过程中发生了错误

具体的可以参照网页:http://tools.jb51.net/table/http_status_code 总共50多种状态码,以及详细的描述

Http content - type

Content-Type (内容类型),一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式,什么编码读取这个文件。

Content-Type 标头告诉客户端实际返回的内容的内容类型。 语法格式:Content-Type: text/html; charset=utf-8

常见的常见的媒体格式类型如下:

text/html : HTML格式

text/plain :纯文本格式

text/xml : XML格式

image/gif :gif图片格式

image/jpeg :jpg

图片格式 image/png:png图片格式

以application开头的媒体格式类型:

application/xhtml+xml :XHTML格式

application/xml: XML数据格式

application/atom+xml :Atom XML聚合格式

application/json: JSON数据格式

application/pdf:pdf格式

application/msword : Word文档格式

application/octet-stream : 二进制流数据(如常见的文件下载)

application/x-www-form-urlencoded : <form encType=””>中默认的encType, form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)

 

另外一种常见的媒体格式是 上传文件之时使用的:

multipart/form-data : 需要在表单中进行文件上传时,就需要使用该格式 Content-Type还有很多种,

这里只列举了大部分的常用的,所有的类型,可以参考如下网址 http://tools.jb51.net/table/http_content_type;

Http与Https

Http虽然应用广泛,但是存在不小的安全缺陷,主要是其数据的明文传送和消息完整性检测的缺乏, 而这两点恰好是网络支付,网络交易所最需要关注的。

关于 HTTP协议的明文数据传输, 攻击者最常用的攻击手法就是网络嗅探, 试图从传输过程当中分析出敏感的数据, 例如管理员对 Web 程序后台的登录过程等等, 从而获取网站管理权限, 进而渗透到整个服务器的权限。即使无法获取到后台登录信息, 攻击者也可以从网络中获取普通用户的隐秘信息, 包括手机号码, 身份证号码, 信用卡号等重要资料, 导致严重的安全事故。进行网络嗅探攻击非常简单, 对攻击者的要求很低。使用网络发布的任意一款抓包工具, 一个新手就有可能获取到大型网站的用户信息。

另外,HTTP协议在传输客户端请求和服务端响应时, 唯一的数据完整性检验就是在报文头部包含了本次传输数据的长度, 而对内容是否被篡改不作确认。 因此攻击者可以轻易的发动中间人攻击, 修改客户端和服务端传输的数据, 甚至在传输数据中插入恶意代码, 导致客户端被引导至恶意网站被植入木马。

Https主要由两部分组成:HTTP + SSL / TLS,也就是在 HTTP 上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过 TLS 进行加密,所以传输的数据都是加密后的数据。

 

Http

  • ① 客户端的浏览器首先要通过网络与服务器建立连接,该连接是通过TCP 来完成的,一般 TCP 连接的端口号是80。 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是 MIME 信息包括请求修饰符、客户机信息和许可内容。
  • ② 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是 MIME 信息包括服务器信息、实体信息和可能的内容。

HTTPS

  • ① 客户端将它所支持的算法列表和一个用作产生密钥的随机数发送给服务器。
  • ② 服务器从算法列表中选择一种加密算法,并将它和一份包含服务器公用密钥的证书发送给客户端;该证书还包含了用于认证目的的服务器标识,服务器同时还提供了一个用作产生密钥的随机数;
  • ③ 客户端对服务器的证书进行验证(有关验证证书,可以参考数字签名),并抽取服务器的公用密钥;然后,再产生一个称作 pre_master_secret 的随机密码串,并使用服务器的公用密钥对其进行加密(参考非对称加 / 解密),并将加密后的信息发送给服务器;
  • ④ 客户端与服务器端根据 pre_master_secret 以及客户端与服务器的随机数值独立计算出加密和 MAC密钥(参考 DH密钥交换算法;
  • ⑤ 客户端将所有握手消息的 MAC 值发送给服务器;
  • ⑥ 服务器将所有握手消息的 MAC 值发送给客户端。

Https有实现的时候需要对报文加密,有两种基本的加密算法类型:

1)对称加密:密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES等;

2)非对称加密:密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有RSA、DSA等。

这个流程图就可以很好的解释Https工作的状态 

 

Https优缺点

优点:

1,使用 HTTPS 协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;

2,HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,要比 HTTP 协议安全,可防止数据在传输过程中被窃取、改变,确保数据的完整性;

3,HTTPS 是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。

缺点:

1,相同网络环境下,HTTPS 协议会使页面的加载时间延长近 50%,增加 10%到 20%的耗电。此外,HTTPS 协议还会影响缓存,增加数据开销和功耗;

2,HTTPS 协议的安全是有范围的,在黑客攻击、拒绝服务攻击和服务器劫持等方面几乎起不到什么作用;

3,最关键的是,SSL 证书的信用链体系并不安全。特别是在某些国家可以控制 CA 根证书的情况下,中间人攻击一样可行;

4,成本增加。部署 HTTPS 后,因为 HTTPS 协议的工作要增加额外的计算资源消耗,例如 SSL 协议加密算法和 SSL 交互次数将占用一定的计算资源和服务器成本。在大规模用户访问应用的场景下,服务器需要频繁地做加密和解密操作,几乎每一个字节都需要做加解密,这就产生了服务器成本。随着云计算技术的发展,数据中心部署的服务器使用成本在规模增加后逐步下降,相对于用户访问的安全提升,其投入成本已经下降到可接受程度。

 

posted on 2021-01-06 17:41  刘飞fei  阅读(389)  评论(0编辑  收藏  举报

导航