《http图解》知识点摘录

了解web及网络基础

TCP/IP 协议里最重要的一点是分层。按照层次分别分为以下四层:应用层、传输层、网络层和数据链路层

http处于应用层

IP(internet protocol)是一种协议的名称。IP协议的的作用是把各种数据包传送给对方。而要保证传送到对方那里,则需要满足各类条件。其中两个重要的条件是IP地址和MAC地址。IP地址指明了节点被分配到的地址。MAC地址是指网卡所属的固定地址。P地址可以和MAC地址进行配对。IP地址可变换,但MAC地址基本不会改变。

 TCP协议为了更容易传达大数据才把数据分割,而且TCP协议能够确认数据最终是否送达到对方(发送短首先发送一个带SYN标志的数据包给对方。接收端收到后回传一个带有SYN/ACK标志的数据包以示传达确认信息。最后发送短再回传一个带AKC标志的数据包,代表“握手“结束,除了上述三次握手,TCP协议还有其他各种手段来保证通信的可行性)

DNS服务是和HTTP协议一样位于应用层的协议。它提供域名到IP地址之间的解析服务。DNS协议提供通过域名查找IP地址,或逆向从IP地址反查域名的服务。

URL正是使用Web浏览器等访问Web页面时需要输入的网页地址。 URI就是由某个协议方案表示的资源的定位标识符。URL用字符串标识某一互联网资源,而URL表示资源的地点(互联网上所处的位置)。可见URL是URI的子集。

简单的HTTP协议

http用于客户端和服务器之间的通信(请求访问文本或图像等资源的一端称为客户端,而提供资源响应的一端称为服务器端)

客户端发送报文构成形式:方法  uri 协议版本 请求首部字段
服务器端的返回内容报文:协议版本 状态码 状态码的原因短语 响应首部字段 主体

http协议自身不具备保存之前发送过的请求或者响应的功能(HTTP/1.1虽然是无状态协议,但是为了实现期望的保持状态功能,于是引入了cookie技术,有了cookie技术,再用http协议通信,就可以管理状态了)

http使用URI定位互联网上的资源。正是因为URI的特定功能,在互联网上任意位置的资源都能访问到。

告知服务器意图的http方法:
    GET(获取资源)、POST(传输实体主体)、PUT(传输文件)、HEAD(获取报文首部)、DELETE(删除文件)、TRACE(追踪路径)、CONNECT(要求用隧道协议链接代理)、OPTIONS(查询针对请求URI指定的资源支持的方法)


持久链接旨在建立一次TCP连接后进行多次请求和响应的交互(只要任意一段没有明确提出断开连接,则保持TCP连接状态),好处在于减少了TCP连接的重复建立和断开所造成的额外开销,减轻了服务器的负载。这样Web页面的显示速度也就相应提高了。

管线化:不等待响应,直接发送下一个请求。这样就能够做到同时并行发送多个请求,而不需要一个接一个的等待响应。(管线化技术比持久链接还要更快,请求数越多,时间差越明显)

Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端状态。(根据服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie,当客户端下次再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。服务器端发现客户端发送过来的Cookie后,会去检查究竟是从哪一个客户端发来的链接请求,然后对比服务器上的记录,最后得到之前的状态信息)



HTTP报文内的HTTP信息
用于HTTP交互协议的信息被称为HTTP报文。请求端(客户端)为请求报文,响应端(服务器端)的叫做响应报文。HTTP报文本身是由多行(用CR+LF做换行符)数据构成的字符串文本。报文分为报文首部(服务器端或客户端需处理的请求或响应的内容及属性)和报文主体(应被发送的主体)两块。(通常并不一定要有报文主体)
 
请求报文和响应报文的首部内容由以下数据组成:请求行、状态行、首部字段(通用首部、请求首部、响应首部、实体首部)、其他。

HTTP传输数据可以按照原貌直接传输,但也可以在传输过程中通过编码提升传输速率。通过在传输时便吗,能有效的处理大量的访问请求。但是对CPU的消耗比较大。

报文是HTTP的基本单位,由8位组直接流组成,通过HTTP通信传输。实体最为请求或响应的有效载荷数据(补充项)被传输,其内容由实体首部和实体主体组成。
HTTP报文的主体用于传输请求或响应的实体主体。通常,报文主体等于实体主体。只有当传输中进行编码操作时,实体主体的内容发生变化,才导致他和报文主体产生差异。

内容编码指明应用在实体内容上的编码格式,并保持实体信息原样压缩。内容编码后实体由客户端接收并负责解码。常用有:gzip(GNU  zip)、compress(unix 系统系统的标准压缩)、deflate(zlib)、identity(不编码)。

把实体分块,能够让浏览器逐步显示页面的功能叫做分块传输编码。每一块都会用十六进制标记块的大小,而实体主体的最后一块会使用“0(CR+LF)”来标记。

HTTP协议中也采纳了多部份对象集合,发送的一份报文可以含有多类型实体。通常是在图片或文本文件等上传时使用。报文中使用多部分对象集合时,需要在首部字段里面加上Content-type。使用boundary字符串来划分多部分对象集合指明的各类实体。在boundary字符串指定的各个实体的起始行之前插入“--”标记,而在多部分对象集合对应的字符串的最后插入“--”标记。

在下载过程中如果遇到网络中断问题,得从头开始。为解决上述问题,需要一种可恢复机制,要实现该功能需要指定下载的实体范围,像这样指定范围发送的请求叫做范围请求。执行范围请求时,会用到首部字段Range来指定资源的byte范围。byte范围的指定形式如下。
最对范围请求,响应会返回状态码206 Partial Content 的响应报文。另外,对于多重范围的范围请求,响应会在首部字段Content-Type表明multipart/byteranges后返回响应报文。如果服务器端无法响应范围请求,这会返回状态码200 OK和完整的实体内容。


当浏览器的默认语言为英语或者中文,访问相同的URI的Web页面时,则会显示对应的英语版或中文版的Web页面。这样的机制称为内容协商。内容协商会以响应资源的语言、字符集、编码方式等作为判断的基准。包含在请求报文中的某些首部字段就是判断的基准。有3种类型:服务器驱动协商、客户端驱动协商、透明协商。

返回结果的http状态码

状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结果。借助状态码,用户可以知道服务器端是正常处理了请求,还是出现了错误。

2XX的响应结果表明请求被正常处理了。200 OK:表示客户端发来的请求在服务器端被正常处理了。204 No Content:该状态码代表服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分。但是返回的响应报文中不含实体主体部分。另外,也不允许返回任何实体的主体。(一般在只需要从客户端往服务器发送信息,而对客户端不需要发送新信息内容的情况下使用) 206 Partial Content : 该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的 GET请求。响应报文中包含由  Content-Range指定范围的实体内容。

3XX 重定向:3XX响应结果表明浏览器需自行某些特殊处理以正确处理请求。301 Moved Permanently 永久性重定向:该状态码表示请求的资源已经被分配到了新的 URI,以后应使用资源现在所指的URI.。  302 FOUND 临时重定向:和301相似,但是302不是被永久移动,只是临时性质的  。 303 See Other :  该状态码表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源。(和302不同的是明确指出要使用GET方法)
(当301、302、303 响应状态码返回时,几乎所有的浏览器都会把POST改成GET,并删除请求报文主体,之后请求会自动再次发送。
   301、302标准是禁止将POST方法改成GET方法的,但是实际使用时大家都这么做)
304 Not Modified:该状态表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。(和重定向没有关系)
307 Temporary Redirect : 临时重定向。(和302差不多)

4XX :4XX的响应结果表明客户端是发生错误的原因所在。
400 Bad Request:报文中存在语法错误。
401 Unauthorized: 该状态码表示发送请求需要有通过HTTP认证(BASIC认证、 DIGEST认证)的认证信息。另外若之前已进行过一次请求,则表示用户认证失败。
403 Forbidden : 该状态码表明对请求资源的访问被服务器拒绝了
404 Not Found :该状态码表明服务器上无法找到请求的资源。除此之外,也可以在服务器端拒绝请求且不想说明理由时使用。

5XX:响应的结果表明服务器本身发生错误。
500 Internal Sever Error: 表明服务器在执行请求时发生了错误。也可能是Web应用存在bug或某些临时故障。
503  Service Unavailable:该状态码表明服务器展示处于超负载或正在进行停机维护,现在无法处理请求

状态码和状况不一致的情况:不少状态码的响应都会出现错误,当用户可能察觉不到


与HTTP协作的 Web 服务器 

即使物理层面只有一台服务器,但只要使用虚拟主机的功能,则可以假想已具有多台服务器。
在互联网上,域名通过DNS服务器映射到IP地址(域名解析)之后访问目标网站。可见当请求发送到服务器时,已经是以 IP地址形式访问了。
在相同的IP地址下,由于虚拟主机可以同时寄存多个不同主机名和域名的Web网站,因此在发送HTTP请求时,必须在Host首部内完整指定主机名或域名的URI。

HTTP通信时,除客户端和服务器以外,还有一些用于通信数据转发的应用程序,这些应用和服务器可以将请求转发给通信线路上的下一站服务器,并且能接受从那台服务器发送响应再转发给客户端。
代理:一种有转发功能的应用程序,扮演中间人的角色。接受由客户端发送的请求并转发给服务器,同时也接受服务器返回的响应并转发给客户端。
          分为缓存代理(代理转发响应时,缓存代理会预先将资源的副本保存在代理服务器上面)、透明代理(转发请求或响应时,不对报文做任何加工)
          使用代理服务器的目的:利用缓存技术减少网络带宽的流量,组织内部针对特定网站的访问控制、以获取访问日志为主要目的
网关:网关是转发其他服务器通信数据的服务器,接受从客户端发送来的请求时,他就想自己拥有资源一样处理请求。(就是借别人的资源),有时客户端都不会察觉
           网关的工作机制和代理十分相似。而网关能使通信线路上的服务器提供非HTTP协议服务。利用网关能提高通信的安全性,因为可以在客户端与网关之间的通信线路加密              以确保连接的安全
隧道:在相隔甚远的客户端和服务器两者之间进行中转,并保持双方通信链接的应用程序。
           隧道可按要求建立起一条与其它服务器的通信线路,届时使用SSL等加密手段进行通信。隧道的目的是确保客户端能与服务器进行安全的通信。其本身是不会去解析                    HTTP请求的,隧道会在通信双方断开连接时结束。

缓存是指代理服务器或客户端本地磁盘内保存的资源副本。利用缓存可以减少对源服务器的访问,节省了通信流量和通信时间。(请求的资源如果已经被缓存则直接由缓存服务器返回给客户端)。缓存服务器的优势在于利用缓存可避免多次从源服务器转发资源。因此客户端可就近从缓存服务器上获取资源,而源服务器也不必多次处理相同的请求了。会有一定的缓存期限,以确保资源的有效性。
缓存还可以存在客户端的浏览器中,客户端把缓存称为临时网络文件。如果缓存有效,就不必再向服务器请求相同的资源了,可以直接从本地磁盘读取。



HTTP首部

HTTP协议的请求和响应报文中必定包含HTTP首部。首部内容为客户端和服务器分别处理和响应提供所需要的信息。(对于客户端来说这些信息无需查看)

在请求中,HTTP报文由方法、URI、HTTP版本、HTTP首部字段等部分构成
《http图解》知识点摘录



在响应中,HTTP报文由HTTP版本、状态码(数字和原因短语)、HTTP首部字段3部分构成。
《http图解》知识点摘录


HTTP首部字段是由首部字段名和字段值构成的,中间用冒号“:”分割。(首部字段名:字段值)

通用首部字段:
        1. Cache-Control  通过指定首部字段Cache-Control的指令,就能操作缓存的工作机制。
            (指令参数是可选的,多个指令之间通过“,”分隔。)
                  public:表明其他用户也可利用缓存        
                  private:响应只以特定的用户作为对象(缓存服务器(中间的服务器)只对该特定用户提供资源缓存服务,对其他用户发送过来的请求,代理服务器不会返回缓存)
                  no-cache:使用no-cache指令的目的是为了防止从缓存中返回过期的资源。(客户端发送的请求中如果包含no-cache指令,则表示客户端将不会接受缓存过的响                                            应。于是,“中间”的缓存服务器必须把客户端请求转发给源服务器。如果服务器返回的响应中包含no-cachez指令,那么缓存服务器不能对资源进行缓                                            存)
                  no-store:暗示请求(和对应的响应)或响应中包含机密信息。因此该指令规定缓存不能在本地储存请求或响应的任一部分。
                  max-age: 其数值代表资源保存为缓存的最长时间
                  s-maxage:和max-age相同。不同点是这个指令只适用于供多位用户使用的公共缓存服务器              
                  min-fresh:要求缓存服务器返回至少还未过指定时间的缓存资源(比如 min-fresh=60(单位:秒))
                  max-stale:(例如max-stale=3600)如果指令未指定参数值,那么无论经过多久,客户端都会接受响应;如果指令中指定了具体数值,那么即使过期,只要仍处于max-                                     stale指定的时间内,仍旧会被客户端接受
                  only-if-cached:表示客户端仅在缓存服务器本地缓存目标资源的情况下才会要求其返回。
                  must-revalidate:代理会向源服务器再次验证即将返回的响应缓存目前是否仍然有效。
                  proxy-revalidate:要求所有的缓存服务器在接受到客户端带有该指令的请求返回响应之前,必须再次验证缓存的有效性
                  no-transform:该指令规定无论是在请求还是在响应中,缓存都不能改变实体主体的媒体类型。可以防止缓存或者代理压缩图片等操作
                  Cache-Control扩展:通过cache-extension标记(token),可以扩展Cache-Control首部字段内的指令
  
            2.connection 
                   1.控制不再转发给代理
                   2.管理持久连接(HTTP/1.1版本的默认连接都是持久连接)
            3.Date(首部字段Date 表明创建HTTP报文的日期和时间)
                   格式:Date: Tue, 03 Jul 2012 04:40:59 GMT
            4.Pragma(该首部字段属于通用首部字段,但只用在客户端发送的请求中。客户端会要求所有的中间服务器不返回缓存的资源)             
            5.Trailer:首部字段Trailer  会事先说明在报文主体后记录了哪些首部字段。
            6.Transfer-Encoding:规定了传输报文主体时采用的编码方式
            7. Upgrade:首部字段Upgrade用于检测HTTP协议及其他协议是否可使用更高的版本进行通信,其参数值可以用来指定一个完全不同的通信协议。
            8.Via:追踪客户端与服务器之间的请求和响应报文的传输路径。(报文经过代理或网关时,会先在首部字段Via中附加该服务器的信息,然后再进行转发。)
            9.Warning: 通常会告知用户一些与缓存相关问题的警告(共有7种警告码,可自行翻阅资料)
                                    Warning: [警告码] [警告的主机:端口号]“[警告内容]”([日期时间])
                                 
请求首部字段:(从客户端往服务器端发送请求报文中所使用的字段,用于补充请求的附加信息、客户端信息、对响应内容相关的优先级等)
    
       1.  Accept :可通知服务器用户代理能够处理的媒体类型及媒体类型的相对优先级。可使用type/subtype这种形式,一次指定多种媒体(若想要给媒体类型增加优先级,则使               用q=来表示权重值(0-1)。不写表示1,为最大。
       2.  Accept-Charset:用于通知服务器用户代理支持的字符集及字符集的相对优先顺序。另外可一次性指定多种字符集。可用权重q=表示优先级。
       3.  Accept-Encoding:用于告知服务器用户代理支持的内容编码及内容编码的优先级顺序。可一次性指定多种。(可用*最为通配符,指定任意的编码格式)
       4.  Accept-Language:告知用户代理能过处理的自然语言集,以及其优先级。可以一次指定多种。可用权重q
       5.  Authorization: 用于告知服务器用户代理的认证信息(证书值)
       6.  Expect :告知服务器,期望出现某种特定行为
       7.  From:告知服务器使用用户代理的用户的电子邮件的地址。
       8.  Host: 告知服务器,请求资源所在的互联网主机名和端口号(是唯一一个必须被包含在请求内的首部字段)(若未设置,则空着)
       9.  If-Match:此类首部字段,都可称为条件请求。服务器接受到请求,只有判断为真后才会执行请求。
                             只有 if-match的字段值和ETag值匹配一致时,服务器才会接受请求
       10.Max-Forwads:以十进制整数形式指定可经过的服务器最大数目。



确保Web安全的HTTPS
 
http的缺点:通信使用明文(不加密),内容可能会被窃听。不验证通信方身份,可能遭遇伪装,无法证明报文的完整性,所以有可能已遭篡改
    
窃听相同段上的通信并非难事。只需要收集在互联网上的流动数据包(帧)就行了。对于收集来的数据包解析工作,可交给那些抓包或嗅探器工具。

加密技术:
    1.通信的加密:HTTP协议中并没有加密机制,但可以通过和SSL(安全套接层)或TLS(安全传输协议)的组合使用,加密HTTP的通信内容(与SSL组合使用的HTTP被称为                                 HTTPS或HTTP over SSL,用SSL建立安全通信线路之后,就可以在这条线路上进行HTTP通信了)
    2.内容的加密:报文首部未进行加密处理,报文主体进行加密处理

不验证通信方的身份就可能遭遇伪装:在HTTP协议通信时,由于不存在确认通信方的处理步骤,任何人都可以发起请求。另外,服务器只要接受到请求,不管对方是谁都会返回一个响应(但也仅限于发送端的IP地址和端口号没有被Web服务器设定限制访问的前提下)
虽然使用HTTP协议无法确定通信方,但是使用SSL则可以。SSL不仅提供给加密处理,而且还使用了一种被称为证书的手段,可用于确定方。
证书是由值得信任的第三方机构颁发,可以证明服务器和客户端实际存在的,他可以坚守个人信息泄露,也可以完成个人身份的确认。

在HTTP传输的过程中,接收到的内容可能有误,由于HTTP协议无法证明通信的报文的完整性。像这样,请求或者响应在传输途中,遭攻击者拦截并篡改内容的攻击称为中间人攻击。(攻击人会随意篡改请求和响应,而让客户端与服务器之间的通信看上去仍然是正常的)
防止被篡改的方式:使用MD5和SHA-1等散列值校验方法,以及用来确认文件的数字签名方法。不管使用哪一种方法,都需要操纵客户端的用户本人亲自检查验证下载的文件是否就是原来服务器上的文件。浏览器无法自动帮用户检查。(如果PGP和MD5本身被改写的话,用户是没有办法意识到的)

HTTP+加密+认证+完整性保护=HTTPS
使用HTTPS通信时,不再使用http://,而是改用https://。
HTTPS并非是应用层的一种新协议。只是HTTP通信接口部分用SSL和TLS协议替代而已。
通常,HTTP直接和TCP通信。当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信了。
采用SSL之后,HTTP就拥有了HTTPS的加密、证书和完整性保护这些功能。
SSL是独立于HTTP的协议,所以不光是HTTP协议,其他运行在应用层的SMTP和Telnet等协议均可配合SSL协议使用。可以说SSL是当今世界上应用最广泛的网络安全技术

SSL采用一种叫做公开**加密的加密处理方式(近代的加密方法中加密算法是公开的,而**确实保密的。加密和解密都会用到**,没有**就无法对密码解密。)

加密和解密同用一个**的方式称为共享**加密,也被叫做对**加密。
公开**加密使用一对非对称的**。一把叫做私有**,另一把叫做公开**。顾名思义,私有**不能让其他人知道,而公开**可以随意发布。
使用公开**加密方式,发送密文的一方使用对方的公开**进行加密处理。对方收到被加密的信息之后,在使用自己的私***进行解密。利用这种方式,不需要发送用来解密的私有**,也不必担心**被攻击者窃听而盗走。

证书的一个作用是用来证明作为通信一方的服务器是否规范,另外一个作用是可确认对方服务器背后运营的企业是否真实存在拥有该特性的证书就是EV SSL证书

HTTPS中还可以使用客户端证书。以客户端证书进行客户端认证,证明服务器正在通信的对方始终是预料之内的客户端,其作用和服务器证书如出一辙

使用SSL时,它的处理速度会变慢。(其慢分两种,一种是指通信变慢,另一种是指由于大量消耗CPU及内存等资源,导致处理速度变慢。),和使用HTTP相比,网络负载可能会慢2到100倍。
针对速度变慢这一问题,可以使用SSL加速器这种硬件来改善问题

构建Web内容的技术
HTML和CSS已经知道了

动态HTML:是通过调用客户端脚本语言Javascript实现对HTML的Web页面的动态改造。利用DOM可指定欲发生动态变化的HTML元素
DOM是用以操作HTML文档和XML文档的的API(应用编程接口)。使用DOM可以将HTML内的元素当做操作对象,如取出元素内的字符串、改变那个CSS的属性等等,是页面的设计发生改变。
通过调用Javascript等脚本语言对DOM的操作,可以以更为简单的方式控制HTML的改变。

CGI是指Web服务器在接受到客户端发送过来的请求后转发给程序的一组机制。在CGI作用下,程序会对请求的内容作出相应的动作,比如创建HTML等动态内容。

使用CGI的程序叫做CGI程序,通常使用Perl、PHP、Ruby、和C等编程语言编写而成。

Servlet是一种能再服务器上创建动态内容的程序。Servlet是用Java语言实现的一个接口,属于面向企业级Java(JavaEE)

确认访问用户身份的认证
HTTP使用的认证方式
1.BASIC认证(基本认证)
2.DIGEST认证(摘要认证)
3.SSL客户端认证
4.FormBase认证(基于表单认证)

BASIC认证:一种基本认证,在HTTP1.0时就存在。虽然采用base64编码方式,但这不是加密处理,不需要任何附加信息即可对其解码。
                     另外,除此之外想再进行一次BASIC认证时,一般的浏览器无法实现注销操作,这也是问题。
                     BASIC认证使用上不够便捷灵活,且达不到多数Web网站期望的安全等级,因此它并不常用
DIGEST认证:同样使用质询/响应的方式,但不会像BASIC认证那样直接发送明文密码。
                        所谓质询响应方式是指,一开始一方会先发送认证要求给另一方,接着使用从另一方那接收到的质询码计算生成响应码。最后将响应码发送给对方进行认证。
SSL客户端认证:是借由HTTPS的客户端证书完成认证的方式。凭借客户端证书(在HTTPS一章已讲解)认证,服务器可确认访问是否自己来登陆的客户端。                        
                             为达到SSL客户端认证的目的,需要事先将客户端证书发给客户端,且客户端必须安装此证书。
                             一个认证因素的SSL客户端证书用来认证客户端计算机,另一个认证因素的密码则用来确定这是用户本人的行为。
基于表单的认证(多数情况下用):基于表单的认证方法并不是在HTTP协议中定义的。客户端会向服务器上的Web应用程序发送登录信息,按登录信息的验证结果认证。
                             多数情况下,输入已事先登陆的用户ID(通常是任意字符串或邮件地址)和密码等登录信息后,发送给Web应用程序,基于认证结果来决定认证是否成功


Session管理及Cookie应用:基于表单认证的标准规范尚未有定论,一般会使用Cookie来管理Session(会话),因为HTTP的无状态协议使得之前用户状态无法通过协议保存下来,因此使用Cookie来管理Session,以弥补HTTP协议中不存在的状态管理功能。



基于HTTP的功能追加协议
 消除HTTP瓶颈的SPDY:由Google在2010年发布SPDY,其开发目标旨在解决HTTP的性能瓶颈,缩短Web页面加载时间(50%)
 HTTP的瓶颈:有些频繁更新的网站需要直接把那些内容反馈到客户端的界面上。虽然看起来很简单,但是HTTP却无法妥善处理好这项任务。
                         1.Ajax是一种有效利用JavaScript和DOM的操作,以达到局部Web页面替换加载的异步通信手段。和以前的同步通信相比,由于它只更新一部分页面,响应中传                             输的数据因此会减少,这一优点显而易见。而利用Ajax实时的从服务器获取内容,有可能导致大量请求产生。另外,Ajax仍未解决HTTP协议本身存在的问                                   题。 
                         2.Comet的解决方法
                            接收到请求后,先挂起,等待内容有更新就返回该响应,虽然内容做到了实时更新,但一次连接的持续时间也变长了。期间会消耗更多资源。
                         3.SPDY的目标:在协议级别消除HTTP所遭遇的瓶颈

SPDY:没有完全改写HTTP协议,而是在TCP/IP的应用层与运输层之间通过新加会话层的形式运作。同时,考虑到安全性问题,SPDY规定采用SSL。
             使用SPDY后,HTTP协议额外获得以下功能:
                      1.多路复用流:所有请求处理都在一条TCP连接完成,因此TCP的处理效率得到提升。
                      2.赋予请求优先级:不仅可以无限制的并发处理请求,还可以给请求逐个分配优先级(解决带宽低而导致响应变慢的问题)
                      3.压缩HTTP首部
                      4.推送功能:支持服务器主动向客户端推送数据的功能。
                      5.服务器提示功能:服务器可以主动提示客户端所需求的资源

使用浏览器进行全双工通信的WebSocket:Web浏览器和Web服务器之间全双工通信标准。
一旦Web服务器与客户端之间建立起WebSocket协议的通信连接,之后所有的通信都依靠这个专用协议进行。通信过程中可互相发送JSON、XML、HTML或图片等任意格式的数据。只要确立WebSocket通信连接,不论服务器还是客户端,任意一方都可直接向对方发送报文。
WebSocket协议的主要特点:
    1.推送功能:服务器想客户端直接推送数据
    2.减少通信量:只要建立起WebSocket连接,就希望一直保持连接状态。
为了实现WebSocket通信,需要用到HTTP的Upgrade首部字段,告知服务器通信协议发生改变,已达到我收的目的。

HTTP/2.0  主要针对以下七项技术
《http图解》知识点摘录


Web服务器管理文件的WebDAV
    WebDAV是一个可对Web服务器上的内容直接进行文件赋值、编辑等操作的分布式文件系统。它作为扩展HTTP/1.1的协定定义在RFC4918 。
    除了创建删除文件等基本功能,他还具备文件创建者管理、文件编辑过程中禁止其他用户内容覆盖的枷锁功能,以及对文件内容修改的版本控制功能。
       新增概念:1.集合:是一种统一管理多个资源的概念。以集合为单位可进行各种操作。也可实现类似集合的集合这样的叠加。
                         2.资源:把文件或集合成为资源
                         3.属性:定义资源的属性
                         4.锁:把文件设置成无法编辑状态。多人同时编辑,可防止在同一时间进行内容的写入
       
       新增方法和状态码:

《http图解》知识点摘录
 

Web的攻击技术:
1.
简单的HTTP协议本身并不存在安全性问题,因此协议本身几乎不会成为攻击的对象。应用HTTP协议服务器和客户端,以及运行在服务器上的Web应用等资源才是攻击目标
HTTP不具备必要的安全功能,从整体来看HTTP就是一个通用的单纯协议机制。

在Web请求报文内加载攻击代码(客户端可以自由更改从浏览器接收到的HTTP请求的全部内容),就能发起对Web应用的攻击。若这时Web应用存在安全漏洞,那内部信息就会遭到窃取,或被攻击者拿到管理权限

针对Web应用的攻击模式
           1.主动攻击:是指攻击者通过直接访问Web应用,把攻击代码传入攻击模式。由于该模式是直接针对服务器上的资源进行攻击,因此攻击者需要能够访问到那些资源。                                   (代表性的攻击有SQL注入攻击和OS命令注入攻击。)
           2.被动攻击:利用圈套策略执行攻击代码的攻击模式。在被动攻击过程中,攻击者不直接对目标Web应用访问发起攻击。(利用用户身份攻击企业内部网络)


2.因输出值转义不完全引发的安全漏洞
   实施Web应用的安全对策课大致分为以下两部分
   1.客户端验证
   2.Web应用端(服务器端)的验证
         输入值验证
         输出值转义

 跨站脚本攻击:通过存在的安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或Javascript进行一种攻击。动态创建的HTML部分有可能隐藏着安全漏洞。就这样,攻击者编写脚本设下陷阱,用户在自己的浏览器运行时,一不小心就会收到被动攻击。可能造成以下影响:1.利用虚假输入表单片区用户个人信息2.利用脚本窃取用户的Cookie值,被害者在不知情的情况下,帮助公告记者发送恶意请求。3.显示伪造的文章或图片。

SQL注入攻击
SQL注入是指针对Web应用使用的数据库,通过运行非法的SQL而产生的攻击。
Web应用通常都会用到数据库,当需要数据库表内的数据进行检索或添加、删除等操作时,会使用SQL语句连接数据库进行特定的操作,如果在调用SQL语句的方式上存在疏漏,就有可能执行被恶意注入非法SQL语句),从而造成以下影响:非法查看或者篡改数据库内的数据,规避认证,执行和数据库服务器业务相关联的程序

OS命令注入攻击:是指通过Web应用,执行非法的操作系统命令达到攻击的目的。只要在能调用Shell函数的地方就有存在被攻击的风险。


HTTP首部注入攻击:是指攻击者通过在响应首部字段内插入换行,添加任意响应首部或者主题的一种攻击。属于被动攻击模式。
                                      向首部主体添加内容的攻击称为HTTP响应截断攻击
                                      造成以下影响:设定任何Cookie信息,重定向至任意URL,显示任意的主体
邮件首部注入攻击:Web应用中的邮件发送功能,攻击者通过向邮件首部To和Subject内任意添加非法内容发起的攻击。
目录遍历攻击:是指对本无意公开的文件目录,通过非法截断其目录路径后达成访问目的一种攻击。
远程文件包含漏洞:是指当部分脚本内容需要从其他文件读入时,攻击者利用指定外部服务器的URL充当依赖文件,让脚本读取之后,就可运行任意脚本的一种攻击。

3.因设置或设计上的缺陷引发的安全漏洞
    强制浏览:从安置在Web服务器的公开目录下的文件中,浏览那些原本非自愿公开的文件。(对那些原本不愿公开的文件,为了保证安全会隐蔽其URL。可一旦知道那些                             URL,也就意味着可浏览URL对应的文件。直接显示容易推测的文件名或文件目录索引时,通过某些方法可能会使URL产生泄露)
    不正确的错误消息处理:是指Web应用的错误信息内包含对攻击者有用的信息。与Web应用有关的主要错误信息如下所示:1.Web应用抛出的错误信息 2.数据库等包含的错误                                             信息
    开放重定向:是一种对指定的任意URL作重定向跳转的功能。                  
    
4.因会话管理疏忽引发的安全漏洞
     会话管理是用来管理状态的必备功能,但是如果在会话管理上有所疏忽,救回导致用户的认证状态被窃取等后果。
     
     会话劫持:是指攻击者通过某种手段拿到了用户的会话ID,并非法使用此会话ID伪装成用户,达到攻击的目的。
                       几种攻击者可获得会话ID的途径:通过非正规的生成方法推测会话ID的,通过窃听或XSS攻击盗取会话ID,通过会话固定攻击强行获取
     会话固定攻击:强制用户使用攻击者指定的会话ID,属于被动攻击。
     跨站点请求伪造:攻击者通过设置好的陷阱,强制对已完成认证用户进行非预期的个人信息或设定信息等某些状态更新,属于被动攻击。
                                  造成的影响:利用已通过认证的用户权限更新设定信息,利用已通过认证的用户权限购买商品,利用已通过认证的用户权限在留言板上发表言论




5.其他安全漏洞:

         1.密码**攻击:即算出密码,突破认证。攻击不仅限于Web应用,还包括其他的系统(如FTP或SSH等)
                                     手段:1.通过网络的密码试错 2.对已加密密码的**(攻击者入侵系统,获得已加密或散列处理的密码数据的情况)
                         
                                     对网络进行密码是试错 :1.穷举法:对所有**集合构成**空间进行穷举。即,用所有可行的候选密码对目标的系统试错,用以突破验证的一种攻击
                                                                              2.字典攻击:利用事先手机号的候选密码(经过各种组合方式后存入字典),枚举字典中的密码,尝试通过认证)

                                     对已加密密码的**: Web应用在保存密码时,一般不会直接以明文的方式保存,通过散列函数做处理或加salt的手段对要保存的密码本身加密。
                                                           从加密过的数据中导出明文通常有以下几种方法:1.通过穷举法、字典攻击进行类推
                  2.彩虹表:是由明文密码及与之对用的散列值构成的一张数据库表,是一种事    先通过制作庞大的彩虹表,从彩虹表内搜索散列值就可以推导出对    应的明文密码
        3.拿到**
         4.加密算法的漏洞


       
          2. 点击劫持:利用透明的按钮或链接做成陷阱,覆盖在Web页面之上。然后诱使用户在不知情的情况下点击那个链接访问内容的一种攻击手段。这种行为又称为界面伪                                     装。已设置陷阱的Web页面,表面上内容并无不妥,但早已买入想让用户点击的链接。当用户点击到透明的按钮式,实际上是点击了指定的透明元素的i-                                       frame页面。

          3.DoS攻击:是一种让运行中的服务呈停止状态的攻击。有时也叫做服务停止攻击或拒绝服务攻击。DoS攻击的对象不仅限于Web网站,还包括网络设备及服务器
         1.集中利用访问请求造成资源过载,资源耗尽的同时,实际上服务就呈现停止状态
                   2.通过攻击安全漏洞是服务停止
          4.后门程序:开发设置的隐藏入口,可不按正常步骤使用受限功能。利用后门程序就能够使用原本受限制的功能。
                               1.开发阶段作为Debug调用的后门程序 2.开发者为了自身利益植入的后门程序 3.攻击者通过某种方法设置的后门程序