图解HTTP
真的是小白级别的入门级基础HTTP知识书籍,而且估计是因为本书的出版时间(2013年1月)时间太早的限制,对于HTTP2.0的介绍少之又少,一笔带过。Anyway,读书笔记还是要的,重要知识点总结如下。
第一章 了解 Web 及网络基础
HTTP,严谨的译名应该为“超文本转移协议”;
3 项 WWW 构建技术,分别是:把 SGML(Standard Generalized Markup Language,标准
通用标记语言)作为页面的文本标记语言的 HTML(HyperText Markup Language,超文本标记语言);作
为文档传递协议的 HTTP ;指定文档所在地址的 URL(Uniform Resource Locator,统一资源定位符)。
TCP/IP 协议族按层次分别分为以下 4 层:应用层、传输层、网络层和数据链路层。分层的好处:灵活,简单。
利用 TCP/IP 协议族进行网络通信时,会通过分层顺序与对方进行通信。发送端从应用层往下走,接收端则往应用层往上走。
第二章 简单的 HTTP 协议
请求报文是由请求方法、请求 URI、协议版本、可选的请求首部字段和内容实体构成的。
响应报文基本上由协议版本、状态码、用以解释状态码的原因短语、可选的响应首部字段以及实体主体构成。
无状态协议;
请求方法:
PUT 方法用来传输文件,鉴于 HTTP/1.1 的 PUT 方法自身不带验证机制,任何人都可以上传文件 , 存在安全性问题。配合 Web 应用程序的验证机制,或遵守 REST 标准时还是有可能会开放使用的。
HEAD 和 GET 一样,不返回报文主体部分,用于确认 URI 的有效性及资源更新的日期时间等。
OPTIONS 方法用来查询针对请求 URI 指定的资源支持的方法。
TRACE 方法是让 Web 服务器端将之前的请求通信环回给客户端的方法。发送请求时,在 Max-Forwards 首部字段中填入数值,每经过一个服务器端就将该数字减 1,当数值刚好减到0 时,就停止继续传输,最后接收到请求的服务器端则返回状态码 200 OK 的响应。客户端通过TRACE 方法可以查询发送出去的请求是怎样被加工修改 / 篡改的。请求想要连接到源目标服务器可能会通过代理中转, TRACE 方法就是用来确认连接过程中发生的一系列操作。不常用,容易引发 XST(Cross-Site Tracing,跨站追踪)攻击,通常就更不会用到。
CONNECT 方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行 TCP 通信。使用SSL和TLS协议把通信内容加密后经网络隧道传输。
持久连接,只要任意一端没有明确提出断开连接,则保持 TCP 连接状态。持久连接使得多数请求以管线化(pipelining)方式发送成为可能,做到同时并行发送多个请求。
第三章 HTTP 报文内的 HTTP 信息
一般有 4 种首部,分别是:通用首部、请求首部、响应首部和实体首部。
两个基本概念:
报文(message):是 HTTP 通信中的基本单位,由 8 位组字节流(octet sequence,其中 octet 为 8 个比特)组成,通过HTTP 通信传输。
实体(entity):作为请求或响应的有效载荷数据(补充项)被传输,其内容由实体首部和实体主体组成。
通常,报文主体等于实体主体。只有当传输中进行编码操作时,实体主体的内容发生变化,才导致它和报文主体产生差异。
常用的内容编码:
- gzip(GNU zip)
- compress(UNIX 系统的标准压缩)
- deflate(zlib)
- identity(不进行编码)
分块传输编码(Chunked Transfer Coding):把实体主体分块传输,每一块都会用十六进制来标记块的大小,而实体主体的最后一块会使用“0(CR+LF)”来标记。HTTP/1.1 中存在一种称为传输编码(Transfer Coding)的机制,它可以在通信时按某种编码方式传输,但只定义作用于分块传输编码中。
多部分对象集合包含的对象如下: - multipart/form-data:在 Web 表单文件上传时使用。
- multipart/byteranges:状态码 206(Partial Content,部分内容)响应报文包含多个范围的内容时使用。
- multipart/form-data:
- multipart/byteranges:
在 HTTP 报文中使用多部分对象集合时,需要在首部字段里加上 Content-type。
指定范围发送的请求叫做范围请求(Range Request),针对范围请求,响应会返回状态码为 206 Partial Content 的响应报文。另外,对于多重范围的范围请求,响应会在首部字段 Content-Type 标明 multipart/byteranges 后返回响应报文。如果服务器端无法响应范围请求,则会返回状态码 200 OK 和完整的实体内容。
内容协商(Content Negotiation):指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为适合的资源。内容协商会以响应资源的语言、字符集、编码方式等作为判断的基准。 - Accept
- Accept-Charset
- Accept-Encoding
- Accept-Language
- Content-Language
内容协商技术有以下 3 种类型。
服务器驱动协商(Server-driven Negotiation)
客户端驱动协商(Agent-driven Negotiation)
透明协商(Transparent Negotiation)
第四章 HTTP 状态码
206 Partial Content,该状态码表示客户端进行范围请求,响应报文中包含由Content-Range 指定范围的实体内容。
301 Moved Permanently,
302 Found
303 See Other
304 Not Modified
307 Temporary Redirect
第五章 与 HTTP 协作的 Web 服务器
用单台虚拟主机实现多个域名:
通信数据转发程序 :代理、网关、隧道
第六章 HTTP 首部
HTTP 请求报文由方法、 URI、 HTTP 版本、 HTTP 首部字段等部分构成。
HTTP 响应报文由 HTTP 版本、状态码(数字和原因短语)、 HTTP 首部字段 3 部分构成。
若 HTTP 首部字段重复会如何?
当 HTTP 报文首部中出现了两个或两个以上具有相同首部字段名时会怎么样?这种情况在规范内尚未明确,根据浏览器内部处理逻辑的不同,结果可能并不一致。有些浏览器会优先处理第一次出现的首部字段,而有些则会优先处理最后出现的首部字段。
HTTP 首部字段根据实际用途被分为以下 4 种类型。
通用首部字段(General Header Fields)
请求首部字段(Request Header Fields)
响应首部字段(Response Header Fields)
实体首部字段(Entity Header Fields)
HTTP 首部字段将定义成缓存代理和非缓存代理的行为,分成 2 种类型
端到端首部(End-to-end Header):转发给请求 / 响应对应的最终接收目标,且必须保存在由缓存生成的响应中,另外规
定它必须被转发
逐跳首部(Hop-by-hop Header):只对单次转发有效,会因通过缓存或代理而不再转发。 HTTP/1.1 和之后版本中,如果要使用 hop-by-hop 首部,需提供 Connection 首部字段。
HTTP/1.1 中的逐跳首部字段。除这 8 个首部字段之外,其他所有字段都属于端到端首部。
Connection
Keep-Alive
Proxy-Authenticate
Proxy-Authorization
Trailer
TE
Transfer-Encoding
Upgrade
第七章 确保 Web 安全的 HTTPS
缺点:
- 通信使用明文(不加密),内容可能会被窃听;窃听:收集数据包/帧,解析工具如抓包Packet Capture或嗅探器Sniffer工具、
- 不验证通信方的身份,因此有可能遭遇伪装;
- 无法证明报文的完整性,有可能已遭篡改。中间人攻击
加密的对象: - 通信的加密(SSL,TLS)
- 内容的加密,针对报文主体
SSL 是独立于 HTTP 的协议,其他运行在应用层的 SMTP 和 Telnet 等协议均可配合 SSL 协议使用。
加密和解密同用一个**的方式称为共享**加密(Common key crypto system),也被叫做对称**加密。
公开**加密方式很好地解决了共享**加密的困难,使用一对非对称的**,公钥和私钥。
HTTPS 采用共享**加密和公开**加密两者并用的混合加密机制。真正的公开**有可能已经被攻击者替换掉,此时数字证书认证机构(CA, Certificate Authority)上场。
第八章 确认访问用户身份的认证
HTTP/1.1 使用的认证方式:
- BASIC 认证(基本认证)
- DIGEST 认证(摘要认证)
- SSL 客户端认证
- FormBase 认证(基于表单认证),不是在 HTTP 协议中定义的,使用 Cookie 本文档由来管理Session(会话)。
为减轻跨站脚本攻击(XSS)造成的损失,建议事先在 Cookie 内加上 httponly 属性。
此外,还有 Windows 统一认证(Keberos 认证、 NTLM 认证)
第九章 基于 HTTP 的功能追加协议
HTTP的捉襟见肘。Google 在 2010 年发布 SPDY(取自 SPeeDY,发音同 speedy),其开发目标旨在解决 HTTP 的性能瓶颈,缩短 Web 页面的加载时间(50%)。
Ajax(Asynchronous JavaScript and XML,)是一种有效利用JS和DOM(Document Object Model)的操作,以达到局部 Web 页面替换加载的异步通信手段。和以前的同步通信相比,由于它只更新一部分页面,响应中传输的数据量会因此而减少,这一优点显而易见。Ajax 的核心技术是名为 XMLHttpRequest 的 API,通过JS脚本语言的调用就能和服务器进行 HTTP通信。借由这种手段,就能从已加载完毕的 Web 页面上发起请求,只更新局部页面。而利用 Ajax 实时地从服务器获取内容,有可能会导致大量请求产生。另外, Ajax 仍未解决 HTTP 协议本身存在的问题。
Comet 的解决方法
一旦服务器端有内容更新, Comet 不会让请求等待,而是直接给客户端返回响应。这是一种通过延迟应
答,模拟实现服务器端向客户端推送(Server Push)的功能。通常,服务器端接收到请求,在处理完毕后就会立即返回响应,但为了实现推送功能, Comet 会先将响应置于挂起状态,当服务器端有内容更新时,再返回该响应。因此,服务器端一旦有更新,就可以立即反馈给客户端。内容上虽然可以做到实时更新,但为了保留响应,一次连接的持续时间也变长。期间,为了维持连接会消耗更多的资源。另外, Comet 也仍未解决 HTTP 协议本身存在的问题。
SPDY 没有完全改写 HTTP 协议,而是在 TCP/IP 的应用层与运输层之间通过新加会话层的形式运作。同时,考虑到安全性问题, SPDY 规定通信中使用 SSL。SPDY 以会话层的形式加入,控制对数据的流动,但还是采用 HTTP 建立通信连接。因此,可照常使用HTTP 的 GET 和 POST 等方 法、 Cookie 以及 HTTP 报文等。
WebSocket 协议的主要特点:
- 推送功能
- 减少通信量
为了实现 WebSocket 通信,需要用到 HTTP 的 Upgrade 首部字段,告知服务器通信协议发生改变,以达到握手的目的。Sec-WebSocket-Key 字段内记录着握手过程中必不可少的键值。 Sec-WebSocket-Protocol 字段内记录使用的子协议。
HTTP 2.0 与 WebDAV。
第十章 构建 Web 内容的技术
HTML5 标准解决浏览器之间的兼容性问题,并且可把文本作为数据对待,更容易复用,动画等效果也变得更生动。
动态 HTML(Dynamic HTML),是指使用客户端脚本语言将静态的 HTML 内容变成动态的技术的总称。由程序创建的内容称为动态内容,而事先准备好的内容称为静态内容。
XML 和 HTML 都是从标准通用标记语言 SGML(Standard Generalized Markup Language)简化而成。RSS(简易信息聚合,也叫聚合内容)和 Atom 都是发布新闻或博客日志等更新信息文档的格式的总称。两者都用到 XML。
第十一章 Web 的攻击技术
SSH 具备协议级别的认证及会话管理等功能,HTTP不具备;
对 Web 应用的攻击模式有两种:
以服务器为目标的主动攻击,攻击者通过直接访问 Web 应用,把攻击代码传入的攻击模式,需要能够访问到那些资源。具有代表性的攻击是 SQL 注入攻击和 OS 命令注入攻击;
以服务器为目标的被动攻击,指利用圈套策略执行攻击代码的攻击模式,不直接对目标 Web 应用访问发起攻击,代表性的攻击是跨站脚本攻击和跨站点请求伪造。
因输出值转义不完全引发的安全漏洞
- 跨站脚本攻击
- SQL 注入攻击
- OS 命令注入攻击
- HTTP 首部注入攻击
- 邮件首部注入攻击
- 目录遍历攻击
- 远程文件包含漏洞
实施 Web 应用的安全对策可大致分为以下两部分。
- 客户端的验证
- Web 应用端(服务器端)的验证:
- 输入值验证
- 输出值转义
在客户端允许篡改数据或关闭 JavaScript,故而产生 跨站脚本攻击(Cross-Site Scripting, XSS)
SQL 注入攻击
因会话管理疏忽引发的安全漏洞:
- 会话劫持
- 会话固定攻击
- 跨站点请求伪造
其他安全漏洞:
- 密码**:两种形式,穷举法,字典攻击(利用事先收集好的候选密码(经过各种组合方式后存入字典))。
- 点击劫持:指利用透明的按钮或链接做成陷阱,覆盖在 Web 页面之上。然后诱使用户在不知情的情况下,点击那个链接访问内容的一种攻击手段,又称为界面伪装(UI Redressing)。
- DoS 攻击:让运行中的服务呈停止状态的攻击,又名服务停止攻击或拒绝服务攻击。两种攻击方式:集中利用访问请求造成资源过载,资源用尽的同时,实际上服务也就呈停止状态;通过攻击安全漏洞使服务停止。多台计算机发起的 DoS 攻击称为 DDoS 攻击(Distributed)。DDoS 攻击通常利用那些感染病毒的计算机作为攻击者的攻击跳板
- 后门程序:开发设置的隐藏入口,可不按正常步骤使用受限功能。利用后门程序就能够使用原本受限制的功能。3 种类型:开发阶段作为 Debug 调用的后门程序、开发者为了自身利益植入的后门程序、攻击者通过某种方法设置的后门程序。
概念:
彩虹表(Rainbow Table)是由明文密码及与之对应的散列值构成的一张数据库表。