Java教程

HTTP协议(二)

本文主要是介绍HTTP协议(二),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

七、报文

7.1 HTTP报文结构

HTTP报文结构 = 首部+空行+报文主体
首部:为客户端和服务器分别处理请求和响应提供所需要信息。对客户端用户来说,这些信息大部分你无须亲自查看。

报文结构

  7.1.1 HTTP报文首部

  请求报文  

  HTTP报文首部= 方法+URI+HTTP版本+HTTP首部字段等部分构成。

请求报文首部结构

 

 响应报文

  报文首部 =  HTTP版本+状态码(数字和原因短语)+HTTP首部字段。

响应报文首部结构

  首部字段

  作用:给浏览器和服务器提供报文主体大小、所使用的语言、认证信息等内容。

  结构: 首部字段名:字段值

  首部字段重复:当首部中出现了两个或两个以上具有相同首部字段名时,无明确规范,根据浏览器内部处理逻辑的不同,结果不同。(有些优先处理第一次出现;有些优先处理最后出现)

  4种HTTP首部字段类型

  1. 通用首部字段(General Header Fields):请求报文和响应报文两方都会使用的首部。
    通用首部字段

     

  2. 请求首部字段(Request Header Fields):从客户端向服务器端发送请求报文时使用的首部。补充请求附加内容、客户端信息、响应内容相关优先级等信息。
    请求首部字段

     

  3. 响应首部字段(Response Header Fields):从服务器端向客户端返回响应报文时使用的首部。补充响应附加内容,也会要求客户端附加额外的内容信息。
    响应首部字段

    4.实体首部字段(Entity Header Fields):针对请求报文和响应报文的实体部分使用的首部,补充资源内容更新时间等与实体有关的信息。

    实体首部字段

     

  首部字段分类

  1. 端到端首部(End-to-end Header):该类中的首部会转发给请求/响应对应的最终接收目标,且必须保存在由缓存生成的响应中,规定它必须被转发。

  2.逐跳首部(Hop-by-hop Header):该类中首部只对单次转发有效,会因通过缓存或代理而不在转发;使用该首部需提供Connection首部字段。

  7.1.2 通用首部字段

  1.Cache-Control

  指定该字段的指令,可操作缓存的工作机制。指令参数可选,多个之间”,“分割。

缓存请求指令
缓存响应指令

  a.public指令:明确表明其他用户也可利用缓存。

  b.private指令:响应只以特定用户作为对象。即缓存服务器会对该特定用户提供资源缓存服务,对其它用户发送过来的请求,代理服务器则不会返回缓存。

  c.no-cache指令:防止从缓存中返回过期资源。请求中包含,表明客户端不接收缓存过的响应中间缓存服务器必须将客户端请求转发给源服务器;响应中包含,表明缓存服务器不能对资源进行缓存,源服务器以后也将不对缓存服务器请求提出的资源有效性进行确       认且禁止对其响应资源进行缓存操作。

  d.no-store指令:暗示请求(和对应的响应)或响应中包含机密信息。该指令规定缓存不能在本地存储请求或响应的任一部分。

  e.s-maxage指令:只适用于供多位用户使用的公共缓存服务器(代理),即对于向同一用户重复返回响应的服务器来说,该指令无任何作用。

  f.max-age指令:请求包含时,判定缓存资源的缓存时间数值比指定时间数值更小时,客户端接收缓存资源。当max-age值为0时,缓存服务器通常需要将请求转发给源服务器。响应包含时,缓存服务器将不对资源的有效性再作确认,max-age数值代表资源保护为      缓存的最长时间。

  j.min-fresh指令:要求缓存服务器返回至少还未过指定时间的缓存资源。(实例:min-fresh为60秒,过了60秒的资源都无法作为响应返回)

  h.max-stale指令:缓存资源,即使过去也照常接收。该指令未指定参数值,无论经过多久客户端都接收响应;指定具体数值,即使过期,只要在指定时间内,仍旧被客户端接收。

  i. only-if-cached指令:表示客户端仅在缓存服务器本地缓存目标资源的情况下才会要求其返回。即不会要求缓存资源有效也不会要求重新加载,若本地缓存无响应,则返回504Gateway Timeout。

  g.must-revalidate指令:代理会向源服务器再次验证即将返回的响应缓存目前是否仍然有效。如代理无法连通源服务器,则必须返回504,该指令忽略max-stale指令。

  k.proxy-revalidate指令:所有缓存服务器在接收到客户端带有该指令的请求返回响应之前,必须再次验证缓存的有效性。

  l.no-transform指令:该指令规定无论在请求还是响应中,缓存都不能改变实体的媒体类型。防止缓存或代理压缩图片等类似操作。

  m.cache-extension token:通过其标记可扩展Cache-Control首部字段内的指令,但仅对可理解它的缓存服务器有效,理解使用,不理解忽略。

  2.connection

  作用:控制不再转发给代理的首部字段(如指定某个字段不在转发给代理);管理持久连接(指定Connection值为Keep-Alive则可持久连接)。

 3. date

 表明创建HTTP报文的日期和时间。
 4. Pragma  

 该字段仅用于客户端发送请求中,客户端要求所有中间服务器不返回缓存的资源。

 5. Trailer  

 该字段事先说明在报文主体后记录了哪些首部字段。

 6. Transfer-Encoding  

 规定传输报文主体时采用的编码方式。

 7. Upgrade  

检测HTTP协议及其它协议是否可使用更高的版本进行通信,参数值可用来指定一个完全不同的通信协议。

8. Via  

追踪客户端与服务器端之间请求和响应报文的传输路径。避免请求回环发生。

9. Warning  

告知用户一些与缓存相关的问题的警告。

格式:Warning:[警告码][警告主机:端口号]"[警告内容]"([日期时间])

警告码(可扩展)

 

7.1.3 请求首部字段

从客户端往服务器端发送请求报文中所使用的字段,补充请求附加信息、客户端信息、对响应内容相关的优先级等。

1. Accept  

通知服务器,用户代理能够处理的媒体类型及媒体类型相对优先级。q=数值;表示权重值、”;“分割、范围0~1(精确小数点后3位)、1最大、默认权重1.0。当服务器提供多种内容时,将优先返回权重值最高的媒体类型。

2. Accept-Charset  

通知服务器用户代理支持的字符集及字符集的相对优先顺序,用于内容协商机制的服务器驱动协商。一次性可指定多种字符集,q表示权重。

3.Accept-Encoding  

告知服务器用户代理支持的内容编码及内容编码的优先级顺序。可一次指定多种内容编码,q表示权重,可用通配符*表示任意编码格式。

常见内容编码格式{

   a.gzip:文件压缩程序;采用Lempel-Ziv算法和32位循环冗余校验  

   b.compress:UNIX文件压缩程序;采用Lempel-Ziv-Welch算法    

   c.deflate:组合使用zlib格式及deflate压缩算法  

   d.identity:不执行压缩或不会变化的默认编码格式   }

4.Accept-Language  

告知服务器用户代理能够处理的自然语言集。q表示权重和优先级,可指定多个语言集。

5.Authorization  

告知服务器,用户代理认证信息(证书值)。

6.Expect  

告知服务器期望出现某种特定行为。客户端可利用该首部字段写明期望的扩展。

7.From  

告知服务器使用用户代理的用户电子邮件地址,目的为了显示搜索引擎等用户代理负责人的电子邮箱联系方式。

8.Host  

通知服务器,请求资源所处的互联网主机名和端口号,以区分同一个IP地址上出主机外含有其它虚拟主机。

9.If-Match  

条件请求,服务器接收到附带条件的请求后,只有判定指定条件为真时,才会执行请求。该请求会告知服务器匹配资源所用的实体标记(ETag)值,服务器比对If-Match字端值和资源的ETag值,两者一致才会执行,否正返回412Precondition Failed响应。*指定If-Match字段值时,忽略ETag值,资源存在就处理请求。

10.If-Modified-Since  

告知服务器如该字段值早于资源的更新时间,则希望能处理请求;在该字段值的日期之后,如未更新过返回304Not Modified响应。用于确认代理或客户端拥有本地资源的有效性。
11.If-None-Match  

用于该字段指定值和实体ETag值与请求资源ETag不一致时,就告知服务器处理请求。

12. If-Range  

告知服务器如该字段值(ETag值或时间)和请求资源的ETag值或时间一致,则作为范围请求处理,否则,返回全部资源。

13. If-Unmodified-Since   

告知服务器,指定的请求资源只有在字段值内指定的日期时间之后,未发生更新的请情况下,才能处理请求。更新则返回412。

14. Max-Forwards  

该字段以十进制整数形式指定可经过的服务器最大数目,服务器往下一个服务器转发请求之前,该字段数值-1后重新赋值,当服务器接收到该字段值为0的请求时,则不在转发,直接返回响应。

15.Proxy-Authorization  

告知服务器认证所需要的信息。

16. Range  

告知服务器资源指定范围。正常处理请求之后返回状态码206,无法处理该范围请求时,则会返回状态码200和全部资源。

17. Referer  

告知服务器请求的原始资源的URI,一般不写入因原始资源URI可能含有ID和密码等保密信息。

18. TE  

告知服务器客户端能够处理响应的传输码方式及相对优先级。除指定传输编码外,还可以指定伴随trailer字段的分块传输码的方式。

19. User-Agent  

用于传达浏览器种类,该字段会将创建请求的浏览器和用户代理名称等信息传达给服务器。

7.1.4 响应首部字段

由服务器向客户端返回响应报文中所使用的字段,补充响应附加信息、服务器信息、及对客户端的附加要求等信息。

1.Accept-Ranges  

告知客户端服务器是否能处理范围请求,以指定获取服务器端某个部分的资源。字段值仅有两种,bytes:可处理;none:不可处理。

2.Age  

告知客户端,源服务器在多久之前创建了响应(s);如创建该响应的服务器是缓存服务器,则该值指缓存后的响应再次发起认证到认证完成的时间值。

3.ETag  

告知客户端实体标识,将资源以字符串形式做唯一标识,服务器会为每份资源分配对应的ETag值,资源更新ETag值对应更新。如下载中途出现连接中断、在连接的情况,会依照ETag值来指定资源。{

     强ETag值:不论实体发生多么细微的变化都会改变其值。

     弱ETag值:只用于提示资源是否相同,只有资源发生了根本改变,产生差异时才会改变ETag值,这时会在字段值最开始处附加W/    }

4. Location  

将响应接收方引导至某个与请求URI位置不同的资源。

5. Proxy-Authenticate  

将由代理服务器所要求的认证信息发送给客户端。

6. Retry-After  

告知客户端应在多久之后再次发送请求,可指定具体日期时间,也可是创建响应后的秒数。

7. Server  

告知客户端当前服务器上安装的HTTP服务器应用程序的信息,包括服务器上软件应用名称、版本号、安装时启用的可选项。

8. Vary  

对缓存进行空控制,源服务器会向代理服务器传达关于本地缓存使用方法的命令。实例:代理服务器接收到带有该字段的请求时,如果使用Accept-Language字段值相同,则直接从缓存中返回响应,否则需要从源服务器端获取资源后才可做为响应返回。

9. www-Authenticate  

用于HTTP访问认证。会告知客户端适用于访问请求URI所指定资源的认证方案(Basic或Digest)和带参数提示的质询。

7.1.5 实体首部字段

请求报文和响应报文中的实体部分所使用的首部,补充内容的更新时间等与实体相关的信息。

1. Allow  

通知客户端能够支持Request-URI指定资源的所有HTTP方法,服务器接收到不支持的HTTP方法时,返回状态码405。

2. Content-Encoding  

告知客户端服务器对实体的主体部分选用的内容编码方式。(内容编码:指在不丢失实体信息的前提下所进行的压缩。常见内容编码:gzip、compress、deflate、identity)

3.Content-Language  

告知客户端,实体主体使用的自然语言(中、英等语言)。

4. Content-Length  

表明实体主体部分的大小(字节),对实体主体进行内容编码传输时,不可在使用该首部字段。

5.Content-Location  

报文主体返回资源对应的URI。

6.Content-MD5  

该首部字段是一串MD5算法生成的值,用于检查报文主体在传输过程中是否保持完整,确认传输到达。(加密方法:对报文主体执行MD5算法获得128位二进制数,在通过Base64编码后将结果写入首部字段值。转Base64是因为HTTP首部无法记录二进制)

7.Content-Range  

返回响应时使用该首部字段,能告知客户端作为响应返回的实体的那个部分符合范围请求。

8. Content-Type  

说明实体主体内对象媒体类型。

9. Expires  

该字段会将资源失效的日期告知客户端。不希望缓存服务器进行缓存时,该字段最好和Date字段时间相同。

10.Last-Modified  

指明资源最终修改时间。

7.2 Cookie

工作机制:用户识别及状态管理。Web为管理用户的状态通过Web浏览器,将一些数据写入用户的计算机内,当用户访问该Web时,可通过通信方式取回之前发放的Cookie。

安全:调用Cookie时,可校验Cookie有效期,以及发送方的域、路径、协议等信息,所以正式发布的Cookie内的数据不会因来自其它Web站点和攻击者的攻击而泄漏。

Cookie首部字段

 

服务器准备开始管理客户端的状态时,事先告知各种信息。

字段值:

Set-Cookie字段值

1. expires  

一旦Cookie从服务器端发送至客户端,服务器端就不存在可以显示删除Cookie的方法。但可以覆盖已过期的Cookie,实现对客户端Cookie的删除操作。

2.path  

限制指定Cookie的发送范围的文件目录。

3.domain  

指定域名与结尾匹配一致。如指定baidui.com后www.baidui.com和www2.baidui.com等均可发送cookie。

4.HttpOnly  

目的为防止跨站脚本攻击对Cookie信息窃取。

7.2.2 Cookie  

告知服务器,当客户端相获得HTTP状态管理支持时,会在请求中包含从服务器接收到的Cookie。接收到多个Cookie时,可以以多个Cookie形式发送。  

7.2.3 其它首部字段  

HTTP首部字段是可以自行扩展的。在Web服务器和浏览器的应用上,会出现各种非标准的首部字段。

1.X-Frame-Options

HTTP响应首部,用于控制网站内容在其他Web网站的Frame标签内的显示。为防止点击劫持攻击。{

        字段值DENY:拒绝  

        SAMEORIGIN:仅同源域名下的页面匹配时许可。}

2.X-XSS-Protection  

HTTP响应首部,针对跨站脚本攻击的一种对策,用于控制浏览器XSS防护机制的开关。{

        字段值 0:将XSS过滤设置为无效状态  

        1:将XSS过滤设置成有效状态。      }

3.DNT  

HTTP请求首部,拒绝个人信息被收集,表示拒绝被精准广告追踪的一种方法。{

       字段值0:同意被追踪  

       1:拒绝被追踪          }

4. P3P  

HTTP相应首部,通过利用P3P技术,可让Web网站上的个人隐私变成为一种仅供程序可理解的形式,以保护用户隐私。{

         设定步骤a.创建P3P隐私   

         b.创建P3P隐私对照文件后,保存命名在/w3c/p3p.xml  

         c.从P3P隐私中新建Compact policies后,输出到HTTP响应中       }

八 HTTPS&HTTP

8.1 HTTP

HTTP缺点:

  • 通信使用明文,内容可能被窃听。
  • 不验证通信方的身份,因此有可能遭遇伪装。
  • 无法证明报文的完整性,可能已遭篡改。

8.1.1  通信使用明文,内容可能被窃听

HTTP本身不具备加密功能,无法对通信整体进行加密,即HTTP报文使用明文方式发送。

窃听原因和方法:按TCP/IP协议族的工作机制,通信内容在所有的通信线路上都有可能遭到窥视。窃听相同段上的通信,只需搜集在互联网上的流动数据包(帧),对收集来的数据包使用抓包或嗅探工具解析即可。
        避免窃听的加密技术,加密对象:通信、内容

通信加密:和SSL(安全套接口协议)或TLS(安全层传输协议)组合使用,加密HTTP的通信内容。SSL建立安全通信线路后,就可以在该线路上进行HTTP通信。

内容加密:将参与通信的内容本身进行加密,即将HTTP报文所含的内容进行加密处理后在发送请求。

8.1.2 不验证通信方的身份,因此有可能遭遇伪装

隐患:

  • 无法确定请求发送至目标Web服务器是否是按真实意图返回响应的那台服务器。有可能是已伪装的Web服务器。
  • 无法确定响应返回到的客户端是否是按真实意图接收响应的那个客户端。有可能是已伪装的客户端。
  • 无法确定正在通信的对方是否具备访问权限。因为某些Web服务器上保存着重要的信息,只想发给特定用户通信的权限。
  • 无法判定请求是来自何方、出自谁手。
  • 即使是无意义的请求也会照单全收。无法阻止海量请求下的DoS(拒绝服务攻击)攻击。

解决办法:查明对手证书,SSL除加密处理还提了一种被称为证书的手段,用于确定方。证书由值得信任的第三方机构颁发。

8.1.3 无法证明报文的完整性,可能已遭篡改

无法确认发出请求/响应和接收到的请求/响应是前后相同的。

中间人攻击(Man-in-the-Middle attack,MITM):请求或响应在传输途中,遭攻击者拦截并篡改内容的攻击。

防止篡改:使用HTTPS,SSL提供认证和加密处理及摘要功能。

8.2 HTTPS

HTTPS = HTTP + 加密 + 认证 + 完整性保护

HTTP通常直接和TCP通信。使用SSL时,则先和SSL通信,在由SSL和TCP通信。

HTTP&HTTPS

 

8.2.1 SSL

SSL采用公开密钥加密的加密处理方式。

对称密钥加密(共享密钥加密):加密和解密同用一个密钥的方式。

公开密钥加密:有两把密钥,一把私有密钥。一把公开密钥;私有密钥不能让任何人知道,公开密钥可随意发布,任何人均可获取。发送密文的一方使用对方的公钥进行加密,接收到加密信息后使用自己的私钥进行解密。

8.2.2 相关证书

EV SSL证书

作用:证明作为通信一方的服务器是否规范;可确认对方服务器背后运营的企业是否真实存在。

颁发:该证书是基于国际标准的认证指导方针颁发,严格规定了对运营组织是否真实的确认方针。

数字证书

为证明公开密钥本身是准确无篡改、哪台服务器本身的,而产生。由第三方认证机构(CA)和其它相关机关颁发的公开密钥证书。

数字证书获取步骤:

       1.服务器运营人员向数字证书认证机构提出公开密钥申请。

       2.数字证书认证机构在判明提出申请者的身份后,会对已申请的公开密钥做数字签名。

       3.分配这个已签名的公开密钥,并将该公开密钥放入公钥证书后绑定在一起。

数字证书验证通过可证明:

        1.认证服务器的公开密钥的是真实有效的数字证书认证机构。

        2.服务器的公开密钥是值得信赖的。

客户端证书
作用:进行客户端认证。证明服务器正在通信的对方始终是预料之内的客户端。
问题:需按照用户人数付费;不同的用户群体安装困难;只要是获得了安装客户端证书的计算机使用权限,就拥有了客户端证书的使用权限。

8.2.3 HTTPS

混合加密机制 交换密钥时使用公开密钥加密方式,之后建立通信交换报文阶段使用共享密钥加密方式。(因:公开密钥加密比工享密钥加密处理速度要慢。)
通信步骤:

HTTPS通信步骤

1.客户端通过发送Client Hello 报文开始SSL通信。报文包含客户端支持的SSL的指定版本、加密组件(Cipher Suite)列表(所使用的加密算法及密钥长度等)。
2.服务器可进行SSL通信时,会以Server Hello报文作为应答。和客户端一样,在报文中包含SSL版本以及加密组件。服务器的加密组件内容是从接收到的客户端加密组件内筛选出来的。
3.之后服务器发送Certificate报文。报文中包含公开密钥证书。
4.最后服务器发送Server Hello Done报文通知客户端,最初阶段的SSL握手协商部分结束。
5.SSL第一次握手结束之后,客户端以Client Key Exchange报文作为回应。报文中包含通信加密中使用的一种被称为Pre-master secret的随机密码串。该报文已用步骤3中的公开密钥进行加密。
6.接着客户端继续发送Change Cipher Spec报文。该报文会提示服务器,在此报文之后的通信会采用Pre-master secret密钥加密。
7.客户端发送Finished报文。该报文包含连接至今全部报文的整体校验值。这次握手协商是否能够成功,要以服务器是否能够正确解密该报文作为判定标准。
8.服务器同样发送Change Cipher Spec报文。
9.服务器同样发送Finished报文。
10.服务器和客户端的Finished报文交换完毕之后,SSL连接就算建立完成。当然,通信会受到SSL的保护。从此处开始进行应用层协议的通信,即发送HTTP请求。
11.应用层协议通信,即发送HTTP响应。
12.最后由客户端断开连接。断开连接时,发送close_notify报文。上图做了一些省略,这步之后再发送TCP FIN报文来关闭与TCP的通信。
以上步骤中,应用层发送数据时会附加一种叫MAC(Message Authentication Code)的报文摘要。MAC能够查知报文是否遭到篡改,保护报文的完整性。

HTTPS缺点:处理速度变慢。因HTTP需要做服务器、客户端双方加密及解密处理,会消耗CPU和内存等硬件资源;SSL通信部分消耗网络资源(网络负载可慢2到100倍),因需处理通信所以时间延长。
改善速度变慢:SSL加速器硬件,可提高数倍SSL的计算速度。

九、确认用户身份认证

核对信息方法:

  • 密码:只有本人才会知道的字符串信息。
  • 动态令牌:仅限本人持有的设备内显示的一次性密码。
  • 数字证书:仅限本人(终端)持有的信息。
  • 生物认证:指纹和虹膜等本人的生理信息。
  • IC卡等:仅限本人持有的信息。

HTTP使用的认证方式

  • BASIC认证(基本认证)
  • DIGEST认证(摘要认证)
  • SSL客户端认证
  • FromBase认证(基于表单认证)

9.1 BASIC认证

Web服务器与通信客户端之间进行的认证方式。

BASIC认证步骤

步骤:

1.当请求的资源需要BASIC认证时,服务器会随状态码401,返回带WWW-Authenticate首部字段的响应。该字段包含认证方式(BASIC)及Request-URI安全域字符串(realm)
2.接收到状态码401的客户端为了通过BASIC认证,需要将用户ID及密码发送给服务器。发送的字符串内容是由用户ID和密码构成,两者中间以冒号(:)连接后,再经过Base64编码处理。
3.接收到包含首部字段Authorization请求的服务器,会对认证信息的正确性进行验证。如验证通过,则返回一条包含Request-URI资源的响应。
缺点:Base64并不是加密处理,被窃听可能性很高;想再进行一次BASIC认证时,一般浏览器无法实现认证注销操作。

9.2 DIGEST认证

使用质询/响应方式,即一开始一方先发送认证要求给另外一方,后使用从另外一方接收到在质询码计算生成响应码,最后将响应码返回给对方进行认证的方式。

优点:泄密可能性被降低;因为发送给对方的只是响应摘要及质询码产生的计算结果。

DIGES认证

步骤:

1.请求需要认证的资源时,服务器会随着状态码401,返回带WWW-Authenticate首部字段的响应。该字段内包含质问响应方式认证所需的临时质询码(随机数nonce)。

          首部WWW-Authenticate字段内部必须包含realm和nonce这两个字段,因客户端依靠向服务器回送这两个值进行认证。

          nonce每次返回401响应生成的任意随机字符串,该字符串通常推荐有Base64编码的十六进制数的组成形式,但实际内容依赖服务器的具体实现。

2.客户端接收到401状态码,返回响应中包含DIGEST认证必须的首部字段Authorization信息。

          Authorization字段信息:username、realm、nonce、uri、response      

                realm、nonce之前从服务器接收到的响应中的字段。

                username、realm限定范围内可进行认证的用户名。

               uri即Request-URI的值,考虑代理转发后其值可能被修改,因此事先会复制一份副本保存在uri。

               response即Request-Digest,存放经过MD5运算后的密码字符串,形成响应码。

3.接收到包含首部字段Authorization请求的服务器,会确认认证信息的正确性。认证通过返回包含Request-URI资源的响应。同时会在首部字段Authentication-Info写入认证成功的相关信息。 DIGEST认证提供防止密码被窃听的保护机制,但并不存在防止用户伪装的保护机制。

缺点:使用不便捷灵活,且达不到多数Web网站对高度安全等级的追求标准。

9.3 SSL客户端认证

避免用户ID和密码正确即可认证是本人的行为。SSL客户端认证是借用HTTPS的客户端证书完成认证的方式,凭借客户端证书认证,服务器可确认访问是否来自己登录的客户端。

9.3.1 步骤

前置条件:将客户端证书分发给客户端,且客户端必须安装此证书。

1.接收到需要认证资源的请求,服务器会发送Certificate Request报文,要求客户端提供客户端证书。

2.用户选择将发送的客户端证书后,客户端会把客户端证书信息以Client Certificate报文方式发送给服务器。

3.服务器验证客户端证书验证通过后方可领取证书内客户端的公开密钥,然后开始HTTPS加密通信。

9.3.2 SSL认证方式

SSL认证=基于表单认证+证书认证

双因素认证:认证过程中不仅需要密码这一个因素,还需要申请认证者提供其他持有信息,从而作为另外一个因素,与其组合使用的认证方式。即第一个认证因素的SSL客户端证书用来认证客户端计算机,另一个认证因素的密码用来确定这是用户本人行为。

费用:从认证机构购买客户端证书+服务器运营者为保证自己搭建的认证机构安全运营产生的费用。
基于表单认证:并未在HTTP协议中定义,客户端会向服务器上的Web应用程序发送登录信息,按登录信息的验证结果认证。
Session管理及Cookie应用
基于表单认证标准规范尚未定论,一般使用Cookie来管理Session。
       步骤:

                1.客户端用户ID和密码等登录信息放入报文的实体部分,通常是以POST方法把请求发送给服务器。此时会使用HTTPS通信进行HTML表单画面显示和用户输入数据发送。

                2.服务器会发放以识别用户的SessionID,验证从客户端发送过来的登录信息进行身份认证,后把用户的认证状态与SessionID绑定后记录在服务器。向客户端返回响应时,在首部字段Set-Cookie内写入SessionID(区分不同用户的等位号)

                                防止被盗或猜出:SessionID使用难以推测的字符串,且服务器进行有效期管理。

                                减轻跨站脚本攻击(XSS):在Cookie内加httponly属性。

                3.客户端接收到从服务器端发送来的SessionID后,将其作为Cookie保存在本地。下次服务器发送请求时,浏览器会自动发送Cookie,所以SessionID也随之发送到服务器。服务器可通过验证接收到的SessionID识别用户和其认证状态。

十、基于HTTP功能追加协议

出现这些协议的原因是HTTP使用过于广泛无法替换,但面对现在网络的发展其本身无法面对如此多样的变化,以及自身存在短板,所以出现追加协议加以补充使用。

10.1 HTTP瓶颈

HTTP实时检测服务器数是否更新时,必须频繁从客户端到服务器端进行确认,如服务器端没有内容更新则会产生无用信息和浪费资源的通信。(HTTP每次发送请求无论服务器数据是否更新,返回响应都会发送全部的数据)

Web实现实时更新时HTTP标准瓶颈为:

  • 一条连接上只可发送一个请求。
  • 请求只能从客户端开始。客户端不可以接收除响应以外的指令。
  • 请求/响应首部未经压缩就发送。首部信息越多延迟越大。
  • 发送冗余的首部。每次互相发送相同的首部造成的浪费较多。(每次请求都会发送相同的首部信息)
  • 可任意选择数据压缩格式。非强制压缩发送。(不压缩数据直接发送,耗时耗资源)

10.2 Ajax

Ajax:异步JavaScript与XML技术,一种有效利用JavaScript和DOM(Document Object Model,文档对象模型)的操作,以达到局部Web页面替换和加载的异步通信手段。仅更新一部分页面,响应中传输的数据量较少。

核心技术:XMLHttpRequest的API,通过JavaScript脚本语言的调用就能和服务器进行HTTP通信。借该手段,能从已加载完毕的Web页面上发起请求,只更新局部页面。

注:Ajax仅解决了HTTP每次都返回所以数据问题,并未解决每次都发送相同首部和不压缩数据直接发送问题。

10.3 Comet

Comet:一种通过延迟应答,模拟实现服务器端向客户端推送的功能。即服务器端有内容更新,Comet不会让请求等待,而是直接给客户端返回响应。

步骤:客户端发送确认更新情况的请求。

           Comet将响应置于挂起状态,当服务器端内容更新时,返回该响应。

缺:虽可实时更新,但为保留响应,一次连接的持续时间变长;维护连接消耗更多资源。并未解决HTTP发送相同首部和不压缩直接发送问题。

10.4 SPDY协议

Google发布,解决HTTP性能瓶颈,缩短Web页面加载时间(50%)

SPDY:未完全改写HTTP,是在TCP/IP的应用层与传输层之间通过新加会话层的形式运作,对控制数据的流动,还是采用HTTP建立通信连接。通信中使用SSL。

SPDY位置结构图

10.4.1 SPDY的HTTP附加功能

多路复用流:通过单一的TCP连接,可无限制处理多个HTTP请求。所有请求的处理都在一条TCP连接上完成,因此TCP处理效率得以提高。

赋予请求优先级:SPDY可无限制的并发处理请求,可请求逐个分配优先级顺序。解决了在发送多个请求时,因带宽低而导致响应变慢。

压缩HTTP首部:压缩HTTP请求和响应首部。减少通信产生的数据包数量和发送的字节数。

推送功能:支持服务器主动向客户端推送数据的功能。服务器可直接发送数据,不必等待客户端请求。

服务器提示功能:服务器可主动提示客户端请求所需的资源。由于客户端发现资源之前就可以获知资源的存在,因此在资源已缓存等情况下,可避免发送不必要请求。

缺点:浏览器需对应SPDY做出一定程度的改动;只是将单个域名(IP地址)的通信多路复用,当一个Web网站上使用多个域名下的资源,改善效果就会受到限制;SPDY可有效消除HTTP瓶颈的技术,但Web网站并非仅有HTTP瓶颈导致。

10.5 WebSocket

WebSocket:Web浏览器与Web服务器之间全双工通信标准。为解决Ajax和Comet里XMLHttpRequest附带的缺陷所引起的问题。

该协议建立在HTTP基础上的协议,所有连接由客户端发起,一旦服务器和客户端建立了WebSocket协议的通信连接,之后所有的通信都依靠这个专用协议进行,通信过程中可相互发送json、xml、html或图片等任意格式数据,客户端和服务器任意一方都可直接向对方发送报文。

10.5.1 特点

推送功能:支持由服务器向客户端推送数据的推送功能。即服务器可直接发送数,不必等待客户端请求。

减少通信量:建立起WebSocket连接,就希望一直保持连接状态。对比HTTP,每次连接时的总开销减少,且WebSocket首部信息很小,通信量相应减少。

10.5.2 web Socket连接步骤

WebScoket连接过程

步骤:

1.客户端使用HTTP协议发起握手请求,该协议中携带Upgrade首部字段(告知服务器通信协议发生改变)

2.服务器返回状态码为101 Switching Protocols响应,握手成功,确立WebSocket连接之后,通信更改给WebSocket独立的数据帧。

十一、Web攻击

11.1 主动攻击

主动攻击:指攻击者通过直接访问Web应用把攻击代码传入的攻击模式。该模式直接针对服务器上的资源进行攻击,攻击者需要能够访问到资源。

11.1.1 以服务器为目标的主动攻击。

代表:SQL注入、OS命令注入

SQL注入

SQL注入(SQLInjection)是指针对 Web 应用使用的数据库,通 过运行非法的 SQL而产生的攻击。该安全隐患有可能引发极大 的威胁,有时会直接导致个人信息及机密信息的泄露。

影响:1.非法查看或篡改数据库内的数据。 2.规避认证。 3.执行和数据库服务器业务关联的程序等。

OS命令注入

OS 命令注入攻击(OS Command Injection)是指通过 Web 应用,执行 非法的操作系统命令达到攻击的目的。只要在能调用 Shell 函数的地 方就有存在被攻击的风险。 可以从 Web 应用中通过 Shell 来调用操作系统命令。倘若调用 Shell 时存在疏漏,就可以执行插入的非法 OS 命令。 OS 命令注入攻击可以向 Shell 发送命令,让 Windows 或 Linux 操作系 统的命令行启动程序。也就是说,通过 OS 注入攻击可执行 OS 上安 装着的各种程序。

11.2 被动攻击

被动攻击:指利用圈套策略执行攻击代码的攻击模式。该攻击过程中,攻击者不直接对目标Web应用访问发起攻击。

攻击模式:

     1.攻击者诱使用户触发已设置好的陷阱,而陷阱会启动发送已嵌入攻击代码的HTTP请求。

     2.当用户不知不觉中招之后,用户浏览器或邮件客户端就会触发这个陷阱。

     3.中招后的用户浏览器会把含有攻击代码的HTTP请求发送给作为攻击目标的Web应用,运行攻击代码。

     4.执行完攻击代码,存在安全漏洞的Web应用会成为攻击者的跳板,可能导致用户所持的Cookie等个人信息被窃取,登录状态中的用户权限遭恶意滥用等后果。

11.2.1 以服务器为目标的被动攻击。

代表:跨站脚本攻击、跨站点请求伪装

跨站脚本攻击

跨站脚本攻击(Cross-Site Scripting,XSS)是指通过存在安全漏洞的 Web 网站注册用户的浏览器内运行非法的 HTML标签或 JavaScript 进 行的一种攻击。动态创建的 HTML部分有可能隐藏着安全漏洞。就 这样,攻击者编写脚本设下陷阱,用户在自己的浏览器上运行时,一 不小心就会受到被动攻击。

影响:1.利用虚假输入表单骗取用户个人信息。 2.利用脚本窃取用户的 Cookie 值,被害者在不知情的情况下, 帮助攻击者发送恶意请求。 3.显示伪造的文章或图片。

11.2.2 利用用户身份攻击企业内部网络

利用被动攻击,可发起对原本从互联网上无法直接访问的企业内 网等网络的攻击。只要用户踏入攻击者预先设好的陷阱,在用户 能够访问到的网络范围内,即使是企业内网也同样会受到攻击。即内网依然可访问Web、接收邮件,诱导触发陷阱对内网进行攻击。

11.2.3 HTTP 首部注入攻击

HTTP 首部注入攻击(HTTP Header Injection):指攻击者通过在响应 首部字段内插入换行,添加任意响应首部或主体的一种攻击。

HTTP 响应截断攻击:向首部主体内添加内容的攻击。HTTP 响应截断攻击是用在 HTTP 首部注入的一种攻击。攻击顺 序相同,但是要将两个 %0D%0A%0D%0A 并排插入字符串后发 送。利用这两个连续的换行就可作出 HTTP 首部与主体分隔所需 的空行了,这样就能显示伪造的主体,达到攻击目的。这样的攻 击叫做 HTTP 响应截断攻击。

影响:1.设置任何 Cookie 信息。2.重定向至任意 URL。3.显示任意的主体(HTTP 响应截断攻击。

11.3 其他攻击

11.3.1 邮件首部注入攻击

邮件首部注入(Mail Header Injection):指 Web 应用中的邮件发送功 能,攻击者通过向邮件首部 To 或 Subject 内任意添加非法内容发起的 攻击。利用存在安全漏洞的 Web 网站,可对任意邮件地址发送广告 邮件或病毒邮件。

11.3.2 目录遍历攻击

目录遍历(Directory Traversal)攻击&路径遍历(Path Traversal)攻击:指对本无意公开的文件目录, 通过非法截断其目录路径后,达成访问目的的一种攻击。通过 Web 应用对文件处理操作时,在由外部指定文件名的处理存在 疏漏的情况下,用户可使用 .../ 等相对路径定位到 /etc/passed 等绝对 路径上,因此服务器上任意的文件或文件目录皆有可能被访问到。这 样一来,就有可能非法浏览、篡改或删除 Web 服务器上的文件。

11.3.3 远程文件包含漏洞

远程文件包含漏洞(Remote File Inclusion)是指当部分脚本内容需要 从其他文件读入时,攻击者利用指定外部服务器的 URL充当依赖文 件,让脚本读取之后,就可运行任意脚本的一种攻击。这主要是 PHP 存在的安全漏洞,对 PHP 的 include 或 require 来说, 这是一种可通过设定,指定外部服务器的 URL作为文件名的功能。 但是,该功能太危险,PHP5.2.0 之后默认设定此功能无效。

11.3.4 因设置或设计上的缺陷引发的安全漏洞

指错误设置 Web 服务 器,或是由设计上的一些问题引起的安全漏洞。

  强制浏览:指从安置在 Web 服务器 的公开目录下的文件中,浏览那些原本非自愿公开的文件。

  影响:1. 泄露顾客的个人信息等重要情报。2.泄露原本需要具有访问权限的用户才可查阅的信息内容。3.泄露未外连到外界的文件.

  不正确的错误消息处理:指Web 应用的错误信息内包含对攻击者有用的信息。

  错误信息类型:1.Web 应用抛出的错误消息。2.数据库等系统抛出的错误消息。

  开放重定向:一种对指定的任意 URL作重定向跳转 的功能。而于此功能相关联的安全漏洞是指,假如指定的重定向 URL 到某个具有恶意的 Web 网站,那么用户就会被诱导至那个 Web 网 站。

11.3.5 因会话管理疏忽引发的安全漏洞

会话管理是用来管理用户状态的必备功能,但是如果在会话管理上有 所疏忽,就会导致用户的认证状态被窃取等后果。

会话劫持(Session Hijack):指攻击者通过某种手段拿到了用户的会 话 ID,并非法使用此会话 ID 伪装成用户,达到攻击的目的。

会话固定攻击:对以窃取目标会话 ID 为主动攻击手段的会话劫持而言,会话固定攻 击(Session Fixation)攻击会强制用户使用攻击者指定的会话 ID,属 于被动攻击。

跨站点请求伪造(Cross-Site Request Forgeries,CSRF)攻击:指攻击 者通过设置好的陷阱,强制对已完成认证的用户进行非预期的个人信 息或设定信息等某些状态更新,属于被动攻击。

影响:1. 利用已通过认证的用户权限更新设定信息等。2.利用已通过认证的用户权限购买商品。3.利用已通过认证的用户权限在留言板上发表言论。

11.3.6 密码破解

密码破解攻击(Password Cracking)即算出密码,突破认证。攻击不 仅限于 Web 应用,还包括其他的系统(如 FTP 或 SSH 等)。

密码破解两种手段:1.通过网络的密码试错。{a.穷举法(Brute-force Attack,又称暴力破解法)是指对所有密钥 集合构成的密钥空间(Keyspace)进行穷举。即,用所有可行的 候选密码对目标的密码系统试错,用以突破验证的一种攻击。b.字典攻击是          

                     指利用事先收集好的候选密码(经过各种组合方式后 存入字典),枚举字典中的密码,尝试通过认证的一种攻击手法。}

         2.对已加密密码的破解(指攻击者入侵系统,已获得加密或散 列处理的密码数据的情况)。

11.3.7 点击劫持

点击劫持(Clickjacking):指利用透明的按钮或链接做成陷阱,覆盖 在 Web 页面之上。然后诱使用户在不知情的情况下,点击那个链接 访问内容的一种攻击手段。这种行为又称为界面伪装(UI Redressing)。

11.3.8 DoS 攻击

DoS 攻击(Denial of Service attack):一种让运行中的服务呈停止状 态的攻击。有时也叫做服务停止攻击或拒绝服务攻击。DoS 攻击的对 象不仅限于 Web 网站,还包括网络设备及服务器等。

两种 DoS 攻击方式:1.集中利用访问请求造成资源过载,资源用尽的同时,实际上服务也就呈停止状态。 2.通过攻击安全漏洞使服务停止。

11.3.9 后门程序

后门程序(Backdoor):指开发设置的隐藏入口,可不按正常步骤使用受限功能。利用后门程序就能够使用原本受限制的功能。

3 种类型:1.开发阶段作为 Debug 调用的后门程序。2.开发者为了自身利益植入的后门程序。3.攻击者通过某种方法设置的后门程序。

十二、相关基础

12.1 可扩展标记语言

12.1.1 HTML

超文本标记语言:为发送Web上的超文本而开发的标记语言。

超文本:一种文档系统,可将文档中任意位置的信息与其他信息(文本或图片等)建立关联。

标记语言:通过在文档的某部分穿插特别的字符串标签,用来修饰文档的语言。出现在HTML文档内的这种特殊字符串加HTML标签。

12.1.2 XML

可扩展标记语言:一种可按应用目标进行扩展的通用标记语言。

旨在:使互联网数据共享更容易。

共同点:

都使用标签构成树形结构,可自定义扩展标签。

区别:

XML读取数据比HTML简单。

12.2 CSS

层叠样式表:指定如何展现HTML内的各种元素,属于样式标准之一。

理念:让文档的结构和设计分离,达到解耦。

12.3 动态HTML

指使用客户端脚本语言将静态HTML内容变成动态的技术总称。(单机鼠标点开新闻、地图等即为动态HTML)

动态技术:调用客户端脚本语言JavaScript,对HTLM的Web页面动态改造;DOM(Document Object Model,文档对象模型)指定欲发生动态变化的HTML。

12.4 JSON

一种以JavaScript的对象表示法为基础的轻量级数据标记语言。

可处理数据类型:false/null/true/对象/数组/数字/字符串

 

这篇关于HTTP协议(二)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!