解读《图解HTTP》

本文详细解读了HTTP协议,从Web及网络基础开始,讲解了HTTP的诞生、发展及其在网络层的位置。接着深入探讨了HTTP协议的工作原理,包括TCP/IP协议族、DNS服务以及TCP和IP协议的作用。文章还介绍了HTTP的请求和响应过程,如HTTP方法、持久连接和管线化,以及状态管理技术Cookie。此外,内容还包括HTTP报文结构、首部字段、状态码、内容协商和Web服务器的协作机制。最后,文章讨论了确保Web安全的HTTPS协议,HTTP的认证方式以及基于HTTP的功能扩展协议,如SPDY、WebSocket和HTTP/2.0,以及Web的攻击技术和安全防护措施。

#解读《图解HTTP》
##一、了解Web及网络基础

使用HTTP协议访问Web

web使用HTTP协议作为规范,完成客户端到服务器等一系列运作流程,因此,Web是建立在HTTP协议上通信的。

HTTP的诞生

HTTP协议诞生于1989年3月。
HTTP/1.0在1996年5月正式作为标准被公布。
HTTP/1.1在1997年1月被公布,用作当今主流的HTTP协议版本。

最初设想的基本理念:借助多文档之间的相互关联形成的超文本,连成可相互参阅的WWW(万维网)。

WWW构建技术:
1:把SGML作为页面文本标记语言的HTML
2:作为文档传递协议的HTTP
3:指定文档所在地的URL

网络基础:TCP/IP协议族

通常使用的网络(包括互联网)是在TCP/IP协议族的基础上运作的,HTTP属于其内部的一个子集。

TCP/IP的分层管理

TCP/IP协议族层次区分:
1:应用层决定了向用户提供应用服务时通信的活动,预存的服务如FTP和DNS等,HTTP协议属于该层。
2:传输层对上层应用层提供处于网络连接中的两台计算机之间的数据传输,包括TCP和UDP协议。
3:网络层用来处理在网络上流动的数据包,数据包是网络传输的最小数据单位,该层规定通过怎样的路径到达对方计算机并把数据包传输给对方(选择最佳路径)。
4:数据链路层用来处理连接网络的硬件部分,包括控制操作系统、硬件的设备驱动、光纤等物理可见部分。

通信传输举例

1:客户端在应用层(HTTP协议)发出一个想看某个Web页面的HTTP请求。
2:在传输层(TCP协议)把从应用层收到的数据(HTTP请求报文)进行分割,并在各个报文上打上标记序号及端口号转发给网络层。
3:在网络层(IP协议)增加作为通信目的地的MAC地址后转发给链路层。
4:接收端的服务器在链路层接收到数据,按序往上层发送,当传输到应用层才算真正接收到由客户端发送来的HTTP请求。

负责域名解析的DNS服务

DNS服务位于应用层,提供域名到IP地址之间的解析服务。

确保可靠性的TCP协议

TCP协议位于传输层,提供可靠的字节流服务(为了方便传输,将大块的数据分割成以报文段为单位的数据包进行管理),采用三次握手策略把数据准确可靠地传送给对方。

负责传输的IP协议

IP网际协议位于网络层,几乎所有使用网络的系统都会用到IP协议,其作用是根据IP地址(指节点被分配到的地址)和MAC地址(指网卡所属的固定地址)把各种数据包传送给对方。

IP地址可与MAC地址配对,IP地址根据网络环境可变,MAC地址不会变。

在网络上,通信双方通常会经过多台计算机和网络设备中转才能连接到对方,在进行中转时会利用下一站中转设备的MAC地址来搜索下一个中转目标,这时会采用ARP协议(用以解析地址的协议,根据通信双方的IP可以反查出对应的MAC地址)。

综合图解:各协议的作用

URI和URL

URI:统一资源标示符,用字符串标识某以互联网资源。

URL:统一资源定位符,标识资源的地址。

可见URL是URI的子集。

图解绝对URI格式

##二、简单的HTTP协议

明确客户端和服务端

就某一条通信线路来讲,HTTP协议能够区分客户端和服务端的角色。

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

请求报文的构成:
1:请求方法
2:请求URI
3:协议版本
4:可选的请求首部字段
5:内容实体

响应报文的构成:
1:协议版本
2:状态码
3:原因短语(解释状态码)
4:可选的响应首部字段
5:实体主体

HTTP是不保存状态的协议

HTTP/1.1协议为了更快的处理大量事物,确保协议的可伸缩性,对于发送过的请求和响应都不做持久化处理。

为了实现保持状态功能,引入了Cookie技术。

告知服务器意图的HTTP方法

GET:获取资源

POST:传输实体的主体,POST主要目的并不是获取资源。

PUT:传输文件,在请求报文主体中包含文件内容,保存在请求URI指定的位置。

HEAD:获取报文首部,只是不返回报文主体部分,用于确认URI的有效性及资源更新的日期。

DELETE:删除文件,按照请求URI删除指定资源。

OPTION:询问支持的方法,查询针对请求URI指定资源支持的方法。

TRACE:追踪路径,用来确认连接过程中发生的一系列操作。

CONNECT:要求用隧道协议连接代理,要求在于代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。

持久链接和管线化

HTTP的初始版本中每一次HTTP通信都要单独建立和断开TCP连接,当页面包含的资源较多时通信量开销较大。

持久连接(HTTP keep-alive)可以解决此问题,只要一端没有明确提出断开,则保持TCP连接状态,减轻了服务器负载,提高了Web页面的显示速度。

在HTTP/1.1中所有的连接都默认为持久连接。

持久连接使多数请求以管线化方式发送成为可能。

以前发送请求需要等待并接受到响应后才能发送下一个请求。

管线化技术支持不用等待响应直接发送下一个请求,即同时并行发送多个请求。

使用Cookie的状态管理

Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端状态。

1:服务器端的响应报文中有set-cookie的首部字段信息,通知客户端保存Cookie。
2:客户端会在请求报文中带上Cookie信息向服务器发送请求。
3:服务端获取客户端携带的Cookie,检查是哪个客户端发来的请求,对比服务器上的记录,得到之前的状态信息。

##三、HTTP报文内的HTTP信息

HTTP报文

用于HTTP协议交互的信息被称为HTTP报文(请求报文、响应报文)。

报文是由多行数据构成的字符串文本。

报文结构:
1:报文首部
2:报文主体(可选)

报文首部结构:
1:请求行,包括请求方法,请求URI,HTTP版本。
2:状态行,包括状态码,原因短语,HTTP版本。
3:首部字段,包括表示请求和响应的各种条件和属性的各类首部(通用、请求、响应、实体)。
4:其他:其他首部或Cookie等

请求报文:


响应报文:

编码提升传输速率

HTTP在传输数据时可按照数据原貌直接传输,也可以通过编码(可有效的处理大量请求,但会消耗更多CPU资源)传输提升速率。

报文:是HTTP通信中基本单位,通过HTTP通信传输。

实体:作为请求或响应的有效载荷数据被传输,由实体首部和实体主体构成。

HTTP报文的主体用于传输请求或响应的实体主体。

通常报文主体即为实体主体,当进行编码传输时,实体主体发生变化。

编码类型:
1:压缩传输的内容编码(压缩,传输,解压)
2:分割发送的分块传输编码(分割,传输,复原)

获取部分内容的范围请求

范围请求:用户可以指定下载的实体范围。

通过首部字段Rang来指定资源的byte范围。

针对范围请求,响应状态码为206,若无法响应范围请求,则状态码为200,返回完整实体内容。

内容协商返回合适的响应

内容协商机制:客户端和服务端就响应的资源内容进行交涉,最终提供给客户端最为合适的资源。

内容协商会以响应资源的语言,字符集,编码吗方式等作为判断的基准。

包含在请求报文的某些首部字段即为判断基准,如Accept、Accept-Charset、Accept-Encoding等。

##四、HTTP首部

HTTP协议的请求和响应中一定包含HTTP首部,首部内容为客户端和服务器分别处理请求和响应提供所需信息。

HTTP报文首部


在这里插入图片描述

5种HTTP首部字段类型:

1:通用首部字段

2:请求首部字段

3:响应首部字段

4:实体首部字段

5:为Cookie服务的首部字段

##五、返回结果的HTTP状态码

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

当客户端向服务端发送请求后,状态码可以表明请求的处理是否发生了异常。

状态码的类别:

常用状态码:
1:200OK、从客户端发来的请求在服务端被正常处理了。
2:204Not Content、服务端接收的请求已经成功处理,但是在响应的报文中不含有实体的主体部分(在客户端不需要更新时使用)。
3:206Partial Content、客户端进行了范围请求,服务端执行了这部分的GET请求。
4:301Moved Permanently、永久性重定向,请求的资源已经被分配了新的URI,应更新当前URI。
5:302Found、临时重定向,URI以后也许会再次重定向。
6:303See Other、请求资源存在着另一个URI,应使用GET方法定向获取请求的资源。
7:304Not Modified、客户端发送附带条件的请求,服务端允许访问资源,但未满足条件,响应不含有主体部分。
8:307Temporary Redirect、临时重定向。
9:400Bad Request、请求报文中存在语法错误。
10:401Unauthorized、请求需要有通过HTTP认证的认证信息,如果之前有发送过,表明认证失败。
11:403Forbidden、被访问的资源被服务端拒绝。
12:404Not Found、服务端无法找到请求的资源。
13:500Internal Server Error、服务端在执行请求时发生了错误。
14:503Server Unavailable、服务端暂时处理超负载或进行停机维护,当前无法处理请求。

##六、与HTTP协作的Web服务器

一台Web服务器可搭建多个独立域名的Web网站,也可作为通信路径上的中转服务器提升传输效率。

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

虚拟主机可以在同一个IP地址的服务端寄存多个不同主机名和域名的Web网站,客户端在发送HTTP请求时要在HOST首部内完整指定主机名或域名的URI。

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

代理:是一种有转发功能的应用程序。
代理服务器:接收客户端的请求后转发给其他服务器,可级联多台代理服务器。
缓存代理:代理转发响应时,会预先将资源的副本缓存在代理服务器上。

网关:转发其他服务器通信数据的服务器,能使通信线路上的服务器提供非HTTP协议的服务,从而利用网关提高通信的安全性。

隧道:保持客户端和服务器之间通讯的应用程序,确保通信线路的安全。

保存资源的缓存

缓存:指代理服务器或客户端本地磁盘内保存的资源副本,利用缓存可以减少对资源服务器的请求,节省了通信流量和通信时间。

缓存还可以保存在客户端浏览器中,如果浏览器缓存有效,则不必再向服务器请求资源,从本地磁盘内直接读取。

缓存服务器是代理服务器的一种,即使有缓存,也会因客户端的要求、缓存的有效期等因素向资源服务器确认资源的有效性,判断缓存是否失效,从而获取新资源。

##七、确保Web安全的HTTPS

HTTP的不足

1:通信使用明文(不加密),内容可能会被窃听。
2:不验证通信方的身份,因此有可能遭遇伪装。
3:无法证明报文的完整性,所以有可能已经被篡改。

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

HTTPS并非新协议,而是HTTP通信接口部分使用SSL或TLS协议代替而已。

SSL是独立于HTTP的协议,其他在应用层的协议均可以配合SSL使用。

密钥加密方式

1:共享(对称)密钥加密:加密和解密同用一套密钥,并要将密钥发送给对方,主要问题是如何安全地将密钥传给对方。
2:公开密钥加密:使用公开密钥加密,使用私有密钥解密,公开密钥可公开(根据密文和公开密钥解密是很困难的),此方式处理速度慢。
3:混合加密(HTTPS使用的加密方式):结合前面两种方式的优势,在交换密钥环节使用公开密钥方式,在建立通信交换报文阶段使用共享密钥方式。

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

使用由数字证书认证机构和其他相关机关颁发的公开密钥证书来证明公开密钥的真实性。

流程:
1:服务器运营人员向数字证书认证机构提出公开密钥的申请。
2:数字证书认证机构在判明申请者身份后,对已申请的公开密钥进行数字签名,将公开密钥放入公钥证书后绑定在一起并分配给服务器。
3:服务器将公钥证书发送给客户端。
4:客户端可用公开密钥对公钥证书上的数字签名进行验证,验证成功即可说明服务器的公开密钥可信。

事实上:为保证认证机关的公开密钥安全的发送给客户端,很多浏览器开发商发布版本时会在内部植入常用认证机关的公开密钥。

SSL协议及HTTPS的弊端

HTTPS使用SSL和TLS两个协议,TLS是以SSL为原型开发的协议,有时统称为SSL,当前主流版本为SSL3.0和TLS1.0。

由于HTTPS需要做服务器、客户端双方的加密解密处理,会消耗更多CPU及内存等硬件资源,以及消耗更多的网络资源,因此比HTTP要慢2~100倍。

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

确认用户身份的信息通常有:
1:密码、只有本人知道的信息
2:动态令牌、本人持有设备内显示的一次性密码
3:数字证书、本人终端持有的信息
4:生物认证、本人的生理信息
5:IC卡等、本人持有的信息

HTTP/1.1使用的认证方式:
1:BASIC认证、使用非加密处理,一般浏览器无法实现认证注销操作,使用上不够灵活,安全等级低,一般不常用。

2:DIGEST认证、客户端发送给服务器的只是由质询码产生的计算结果,密码泄漏可能性降低。

3:SSL客户端认证、通过HTTPS的客户端证书认证来确认访问是否为真实客户端。
4:FormBase认证、此认证方法并不是HTTP协议定义的,客户端向服务器上Web应用程序发送登录信息,按照登录信息的验证结果认证。

服务器保存用户提交的密码等信息方法:
通常,一种安全的保存方法是服务器随机生成一定长度的字符串,将其与密码拼接生成散列值。

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

消除HTTP瓶颈的SPDY

SPDY的目标旨在解决HTTP的性能瓶颈,缩短Web页面的加载时间(50%)。

HTTP瓶颈:
若服务器端在短时间内发生大量的内容更新,为了尽可能实时展示更新内容,客户端就必须频繁的向服务器进行确认,如果服务器此时没有内容更新,则会产生徒劳的通信。

Ajax解决方法:
Ajax是Javascript的XMLHttpRequest对象的API,通过它就能和服务器进行HTTP异步通信,从而更新局部Web页面的操作。
但是利用Ajax仍要频繁的向服务器发起请求,未解决HTTP协议本身的问题。

Comet解决方法:
Comet是一种通过延迟应答,模拟实现服务器向客户端推送的功能。
当客户端发来请求时,Comet会先将响应挂起,当服务器内容更新时再反馈给客户端,内容上虽然实现了实时更新,但一次连接的持续时间会变长,期间为了维持连接会消耗更多的资源,并未解决HTTP协议本身的问题。

SPDY的目标:
SPDY在应用层和传输层之间新建会话层,控制对数据的流动,仍采用HTTP建立通信连接,并使用SSL。

使用SPDY后,HTTP协议获得新功能:
1:多路复用流、所有请求的处理都在一条TCP连接上完成。
2:赋予请求优先级、SPDY可无限制地并发处理请求,并给请求分配优先级,解决了在发送多个请求时,解决因带宽低导致响应变慢的问题。
3:压缩HTTP首部、压缩请求和响应的首部,通信量减少。
4:推送功能、支持服务器主动向客户端推送数据的功能。
5:服务器提示功能、服务器可主动提示客户端请求所需的资源。

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

WebSocket是建立在HTTP基础上的协议,即Web浏览器和Web服务器之间全双工通信标准,一旦确立WebSocket通信连接,客户端和服务器可直接向对方发送报文。

WebSocket主要特点:
1:推送功能、支持由服务器向客户端推送数据功能。
2:减少通信量、只要建立起WebSocketl连接就会一直保持连接状态,而且WebSocket首部信息量很小。

为实现WebSocket通信,在HTTP连接建立之后需要完成一次握手步骤,成功握手确立WebSocket连接之后通信时不再使用HTTP的数据帧。

HTTP/2.0

HTTP/2.0的目标是改善用户在使用Web时的速度体验。

##十、Web的攻击技术
在客户端篡改请求:
在HTTP报文内加载攻击代码,内部信息会遭到窃取或被拿到管理权限。

针对Web应用的攻击模式:
1:以服务器为目标的主动攻击、直接针对服务器资源进行攻击,如SQL注入攻击、OS命令注入攻击。
2:以服务器为目标的被动攻击、攻击者诱使y用户触发已设置好的陷阱启动发送已嵌入攻击代码的HTTP请求到目标服务器。

因输出值转义不完全引发的安全漏洞:
从数据库或文件系统、HTML、邮件等输出服务器处理的数据,针对数据转义是很重要的安全策略。

跨站脚本攻击:
XSS指通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或JS进行的一种攻击。
可能造的影响有:
1:利用虚假输入表单骗取用户个人信息
2:利用脚本窃取用户的Cookie值
3:显示伪造的文章或图片

对用户Cookie的窃取攻击:
以跨站脚本的攻击方式窃取到用户的Cookie信息,并发送至攻击者的Web网站。

SQL注入攻击:
针对数据库通过运行非法的SQL而产生的攻击。
SQL是操作关系型数据库管理系统的数据库语言。

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

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

邮件首部注入攻击:
利用Web应用的邮件发送功能向邮件首部添加非法内容发起攻击。

目录遍历攻击:
通过对服务器上本无意公开的文件目录通过篡改相对路径或绝对路径达成访问目的一种攻击。

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

强制浏览安全漏洞:
从安置在Web服务器的公开目录下浏览原本非自愿公开的文件,如根据URL推测访问其他文件。

不正确的错误消息处理:
攻击者利用Web应用提示的错误消息获取关键信息。

开放重定向漏洞:
开发重定向是对任意URL做重定向跳转的功能,攻击者可指定重定向到恶意Web网站。

绘画劫持漏洞:
攻击者通过某种手段拿到用户的会话ID伪装成用户达成攻击目的,如获取Cookie内的认证信息。

跨站点请求伪造漏洞:
攻击者通过设置好的陷阱对已完成认证的用户进行非预期的个人信息更新操作。

密码破解安全漏洞:
通过网络的加密试错(穷举法、字典攻击)、破解已加密的密码破解(穷举法·字典攻击类推、彩虹表、拿到密钥、加密算法的漏洞)。

点击劫持漏洞:
利用透明的按钮或链接做陷阱覆盖在Web页面上,用户不知情情况下点击链接访问非法内容。

DoS攻击:
让运行中的服务呈停止状态的攻击,通过集中利用访问请求造成资源过载服务停止或通过攻击安全漏洞使服务停止。

后门程序漏洞:
通过开发设置的隐藏入口可不按正常步骤使用受限功能(开发阶段调试的后门程序、开发者为自身利益植入的后门程序、攻击者设置的后门程序)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值