图解HTTP

一、了解Web及网络基础

A.使用HTTP协议访问Web

1.根据Web浏览器地址栏中指定的URL,Web浏览器从Web服务器获取文件资源(resource)等信息,从而显示出Web页面

2.Web是建立在HTTP协议上通信的

B.HTTP的诞生

1.为知识共享而规划Web

  • 把SGML(Standard Generalized Markup Language,标准通用标记语言)作为页面的文本标记语言的HTML(HyperText Markup Language,超文本标记语言)作为页面的文本标记语言
  • 作为文档传递协议的HTTP
  • 指定文档所在地址的URL(Uniform Resource Locator,统一资源定位符)

C.网络基础TCP/IP

1.TCP/IP协议族:指TCP和IP这两种协议,把互联网相关的协议集合起来

2.TCP/IP的分层管理

  • 应用层:决定了向用户提供应用服务时通信的活动(FTP、DNS、HTTP)
  • 传输层:提供处理网络连接中的两台计算机之间的数据传输(TCP、UDP)
  • 网络层:处理在网络上流动的数据包,规定了通过怎样的路径到达对方计算机,作用就是在众多的选项中选择一条传输路线
  • 链路层:处理连接网络的硬件部分,包括控制系统、硬件的设备驱动、NIC网络适配器及光纤等物理可见部分

3.TCP/IP通信传输流:客户端->HTTP(应用层)->TCP(传输层)->IP(网络层)->网络(链路层)->网络(链路层)->IP(网络层)->TCP(传输层)->HTTP(应用层)->服务器

D.与HTTP关系密切的协议:IP、TCP和DNS

1.负责传输的IP协议(Internet Protocol,网际协议)

  • 几乎所有使用网络的系统都会用到IP协议
  • 作用是把各种数据包传送给对方,重要条件是IP地址和MAC地址(Media Access Control Address)
  • IP地址指明 了节点被分配到的地址,MAC地址是指网上所属的固定地址
  • ARP协议(Address Resolution Protocol)是一种用以解析地址的协议,根据通信方的IP地址就可以反查出对应的MAC地址
  • 在到达通信目标前的中转过程中,那些计算机和路由器等网络设备只能获悉很粗略的传输路线,这种机制称为路由选择(routing),无法全面掌握互联网中的细节

2.确保可靠性的TCP协议

  • 提供字节流服务(Byte Stream Service),指为了方便传输,将大块数据分割成以报文段(segment)为单位的数据包进行管理
  • 可靠的传输服务是指,能够把数据准确可靠地传给对方,采用三次握手(three-way hadshaking)策略
  • 三次握手:发送端首先发送一个带SYN(synchronize)标志的数据包给对方。接收端收到后,回传一个带有SYN/ACK(acknowledgement)标志的数据包以示传达确认信息。最后,发送端再回传一个带ACK标志的数据包,代表“握手”结束

E.负责域名解析的DNS服务

1.DNS(Domain Name System)提供域名到IP地址之间的解析服务,通过域名查找IP地址,或逆向从IP地址反查域名的服务

F.各种协议与HTTP协议的关系

G.URI和URL

1.URI(Uniform Resource Identifier)

  • Uniform:规定统一的格式可方便处理不同类型的资源
  • Resource:资源是“可标识的任何东西”,除了文档文件、图像或服务等能够区别于其他类型的,全都可作为资源,另外资源不仅可以是单一的,也可以是多数的集合体
  • Identifier:表示可标识的对象,也称为标识符
  • 协议方案可以是http、ftp、telnet、file等30余种
  • URL是URI的子集

2.URI格式

http://user:pass@www.example.com:80/dir/index.html?uid=1#ch1

协议方案名://登录信息(可选)@服务器地址:商品号/带层次的文件路径?查询字符串#片段标识符

3.RFC(用来制定HTTP协议技术标准的文档,Request for Comments,征求修正意见书),并不是所有的应用程序都符合

二、简单的HTTP协议

A.HTTP协议用于客户端和服务器端之间的通信

1.应用HTTP协议通信时,必定有一端是客户端,一端是服务器端

B.通过请求和响应的交换达成通信

1.HTTP协议规定,请求从客户端发出,最后服务器端响应该请求并返回,肯定是从客户端开始建立通信,服务器端在没有接收到请求之前不会发送响应

2.请求报文是由请求方法、请求URI、协议版本、可选的请求首部字段和内容实体构成的

3.响应报文基本上由协议版本、状态码、用以解释状态码的原因短语、可选的响应首部字段以及实体主体构成

C.HTTP是不保存状态的协议

1.自身不对请求和响应之间的通信状态进行保存,对于发送过的请求或响应都不做持久化处理

2.目的是为了更快地处理大量事务,确保协议的可伸缩性

D.请求URI定位资源

1.当客户端请求访问资源而发送请求时,URI需要将作为请求报文中的请求URI包含在内

2.如果不是访问特定资源而是对服务器本身发起请求,可以用一个*来代替请求URI

E.告知服务器意图的HTTP方法

1.GET:获取资源

2.POST:传输实体主体

3.PUT:传输文件(由于HTTP/1.1的PUT方法不带验证机制,存在安全性问题,因此一般仅用于REST标准)

4.HEAD:获得报文首部,不返回报文主体部分,用于确认URI的有效性及资源更新日期时间等

5.DELETE:删除文件(和PUT一样,用于REST标准)

6.OPTIONS:询问支持的方法(返回Allow:GET,POST,HEAD,OPTIONS这种内容)

7.TRACE:追踪路径(容易引发XST攻击)

8.CONNECT:要求用隧道协议连接代理,要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL和TLS加密后传输,格式:CONNECT 代理服务器名:端口号 HTTP版本

F.使用方法下达命令

1.E中所述的方法,可以指定请求的资源按期望产生某种行为

G.持久连接节省通信量

1.HTTP Persistent Connections,也称为HTTP keep-alive或HTTP connection reuse,只要任意一端没有明确提出断开链接,则保持TCP连接状态

2.减少了TCP连接的重复建立和断开所造成的额外开销,减轻服务器负载和加载时间,HTTP/1.1默认所有连接都是持久连接

3.持久连接使得多数请求以管线化(pipelining)方式发送,不用等待响应亦可直接发送下一个请求,这样就能做到同时并行发送多个请求

H.使用Cookie的状态管理

1.Cookie会根据从服务器端发磅的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie

三、HTTP报文内的HTTP信息

A.HTTP报文

1.用于HTTP协议交互的信息被称为HTTP报文。本身是由多行(用CR+LF作换行符)数据构成的字符串文本。

2.分为报文首部和报文主体两块,由空行来划分。并不一定有报文主体。

B.请求报文及响应报文的结构

1.请求行:包含用于请求的方法,请求URI和HTTP版本

2.状态行:包含表明响应结果的状态码,原因短语和HTTP版本

3.首部字段:包含表示请求和响应的各种条件和属性的各类首部,一般4种首部(通用首部、请求首部、响应首部、实体首部)

4.其他:可能包含HTTP的RFC里未定义的首部(Cookie等)

C.编码提升传输速率

1.报文主体和实体主体的差异

  • 报文(message):是HTTP通信中的基本单位,由8位组字节流(octet sequence,其中octet为8个比特)组成,通过HTTP传输
  • 实体(entity):作为请求或响应的有效载荷数据(补充项)被传输,其内容由实体首部和实体主体组成

2.压缩传输的内容编码:内容编码指明应用在裸体内容上的编码格式,并保持实体信息原样压缩。内容编码后的实体由客户端接收并负责编码。常用的有gzip、compress、deflate、identity

3.分割发送的分块传输编码:分块传输编码会将实体主体分成多个部分(块)。每一块都会用十六进制来标记块的大小,而实体主体的最后一块会使用“0(CR+LF)”来标记

D.发送多种数据的多部分对象集合

1.MIME(Multiprupose Internet Mail Extensions,多用途因特网邮件扩展)机制,允许邮件处理文本、图片、视频等多个不同类型的数据

2.HTTP协议也采纳了多部分对象集合

  • Multipart/form-data:在web表单文件上传时使用
  • Multipart/byteranges:状态码206响应报文包含了多个范围的内容时使用

3.在HTTP报文中使用多部分对象集合时,需要在首部字段里加上Content-type。

E.获取部分内容的范围请求

1.指定范围发送的请求叫做范围请求(Range Request),执行范围请求时会用到首部字段Range来指定资源的byte范围

F.内容协商返回最合适的内容

1.内容协商机制是指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为适合的资源。内容协商会以响应资源的语言、字符集、编码方式等作为判断的基准。(Accept、Accept-Charset、Accept-Encoding、Accept-Language、Content-Language)

3.内容协商技术3种类型

  • 服务器驱动协商(Server-driven Negotiation):由请求的首部字段作为参考,在服务器端自动处理
  • 客户端驱动协商(Agent-driven Negotiation):由客户端进行内容协商的方式
  • 透明协商(Transparent Negotiation):是服务器驱动和客户端驱动的结合体,是由服务器端和客户端各自进行内容协商的一种方法

四、返回结果的HTTP状态码

A.状态码告知从服务器端返回的请求结果

1.状态码是当客户端向服务器端发送请求时,描述返回的请求结果。

  • 1XX,Informational(信息性状态码),接收的请求正在处理
  • 2XX,Success(成功状态码),请求正常处理完毕
  • 3XX,Redirection(重定向状态码),需要进行附加操作以完成请求
  • 4XX,Client Error(客户端错误状态码),服务器无法处理请求
  • 5XX,Server Error(服务器错误状态码),服务器处理请求出错

2.只要遵守状态码类别的定义,改变或者自建状态码都没问题

B.2XX成功

1.200 OK:表示客户端发来的请求在服务器端被正常处理了

2.204 No Content:代表服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分,另外也不允许返回任何实体的主体。

3.206 Partial Content:表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求

C.3XX重定向

1.301 Moved Permanently:永久性重定向。表示请求的资源已经被分配了新的URI,以后应使用资源现在所指的URL。

2.302 Found:临时性重定向,表示请求的资源已被分配了新的URI,希望用户(本次)能使用新的URI

3.303 See Other:表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源

4.304 Not Modified:表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但因发生请求未满足条件的情况后,直接返回304 Not Modified(服务器资源未改变,可直接使用客户端未过期的缓存)

5.301、302、303几乎所有浏览器都会把POST改成GET并删除请求报文内的主体,之后请求会再次发送,301、302是禁止将POST改成GET的,但都会这么做。304其实和重定向没什么关系。

6.307 Temporary Redirect:临时重定向。307会遵照浏览器标准,不会从POST变成GET,但是对于处理响应时的行为,不同浏览器可能出现不同情况

D.4XX客户端错误

1.400 Bad Request:表示请求报文中存在语法错误

2.401 Unauthorized:表示发磅的请求需要有通过HTTP认证的认证信息

3.403 Forbidden:表明对请求资源的访问被服务器拒绝了。未获得文件系统的访问授权,访问权限出现问题等情况可能导致

4.404 Not Found:服务器上无法找到请求的资源,也可以在服务器端拒绝请求且不想说明理由时使用

E.5XX服务器错误

1.500 Internal Server Error:表明服务器端在执行请求时发生了错误

2.503 Service Unavailable:表明服务器暂时处理超负载或正在进行停机维护,目前无法处理请求

五、与HTTP协作的Web服务器

A.用单台虚拟主机实现多个域名

1.在相同的IP地址下,由于虚拟主机(Virtual Host,又称虚拟服务器)可以寄存多个不同主机名和域名的Web网站,因此在发送HTTP请求时,必须在Host首部内完整指定主机名或域名的URL

B.通信数据转发程序:代理、网关、隧道

1.代理:是一种有转发功能的应用程序,扮演了位于服务器和客户端“中间人”的角色,接收由客户端发送的请求并转发给服务器,同时也接收服务器返回的响应并转发给客户端

  • 缓存代理(Caching Proxy):会预先将资源的副本(缓存)保存在代理服务器上
  • 透明代理(Transparent Proxy):转发请求或响应时,不对报文做任何加工的代理

2.网关:是转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,它就像自己拥有资源的源服务器一样对请求进行处理

3.隧道:是在相隔甚远的客户端和服务器两者之间进行中转,并保持双方通信连接的应用程序

C.保存资源的缓存

1.缓存服务器是代理服务器的一种,并归类在缓存代理类型中。优势在于利用缓存可避免多次从源服务器转发资源,客户端可就近从缓存服务器上获取资源,源服务器不必多次处理相同的请求

六、HTTP首部

A.HTTP报文首部

1.HTTP请求报文:由方法、URI、HTTP版本、HTTP首部字段等部分构成

2.HTTP响应报文:由HTTP版本、状态码、HTTP首部字段3部分构成

B.HTTP首部字段

1.HTTP首部字段传递重要信息:提供报文主体大小、所使用的语言、认证信息等内容

2.HTTP首部字段结构:由首部字段名和字段值构成,中间用冒号“:”分隔,字段值可以有多个值

3.4种HTTP首部字段类型

  • 通用首部字段(General Header Fields):请求报文和响应报文都会使用的首部
  • 请求首部字段(Request Header Fields):从客户端发送请求报文时使用的首部,补充了请求的附加内容、客户端信息、响应内容相关优先级等信息
  • 响应首部字段(Response Header Fields):从服务器端返回时使用的首部,补充了响应的附加内容
  • 实体首部字段(Entity Header Fields):针对请求和响应报文的实体部分使用的首部,补充了资源内容更新时间等与实体有关的信息

4.HTTP/1.1首部字段:P80-P82

5.非HTTP/1.1首部字段:Cookie、Set-Cookie和Content-Disposition的使用频率也很高

6.End-to-end首部和Hop-by-hop首部

  • 端到端首部(End-to-end Header):首部会转发给请求/响应对应的最终接收目标,且必须保存在由缓存生成的响应中,必须被转发
  • 逐跳首部(Hop-by-hop Header):首部只对单次转发有效,会因通过缓存或代理 而不再转发,包括Connection、Keep-Alive、Proxy-Authenticate、Proxy-Authorization、Trailer、TE、Transfer-Encoding、Upgrade,其他都属性端到端首部

C.HTTP/1.1通用首部字段

1.Cache-Control:操作缓存的工作机制,多个指令间逗号分隔

  • public:明确表明其他用户也可利用缓存
  • private:响应只以特定用户作为对象
  • no-cache:防止从缓存中返回过期的资源,客户端发送则表示客户端不接收缓存过的响应,服务器端返回则缓存服务器不能对资源进行缓存
  • no-store:暗示请求(和对应的响应)或响应中包含机密信息
  • s-maxage:与max-age的不同是只适用于供多倍用户使用的公共缓存服务器,直接忽略Expires及max-age
  • max-age:判定缓存资源的缓存时间
  • min-fresh:要求缓存服务器返回至少还未指定时间的缓存资源
  • max-stale:指示缓存资源,即使过期也照常接收
  • only-if-cached:表示客户端仅在缓存服务器本地缓存目标资源的情况下才会要求其返回
  • must-revalidate:代理会向源服务器再次验证即将返回的响应缓存目前是否仍然有效,会忽略max-stale
  • proxy-revalidate:要求所有的缓存服务器在接收到客户端带有该指令的请求返回响应之前 ,必须再次验证缓存的有效性
  • no-transform:规定无论是在请求还是响应中,缓存都不能改变实体主体的媒体类型
  • cache-extension token:可以扩展Cache-Control首部字段内的指令

2.Connection:控制不在转发给代理的首部字段、管理持久连接

3.Date:青蛙创建HTTP报文的日期和时间

4.Pragma:仅作为与HTTP/1.0的向后兼容而定义,操作缓存

5.Trailer:事先说明在报文主体后记录了哪些首部字段,可应用在HTTP/1.1分块传输编码时

6.Transfer-Encoding:规定了传输报文主体时采用的编码方式,HTTP/1.1仅对分块传输编码有效

7.Upgrade:用于检测HTTP协议及其他协议是否可使用更高的版本进行通信

8.Via:追踪客户端与服务器之间的请求和响应报文的传输路径,经常会和TRACE方法一起使用

9.Warning:会告知用户一些与缓存相关的问题的警告

D.请求首部字段

1.Accept:通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级

  • 文本文件:text/html,text/plain,text/css……application/xhtml+xml,application/xml……
  • 图片文件:image/jpeg,image/png,image/gif……
  • 视频文件:video/mpeg,video/quicktime……
  • 应用程序使用的二进制文件:application/octet-stream,application/zip……

2.Accept-Charset:通知服务器用户代理支持的字符集及字符集的相对优先顺序

3.Accept-Encoding:告知服务器用户代理支持的内容编码的优先级顺序(gzip、compress、deflate、identity)

4.Accept-Language:告知服务器用户代理 能够处理的自然语言集,以及自然语言集的优先级

5.Authorization:告知服务器,用户代理的认证信息(证书值)

6.Expect:告知服务器期望出现的某种特定行为

7.From:告知服务器使用用户代理的用户的电子邮件地址

8.Host:告知服务器,请求的资源所处的互联网主机名和端口号,在HTTP/1.1规范内是唯一一个必须被包含在请求内的首部字段

9.If-Match:If-xxx类型的条件请求,服务器接收到附带条件的请求后,只有判断指定条件为真时,才会执行请求

10.If-Modified-Since:如果在If-Modified-Since字段指定的日期时间后,资源发生了更新,服务器会接受请求

11.If-None-Match:只有在If-None-Match的字段值与ETag值不一致时,可处理该请求

12.If-Range:告知服务器若指定的If-Range字段值(ETag值或者时间)和请求资源的ETag值或时间相一致时,则作为范围请求处理

13.If-Unmodified-Since:告知服务器,指定的请求资源只有在字段值内指定的日期时间之后,未发生更新的情况下,才能处理请求

14.Max-Forwards:以十进制整数形式指定可经过的服务器最大数目

15.Proxy-Authorization:认证行为发生在客户端与代理之间

16.Range:告知服务器资源的指定范围

17.Referer:告知服务器请求的原始资源的URI

18.TE:告知服务器客户端能够处理响应的传输编码方式及相对优先级

19.User-Agent:将创建请求的浏览器和用户代理名称等信息传达给服务器

E.响应首部字段

1.Accept-Ranges:告知客户端服务器是否能处理范围请求,以指定获取服务器端某个部分的资源(bytes或者none)

2.Age:源服务器在多久前创建了响应

3.ETag:告知客户端实体标识,是一种可将资源以字符串形式做唯一标识的方式

  • 强ETag值:不论实体发生多么细微的变化都会改变其值
  • 弱ETag值:只用于提示资源是否相同,只有资源发生了根本改变,才会改变

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

5.Proxy-Authenticate:把由代理服务器所要求的认证信息发送给客户端

6.Retry-After:告知客户端应该在多久之后再次发送请求

7.Server:告知客户端当前服务器上安装的HTTP服务器应用程序的信息

8.Vary:可能对缓存进行控制,源服务器会向代理服务器传达关于本地缓存使用方法的命令,仅对请求中含有相同Vary指定首部字段的请求返回缓存

9.WWW-Authenticate:告知客户端适用于访问请求URI所指定资源的认证方案和带参数提示的质询

F.实体首部字段

1.Allow:用于通知客户端能够支持Request-URI指定资源的所有HTTP方法

2.Content-Encoding:告知客户端服务器对实体的主体部分先用的内容编码方式

3.Content-Language:告知客户端,实体主体使用的自然语言

4.Content-Length:表明实体主体部分的大小

5.Content-Location:给出与报文主体部分相对应的URI

6.Content-MD5:检查报文主体在传输过程中是否保持完整,以及确认传输到达

7.Content-Range:针对范围请求,告知客户端作为响应返回的实体哪个部分符合范围请求

8.Content-Type:说明了实体主体内对象的媒体类型

9.Expires:将资源失效的日期告知客户端

10.Last-Modified:指明资源最弱修改的时间

G.为Cookie服务的首部字段

1.Set-Cookie

  • expires:指定浏览器可发送Cookie的有效期
  • path:用于限制指定Cookie的发送范围的文件目录
  • domain:指定的域名可做到与结尾匹配一致
  • secure:限制Web页面仅在HTTPS安全连接时,才可以发送Cookie
  • HttpOnly:使js脚本无法获得Cookie

2.Cookie:告知服务器,当客户端想获得HTTP状态管理支持时,就会在请求中包含从服务器接收到的Cookie

H.其他首部字段

1.X-Frame-Options:用于控制网站内容在其他Web网站的Frame标签内的显示问题(DENY或者SAMEORIGIN)

2.X-XSS-Protection:针对跨站脚本攻击(XSS)的一种对策,用于控制浏览器XSS防护机制的开关(0或1)

3.DNT:是Do Not Track的简称,意为拒绝个人信息被收集,是表示拒绝被精准广告追踪的一种方法(0或1)

4.P3P:通过利用P3P(The Platform for Privacy Preferences,在线隐私偏好平台)技术,可以让Web网站上的个人隐私变成一种仅供程序可理解的嘎啊,以达到保护用户隐私的目的

七、确保Web安全的HTTPS

A.HTTP的缺点

1.通信使用明文(不加密),内容可能会被窃听

  • TCP/IP是可能被窃听的网络
  • 加密处理防止被窃听:通信加密(SSL或TLS:HTTPS)、内容的加密

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

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

3.无法证明报文的完整性,所以有可能已遭篡改

  • 接收到的内容可能有误:没有任何办法确认,发出的请求/响应和接收到的请求/响应是前后相同的,这种请求或响应在传输途中遭攻击者拦截并篡改内容的攻击称为中间人攻击(Man-in-the-Middle attack,MITM)
  • 如何防止篡改:使用PGP(Pretty Good Privacy,完美隐私)创建的数字签名及MD5算法生成的散列值检验文件,SSL提供认证和加密处理及摘要功能

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

1.HTTP加上加密处理和认证以及完整性保护后即是HTTPS

2.HTTPS是身披SSL外壳的HTTP

  • 并非是应用层的一种新协议,只是HTTP通信接口部分用SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议代替而已
  • 先和SSL通信,再由SSL和TCP通信,就是身披SSL协议这层外壳的HTTP
  • 运行在应用层的SMTP和Telnet等协议均可配合SSL协议使用

3.相互交换密钥的公开密钥加密技术

  • 加密和解密同用一个密钥的方式称为共享密钥加密(Common key crypto system),也被叫做对称密钥加密,需要保存好密钥,不能泄漏
  • 公开密钥加密使用一对非对称的密钥,一把叫做私有密钥(private key),另一把叫做公开密钥(public key),私钥不让其他人知道,公钥可以随意发布
  • 使用分开密钥加密方式,发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密
  • HTTPS采用共享密钥加密和公开密钥加密两者并用的混合加密机制。

4.证明公开密钥正确性的证书

  • 使用由数字证书机构(CA,Certificate Authority)和其相关机关颁发的公开密钥证书
  • 可证明组织真实性的EV SSL证书(Extended Validation SSL Certificate),防止用户被钓鱼攻击
  • 用以确认客户端的客户端证书,例如网银的证书

5.HTTPS的安全通信机制

  • P161-163图文
  • TSL是以SSL为原型开发的协议,有时统一称为SSL。当前主流版本是SSL3.0和TSL1.0
  • SSL网络负载可能变慢2-100倍,除TCP连接、HTTP请求/响应外还必须进行SSL通信,整体上处理通信量不可避免会增加;SSL必须进行加密处理,服务器端和客户端都要消耗硬件资源

八、确认访问用户身份的认证

A.何为认证

1.核对信息通常包括:密码、动态令牌、数字证书、生物认证、IC卡等

2.HTTP/1.1使用的认证方式:BASIC认证、DIGEST认证、SSL客户端认证、FormBase认证

B.BASIC认证

1.服务器返回401->客户端将用户ID和密码发送给服务器,通过base64编码处理->接收到服务器验证

C.DIGEST认证

1.质询响应方式:一开始一方会先发送认证要求给另一方,接着使用从另一方那接收到的质询码计算生成响应码,最后将响应码返回给对方进行认证的方式

2.服务器返回401,WWW-Authenticate首部字段包含质问响应方式认证所需的临时质询码->客户端返回用户ID密码及质询码->服务器确认

D.SSL客户端认证

1.步骤:服务器发送Certificate Request报文->客户端把证书信息以Client Certificate报文方式发送给服务器->服务器验证证书通过后可领取证书内容客户端的公开密钥,然后开始HTTPS加密通信

2.SSL会使用证书和基于表单认证组合形成一种双因素认证(Two-factor authentication),认证过程中不仅需要密码这一个因素,还需要申请认证者提供其他持有信息,从而作为另一个因素,与其组合使用

E.基于表单认证

1.客户端会向服务器上的Web应用程序发送登录信息(Credential),按登录信息的验证结果认证

九、基于HTTP的功能追加协议

A.基于HTTP的协议

1.一些新协议的规则是基于HTTP的,并在此基础上添加了新的功能

B.消除HTTP瓶颈的SPDY

1.HTTP的瓶颈

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

2.Ajax的解决方法

  • 只更新一部分页面
  • 可能产生大量请求

3.Comet的解决方法

  • 先将响应置于挂起来,当服务器端有内容更新时,再返回该响应
  • 为了维持连接会消耗更多的资源

4.SPDY的设计与功能

  • 以会话层的形式加入,控制对数据的流动,但还是采用HTTP建立通信连接。强制使用SSL。
  • 多路复用流:通过单一的TCP连接,可以无限制处理多个HTTP请求。
  • 赋予请求优先级:可以给请求逐个分配优先级顺序
  • 压缩HTTP首部
  • 推送功能:支持服务器主动向客户端推送数据的功能
  • 服务器提示功能:服务器可以主动提示客户端请求所需的资源

C.使用浏览器进行全双工通信的WebSocket

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

2.建立在HTTP基础上的协议,一旦确立WebSocket通信连接,不论服务器还是客户端,做生意一方都可直接向对方发送报文

3.特点

  • 推送功能
  • 减少通信量:握手·请求->握手·响应,WebSocket API

D.期盼已久的HTTP/2.0

1.SPDY,HTTP Speed + Mobility,Network-Friendly HTTP Upgrade

E.Web服务器管理文件的WebDAV

1.WebDAV(Web-based Distributed Authoring and Versioning,基于万维网的分布式创作和版本控制)是一个可对Web服务器上的内容直接进行文件复制、编辑等操作的分布式文件系统。

十、构建Web内容的技术

十一、Web的攻击技术

A.针对Web的攻击技术

1.HTTP不具备必要的安全功能,HTTP就是一个通用的单纯协议机制

2.在客户端即可篡改请求,通过URL查询字段或表单、HTTP首部、Cookie等途径

3.针对Web应用的攻击模式

  • 以服务器为目标的主动攻击(active attack)指攻击者通过直接访问Web应用,把攻击代码传入的攻击模式
  • 以服务器为目标的被动攻击(passive attack)指利用圈套策略执行攻击代码的攻击模式

B.因输出值转义不完全引发的安全漏洞

1.跨站脚本攻击(Cross-Site Scripting,XSS)指通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或JS的一种攻击

  • XSS攻击是攻击者利用预先设置的陷阱触发的被动攻击
  • 对用户Cookie的窃取攻击

2.SQL注入攻击(SQL Injection)指针对Web应用使用的数据库,通过运行非法的SQL而产生的攻击

3.OS命令注入攻击(OS Command Injection)指通过Web应用执行非法的操作系统命令达到攻击的目的

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

5.邮件首部注入攻击(Mail Header Injection)指Web应用中的邮件发送功能

6.目录遍历攻击(Directory Traversal)指对无意公开的文件目录,通过非法截断其目录路径后,达成访问目的的一种攻击

7.远程文件包含漏洞(Remote File Inclusion)指当部分脚本内容需要从其他文件读入时,攻击者利用指定外部服务器的URL充当依赖文件,当脚本读取后,就可运行任意脚本的一种攻击

8.安全对策:客户端的验证、Web应用端(服务器端)的验证(输入值验证、输出值转义)

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

1.强制浏览(Forced Browsing)指从安置在Web服务器的分开目录下的文件中,浏览那些原本非自愿公开的文件

2.不正确的错误消息处理(Error Handling Vulnerability)指Web应用的错误信息内包含对攻击者有用的信息,包括Web应用抛出的错误消息、数据库等系统抛出的错误消息

3.开放重定向(Open Redirect)是一种对指定的任意URL作重定向跳转的功能

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

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

  • 通过非正规的生成方法推测会话ID
  • 通过窃听或XSS攻击盗取会话ID
  • 通过会话固定攻击(Session Fixation)强行获取会话

2.会话固定攻击会强制用户使用攻击者指定的会话ID

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

E.其他安全漏洞

1.密码破解攻击(Password Cracking)即算出密码,突破认证

2.点击劫持(Clickjacking)指利用透明的按钮或链接做成陷阱,覆盖在Web页面之上

3.Dos攻击(Denial of Service attack)是一种让运行中的服务呈停止状态的攻击

4.后门程序(Backdoor)指开发设置的隐藏入口,可不按正常步骤使用受限功能

原文发布于微信公众号 - 硬核项目经理(fullstackpm)

原文发表时间:2019-06-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券