HTTP与HTTPS协议:互联网安全的双翼

HTTP(hypertext Transfer Protocal)全称为超文本传输协议。是应用层协议。是一个简单的请求-响应协议,它通常运行在TCP之上。运行于应用层。HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准。通常,由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如"HTTP/1.1 200 OK",以及返回的内容,如请求的文件、错误消息、或者其它信息。

特点有许多如:

支持客户端、服务端模式

简单快速:客户向服务器请求服务时,只需要传送请求方法(GET/POST)和路径 。

(/user_system/view/listView.php)。由于HTTP协议简单,使得通信速度比较快。

灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

无连接:每次连接只处理一个请求,服务器处理完客户请求,收到用户的应答后,便断开连接,这种方式可以节省传输时间。

无状态:无状态是指协议对于事物处理没有记忆能力。不对请求和响应之间的通信状态进行保存,缺少状态意味着如果后续处理需要前面的信息,则它必须重传,无状态协议解决办法: 1、通过、Cookie 2、通过Session会话保存。

原理:

HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。WWW是以Internet作为传输媒介的一个应用系统,WWW网上最基本的传输单位是Web网页。WWW的工作基于客户机/服务器计算模型,由Web 浏览器(客户机)和Web服务器(服务器)构成,两者之间采用超文本传送协议(HTTP)进行通信。HTTP协议是基于TCP/IP协议之上的协议,是Web浏览器和Web服务器之间的应用层协议,是通用的、无状态的、面向对象的协议。

HTTP是基于客户/服务器模式,且面向连接的。典型的HTTP事务处理有如下的过程:

(1)客户与服务器建立连接;

(2)客户向服务器提出请求;

(3)服务器接受请求,并根据请求返回相应的文件作为应答;

(4)客户与服务器关闭连接。

客户与服务器之间的HTTP连接是一种一次性连接,它限制每次连接只处理一个请求,当服务器返回本次请求的应答后便立即关闭连接,下次请求再重新建立连接。这种一次性连接主要考虑到WWW服务器面向的是Internet中成干上万个用户,且只能提供有限个连接,故服务器不会让一个连接处于等待状态,及时地释放连接可以大大提高服务器的执行效率,IPIDEA极速网络带宽,每日包含全球资源ip。

HTTP协议的作用原理包括四个步骤:

连接(connect):Web浏览器与Web服务器建立连接,打开一个称为socket(套接字)的虚拟文件,此文件的建立标志着连接建立成功。

请求(request):Web浏览器通过socket向Web服务器提交请求。HTTP的请求一般是GET或POST命令(POST用于FORM参数的传递)。GET命令的格式为:GET 路径/文件名 HTTP/1.0文件名指出所访问的文件,HTTP/1.0指出Web浏览器使用的HTTP版本。

应答(response):Web浏览器提交请求后,通过HTTP协议传送给Web服务器。Web服务器接到后,进行事务处理,处理结果又通过HTTP传回给Web浏览器,从而在Web浏览器上显示出所请求的页面。关闭连接(close):客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。

请求与响应:用于HTTP协议交互的信息被称为HTTP报文。请求端(客户端)的HTTP报文叫做请求报文,响应端(服务器端)的叫做响应报文。HTTP报文本身是由多行数据构成的字符串文本。HTTP报文大致可分为报文首部和报文主体两块。两者由最初出现的空行来划分。通常,并不一定要有报文主体。

HTTP的请求报文由四部分组成(请求行+请求头部+空行+请求体):

  1. 是请求方法,GET和POST是最常见的HTTP方法,除此以外还包括DELETE、HEAD、OPTIONS、

PUT、TRACE。不过,当前的大多数浏览器只支持GET和POST。

  1. 为请求对应的URL地址,它和报文头的Host属性组成完整的请求URL,
  2. 是协议名称及版本号。
  3. 是HTTP的报文头 ,报文头包含若干个属性,格式为“属性名:属性值”,服务端据此获取客户端的信息。
  • Client-IP:提供了运行客户端的机器的IP地址
  • From:提供了客户端用户的E-mail地址
  • Host:给出了接收请求的服务器的主机名和端口号
  • Referer:提供了包含当前请求URI的文档的URL
  • UA-Color:提供了与客户端显示器的显示颜色有关的信息
  • UA-CPU:给出了客户端CPU的类型或制造商
  • UA-OS:给出了运行在客户端机器上的操作系统名称及版本
  • User-Agent:将发起请求的应用程序名称告知服务器
  • Accept:告诉服务器能够发送哪些媒体类型
  • Accept-Charset:告诉服务器能够发送哪些字符集
  • Accept-Encoding:告诉服务器能够发送哪些编码方式Accept-Language:告诉服务器能够发送哪些语言
  • TE:告诉服务器可以使用那些扩展传输编码
  • Expect:允许客户端列出某请求所要求的服务器行为
  • Range:如果服务器支持范围请求,就请求资源的指定范围
  • Cookie:客户端用它向服务器传送数据
  • Cookie2:用来说明请求端支持的cookie版本
  1. 是报文体,它将一个页面表单中的组件值通过param1=value1¶m2=value2的键值对形式编码成一个格式化串,它承载多个请求参数的数据。不但报文体可以传递请求参数,请求URL也可以通过类似于“/chapter15/user.html? param1=value1¶m2=value2”的方式传递请求参数。

HTTP的响应报文也由四部分组成( 响应行+响应头+空行+响应体):

  1. 报文协议及版本;
  2. 状态码及状态描述;
  3. 响应报文头,也是由多个属性组成;
  • Age:(从最初创建开始)响应持续时间
  • Public:服务器为其资源支持的请求方法列表
  • Retry-After:如果资源不可用的话,在此日期或时间重试
  • Server:服务器应用程序软件的名称和版本
  • Title:对HTML文档来说,就是HTML文档的源端给出的标题
  • Warning:比原因短语更详细一些的警告报文
  • Accept-Ranges:对此资源来说,服务器可接受的范围类型
  • Vary:服务器会根据这些首部的内容挑选出最适合的资源版本发送给客户端
  • Proxy-Authenticate:来自代理的对客户端的质询列表
  • Set-Cookie:在客户端设置数据,以便服务器对客户端进行标识
  • Set-Cookie2:与Set-Cookie类似
  • WWW-Authenticate:来自服务器的对客户端的质询列表
  1. 响应报文体,即我们真正要的“内容”。

Content-Type(内容类型),一般是指网页中存在的 Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些 PHP 网页点击的结果却是下载一个文件或一张图片的原因。Content-Type 标头告诉客户端实际返回的内容的内容类型。

三次握手:第一次握手:客户端要向服务端发起连接请求,首先客户端随机生成一个起始序列号ISN(比如是100),那客户端向服务端发送的报文段包含SYN标志位(也就是SYN=1),序列号seq=100。

第二次握手:服务端收到客户端发过来的报文后,发现SYN=1,知道这是一个连接请求,于是将客

户端的起始序列号100存起来,并且随机生成一个服务端的起始序列号(比如是300)。然后给客户端回复一段报文,回复报文包含SYN和ACK标志(也就是SYN=1,ACK=1)、序列号seq=300、确认号ack=101(客户端发过来的序列号+1)。

第三次握手:客户端收到服务端的回复后发现ACK=1并且ack=101,于是知道服务端已经收到了序列号为100的那段报文;同时发现SYN=1,知道了服务端同意了这次连接,于是就将服务端的序列号300给存下来。然后客户端再回复一段报文给服务端,报文包含ACK标志位(ACK=1)、ack=301(服务端序列号+1)、seq=101(第一次握手时发送报文是占据一个序列号的,所以这次seq就从101开始,需要注意的是不携带数据的ACK报文是不占据序列号的,所以后面第一次正式发送数据时seq还是101)。当服务端收到报文后发现ACK=1并且ack=301,就知道客户端收到序列号为300的报文了,就这样客户端和服务端通过TCP建立了连接。

四次挥手:比如客户端初始化的序列号ISA=100,服务端初始化的序列号ISA=300。TCP连接成功后客户端总共发送了1000个字节的数据,服务端在客户端发FIN报文前总共回复了2000个字节的数据。

第一次挥手:当客户端的数据都传输完成后,客户端向服务端发出连接释放报文(当然数据没发完时也可以发送连接释放报文并停止发送数据),释放连接报文包含FIN标志位(FIN=1)、序列号seq=1101(100+1+1000,其中的1是建立连接时占的一个序列号)。需要注意的是客户端发出FIN报文段后只是不能发数据了,但是还可以正常收数据;另外FIN报文段即使不携带数据也要占据一个序列号。

第二次挥手:服务端收到客户端发的FIN报文后给客户端回复确认报文,确认报文包含ACK标志位(ACK=1)、确认号ack=1102(客户端FIN报文序列号1101+1)、序列号seq=2300(300+2000)。此时服务端处于关闭等待状态,而不是立马给客户端发FIN报文,这个状态还要持续一段时间,因为服务端可能还有数据没发完。

第三次挥手:服务端将最后数据(比如50个字节)发送完毕后就向客户端发出连接释放报文,报文包含FIN和ACK标志位(FIN=1,ACK=1)、确认号和第二次挥手一样ack=1102、序列号

seq=2350(2300+50)

第四次挥手:客户端收到服务端发的FIN报文后,向服务端发出确认报文,确认报文包含ACK标志

位(ACK=1)、确认号ack=2351、序列号seq=1102。注意客户端发出确认报文后不是立马释放TCP连接,而是要经过2MSL(最长报文段寿命的2倍时长)后才释放TCP连接。而服务端一旦收到客户端发出的确认报文就会立马释放TCP连接,所以服务端结束TCP连接的时间要比客户端早一些。

HTTPS协议:HTTP传输的数据是明文, 只要抓包,都可以看到并且修改为了安全: 引入HTTPS,HTTPS协议提供了三个关键的指标

加密(Encryption) , HTTPS 通过对数据加密来使其免受窃听者对数据的监听,这就意味着当用户在浏览网站时,没有人能够监听他和网站之间的信息交换,或者跟踪用户的活动,访问记录等,从而窃取用户信息。

数据一致性(Data integrity) ,数据在传输的过程中不会被窃听者所修改,用户发送的数据会 完整 的传输到服务端,保证用户发的是什么,服务器接收的就是什么。

身份认证(Authentication) ,是指确认对方的真实身份,也就是 证明你是你 (可以比作人脸识别),它可以防止中间人攻击并建立用户信任。

HTTPS 并不是一项新的应用层协议,只是 HTTP 通信接口部分由 SSL 和 TLS 替代而已。通常情况下,HTTP 会先直接和 TCP 进行通信。在使用 SSL 的 HTTPS 后,则会先演变为和 SSL 进行通信,然后再由SSL 和 TCP 进行通信。也就是说,HTTPS 就是身披了一层 SSL 的 HTTP。

为什么需要加密?

因为http的内容是明文传输的,明文数据会经过中间代理服务器、路由器、wifi热点、通信服务运营商等多个物理节点,如果信息在传输过程中被劫持,传输的内容就完全暴露了。劫持者还可以篡改传输的信息且不被双方察觉,这就是 中间人攻击 。所以我们才需要对信息进行加密。最容易理解的就是对称加密。

什么是对称加密?对称加密就是机密一段信息,也可以对加密后的信息进行解密如果通信双方都各自持有同一个密钥,且没有别人知道,这两方的通信安全当然是可以被保证的(除非密钥被破解)。

然而最大的问题就是这个密钥怎么让传输的双方知晓,同时不被别人知道。如果由服务器生成一个密钥并传输给浏览器,那在这个传输过程中密钥被别人劫持到手了怎么办?之后他就能用密钥解开双方传输的任何内容了,所以这么做当然不行。

什么是非对称加密?简单来说就是两把钥匙一把公钥一把私钥,用工要加密的内容必须用私钥才能解开,同样,私钥加密的内容只有公钥才能解开。

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值