HTTP这个鬼 | 《图解HTTP》
《图解HTTP》
一 Web及网络基础
(一)什么是协议
计算机与网络设备要相互通信,双方就必须基于相同的方法。比如如何探测到通信目标、由哪一边先发起通信、使用哪种语言进行通信、怎样结束通信等都需要事先确定。不同的硬件、操作系系统之间的通信,所有的这―切都需要一种规则。这一规则称为协议。
(二)TCP/IP协议的各层
1 协议四层
1 )应用层
应用层决定了向用户提供应用服务时通信的活动。 比如,FTP(File Transfer Protocol,文件传输协议)和 DNS ( Domain Name System,域名系统)
HTTP协议也处于该层。
2 )传输层
传输层提供处于网络连接中的两台计算机之间的数据传输。在传输层有两个性质不同的协议:TCP(Transmission Control Proctocal,传输控制协议)和UDP(User Data Protocol, 用户数据报协议)。
3 )网络层(又名网络互连层)
网络层用来处理在网络上流的的数据包。数据包是网络传输的最小数据单位。该层规定了通过怎样的路径(所谓的传输路线)到达对方计算机,并把数据包传送给对方。...与对方计算机之间通过多台计算机或网络设备进行传输时,网络层所起的作用就是在众多的选项内选择一条传输路线。
IP协议
IP协议的作用是把各种数据包传送给对方。这需要满足很多条件。其中两个重要的条件是IP地址和MAC地址(Media Access Control Address)
IP地址指明了节点被分配到的地址,MAC地址是指网卡所属的固定地址。IP地址可以和MAC地址进行配对。IP可变换,但MAC地址基本上不会更改。
IP间的通信依赖MAC地址。在网络上,通常是经过多台计算机和网络设备中转才能连接对方。而在进行中转时,会利用下一站中转设备的MAC地址来搜索下一个中转目标。这时,会采用ARP协议(Address Resolution Protocol )。ARP协议是一种用以解析地址的协议,根据通信方的IP地址就可以反查出对应的MAC地址。
4) 链路层(又名数据链路层,网络接口层)
用来处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱动、NIC(Network Interface Card, 网络适配器,即网卡)及光纤等物理可见部分。硬件上的范畴均在链路层的作用范围之内。
2 封装
发送端在层与层之间传输数据时,每经过一层时必定会被打上一个该层所属的首部信息。反之,接收端在层与层传输数据时,每经过一层会把对应的首部消去。这种把数据信息包装起来的做法称为封装(encapsulate)
3 三次握手策略
为了准确无误地将数据送达目标处,TCP协议采用了三次握手策略。…握手过程中使用了TCP的标志(flag)--SYN(synchronize)和ACK(acknowledgement)。...发送端首先发送一个带SYN标志的数据包给对方。接收端收到后,回传一个带有SYN/ACK标志的数据包以示传达确认信息。最后发送端再回传一个带ACK标志的数据包,代表“握手”结束。
二 HTTP报文里的一些概念
范围请求(Range Request)
指定范围发出的请求(例如断点续传是一种应用)
内容协商(Content Negotiation)
客户端和服务端就响应的资源内容进行交涉,然后提供给客户最合适的资源。
例如根据浏览器默认语言显示中英文版。根据OS类型切换手机版或PC版。
三 与HTTP协作的Web服务器
(一)通信数据转发程序:代理、网关、隧道
1 代理
代理可按是否使用缓存和是否修改报文分类
1)缓存代理(Caching Proxy)
转发响应时,会预先将资源的副本(缓存)保存在代理服务器上。当代理再次接受到相同请求时,可以不从原服务器获取资源,直接从缓存返回。
2)透明代理(Transparent Proxy)/非透明代理
转发或响应请求时不对报文加工的叫透明代理,反之为非透明代理。
2 网关
网关是转发其他服务器通信数据的服务器,接收从客户端发来的请求时,他就像自己拥有资源的源服务器一样对请求进行处理。
网关和代理的区别是网关能使通信线路上的服务器提供非HTTP协议服务。利用网关能提高通信的安全性,因为可以在客户端和网关线路上加密以确保链接的安全。
3 隧道
隧道是在相隔甚远的客户端和服务器两者之间中转,并保存双方通信连接的应用程序。可使用SSL等手段加密。隧道本身不解析HTTP请求。
(二)缓存
缓存指代理服务器或客户端本地磁盘保存的资源副本。利用缓存可以减少对源服务器的访问,也节省了通信流量和通信时间。
四 HTTP的安全隐患
(一)通信使用明文(不加密),内容可能被窃听
1)通信使用明文
即使通信经过加密,只是有可能让人无法破解报文信息的含义,但加密处理后的加密信息本身还是会被看到。
2)如何窃听?
收集在互联网上流动的数据包(帧)就可以了。对于收集来的数据包的解析工作,可以交给抓包(Packet Capture)或嗅探器(Sniffer)工具。Wireshark是一种广泛使用的抓包工具。
3)解决方案:
HTTPS
加密处理防止窃听。可通过SSL(Secure Socket Layer,安全套接层)或TLS(Transport Layer Security,安全传输协议)的组合使用,加密通信。与SSL组合使用的HTTP叫HTTPS。
HTTPS是HTTP通信接口部分用SSL和TSL协议代替而已。通常,HTTP直接和TCP通信。当使用SSL时,则变为先和SSL通信,再由SSL和TCP通信。
使用SSL时,速度会变慢
1是通信慢。因为需增加SSL通信,增加通信量。和HTTP相比,网络负载可能会变慢2到100倍。2是大量消耗CPU及内存资源,导致处理速度变慢。因为SSL使用时,在服务器和客户端都要进行加密和解密的运算处理,比起HTTP会更多消耗服务器和客户端硬件资源。
(二)不验证通信方的身份,可能遭遇伪装
1 HTTP弱的地方在于:
请求有可能去到已伪装的服务器、已伪装的客户端;无法确定对方是否有访问权限;无意义的请求也照单全收,无法阻止海量请求下的DoS攻击(Denial of Service, 拒绝服务攻击)
2 解决方案:密钥、证书
1)证书
证书由值得信任的第三方机构颁发,只要能确认通信方持有的证书,就可判断对方真实意图。
EV SSL证书(Extended Validation SSL Certificate)
该证书既可证明服务器是否规范,还可确认服务器运营企业是否真实存在。
客户端证书
客户端证书需要购买,按装机量收取。
2)密钥
-共享密钥
加密和解密用同一个密钥,也称为对成性密钥。
-公开密钥加密
发送密文的一方使用对方的公开密钥(Public Key)进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥(private key)解密。
数字认证机构的业务流程
服务器的运营人员向数字认证机构提出公开密钥的申请。数字认证机构在判明申请者的身份后,会对已申请的公开密钥做数字签名,然后分配这个已签名的密钥,并把该公开密钥放入公钥证书后绑定在一起。...多数浏览器开发商发布版本时,会事先在内部植入常用认证机构的公开密钥。
(三)无法证明报文的完整性,可能已遭篡改
请求或响应在传输图中遭遇攻击者拦截篡改,叫中间人攻击(Man-in-the-Middle Attack)
五 HTTP的性能瓶颈
HTTP最初是传输HTML文档的协议,随着Web用途的多样,HTTP性能出现瓶颈。
(一)HTTP的性能瓶颈
一条连接上只可发送一个请求;请求只能从客户端开始。客户端不可接受除响应以外的指令;请求/响应首部未经压缩就发送。首部信息越多延迟越大;每次都需要发送首部。首部冗长而相同,每次发送造成l浪费;有时不压缩数据直接发送;
(二)解决方法
HTTP的追加协议
1 Ajax
Ajax(Asynchronous JavaScript and XML,异步JavaScript与XML技术)是一种有效利用JavaScript和DOM(Document Object Model 文档对象模型)的操作,以达到局部WEB页面替换加载的异步通信手段。
Ajax的核心技术是名为XMLHTTPRequest的API,通过JavaScript脚本语言的调用就能和服务器进行HTTP通信。能从已加载完毕的Web页面发起请求,只更新局部页面。而利用Ajax实时从服务器获取内容,可能导致大量请求产生。
2 SPDY协议
这个协议试图从协议级别消除HTTP性能瓶颈。它没有完全改写HTTP协议,而是在应用层与运输层间增加会话层实现。
它压缩HTTP首部,支持服务器主动向客户端推送数据,服务器可以主动提示客户端请求所需的资源。
但是由于SPDY基本上只是将单个域名(IP地址)的通信多路复用,所以当一个Web网站上使用多个域名下的资源,改善效果就会受到限制。
3 WebSocket协议
推送功能:支持服务器向客户端推送数据的推送功能
减少通信量:只要建立起WebSocket连接,就希望一直保持通信状态。和HTTP相比,不但每次连接时总开销减少,而且由于WebSocket的首部信息很少,通信量也相应减少了。
为何HTTP协议受众如此广泛?
企业和组织会设定防火墙。防火墙禁止非指定的协议和端口号的数据包通过。如果使用新协议必须修改防火墙的设置。
六 构建Web内容的技术
(一)HTML
超文本是一种文档系统,可将文档中任意位置的信息与其他信息(文本或图片等)建立关联,即超链接文本。标记语言是指通过在文档的某部分穿插特别的字符串标签,用来修饰文档的语言。
HTML5标准不仅解决了浏览器间的兼容性问题,并且可把文本作为数据对待,更容易复用,动画效果也更生动。
(二)动态HTML
JavaScript
(三) WEB应用相关
1)与WEB服务器及程序协作的CGI
Common Gateway Interface,通用网关接口。是指服务器在接收到客户端发送过来的请求后转发给程序的一组机制。使用CGI的程序叫CGI程序。
2)因Java而普及的Servlet
Servlet是一种能在服务器上创建动态内容的程序。Servlet是用Java语言实现的一个接口。
CGI每次接到请求,程序都要跟着启动一次,服务器负载很大。而Servlet直接在服务器上运行,负载小。
(四)数据发布的格式及语言
XML
从文档中读取数据比HTML简单。RSS和Atom都用到了XML
JSON(JavaScript Object Notation)
是一种以JavaScript的对象表示法为基础的轻量级数据标记语言。它让数据更轻更纯粹。