本篇文章是《图解HTTP》读书笔记,用于回顾,阅读体验较差,请酌情观看。
第 1 章 了解 Web 及网络基础
Web 是建立在 HTTP 协议上通信的
1989 年 3 月,HTTP 诞生了。
通常使用的网络(包括互联网)是在 TCP/IP 协议族的基础上运作的。而 HTTP 属于它内部的一个子集。
TCP/IP 协议族按层次分别分为以下 4 层:应用层(ftp、dns、http)、传输层(tcp、udp)、网络层(数据包)和数据链路层(硬件)。
可能有人会把“IP”和“IP 地址”搞混,“IP”其实是一种协议的名称。IP 协议的作用是把各种数据包传送给对方。而要保证确实传送到对方那里,则需要满足各类条件。其中两个重要的条件是 IP 地址和 MAC 地址(Media Access Control Address)。
ARP 是一种用以解析地址的协议,根据通信方的 IP 地址就可以反查出对应的 MAC 地址。
TCP。发送端首先发送一个带 SYN 标志的数据包给对方。接收端收到后,回传一个带有 SYN/ACK 标志的数据包以示传达确认信息。最后,发送端再回传一个带 ACK 标志的数据包,代表“握手”结束。
DNS 协议提供通过域名查找 IP 地址,或逆向从 IP 地址反查域名的服务。
URI 就是由某个协议方案表示的资源的定位标识符。采用 HTTP 协议时,协议方案就是 http。除此之外,还有 ftp、mailto、telnet、file 等。
第 2 章 简单的 HTTP 协议
HTTP 协议规定,请求从客户端发出,最后服务器端响应该请求并返回。
HTTP 是一种不保存状态,即无状态(stateless)协议。这是为了更快地处理大量事务,确保协议的可伸缩性,而特意把 HTTP 协议设计成如此简单的。
GET 方法用来请求访问已被 URI 识别的资源。“我想访问你的某个资源啊”
POST 方法用来传输实体的主体。“我要把这条信息告诉你!”
PUT 方法用来传输文件。但是,鉴于 HTTP/1.1 的 PUT 方法自身不带验证机制,任何人都可以上传文件 , 存在安全性问题,因此一般的 Web 网站不使用该方法。
HEAD 方法和 GET 方法一样,只是不返回报文主体部分。用于确认URI 的有效性及资源更新的日期时间等。
DELETE 方法用来删除文件,是与 PUT 相反的方法。DELETE 方法按请求 URI 删除指定的资源。(一般也不用)
OPTIONS 方法用来查询针对请求 URI 指定的资源支持的方法。
TRACE 方法是让 Web 服务器端将之前的请求通信环回给客户端的方法。
CONNECT 方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行 TCP 通信。
HTTP/1.1 和一部分的 HTTP/1.0 想出了持久连接(HTTP Persistent Connections,也称为 HTTP keep-alive 或 HTTP connection reuse)的方法。持久连接的特点是,只要任意一端没有明确提出断开连接,则保持 TCP 连接状态。
持久连接使得多数请求以管线化(pipelining)方式发送成为可能。从前发送请求后需等待并收到响应,才能发送下一个请求。管线化技术出现后,不用等待响应亦可直接发送下一个请求。
Cookie 技术通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态。
第 3 章 HTTP 报文内的 HTTP 信息
HTTP 报文大致可分为报文首部和报文主体两块。两者由最初出现的空行(CR+LF)来划分。通常,并不一定要有报文主体
通常,报文主体等于实体主体。只有当传输中进行编码操作时,实体主体的内容发生变化,才导致它和报文主体产生差异。
这种把实体主体分块的功能称为分块传输编码(Chunked Transfer Coding)。
在 HTTP 报文中使用多部分对象集合时,需要在首部字段里加上 Content-type。
指定范围发送的请求叫做范围请求(Range Request)。对一份 10 000 字节大小的资源,如果使用范围请求,可以只请求 5001~10 000 字节内的资源。执行范围请求时,会用到首部字段 Range 来指定资源的 byte 范围。
内容协商机制是指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为适合的资源。内容协商会以响应资源的语言、字符集、编码方式等作为判断的基准。
第 4 章 返回结果的 HTTP 状态码
200 OK | 从客户端发来的请求在服务器端被正常处理了 |
204 No Content | 服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分。 |
206 Partial Content | 客户端进行了范围请求,而服务器成功执行了这部分的 GET 请求 |
301 Moved Permanently | 请求的资源已被分配了新的 URI |
302 Found | 临时性重定向(不用更新书签) |
303 See Other | 303 状态码和 302 有着相同的功能,但 303 状态码明确表示客户端应当采用 GET 方法获取资源 |
307 Temporary Redirect | 与 302 Found 有着相同的含义 |
400 Bad Request | 请求报文中存在语法错误 |
401 Unauthorized | 发送的请求需要有通过 HTTP 认证(BASIC 认证、DIGEST 认证)的认证信息 |
403 Forbidden | 对请求资源的访问被服务器拒绝了 |
404 Not Found | 服务器上无法找到请求的资源 |
500 Internal Server Error | 服务器端在执行请求时发生了错误 |
503 Service Unavailable | 服务器暂时处于超负载或正在进行停机维护,现在无法处理请求 |
第 5 章 与 HTTP 协作的 Web 服务器
代理是一种有转发功能的应用程序,它扮演了位于服务器和客户端“中间人”的角色,接收由客户端发送的请求并转发给服务器,同时也接收服务器返回的响应并转发给客户端。
网关的工作机制和代理十分相似。而网关能使通信线路上的服务器提供非 HTTP 协议服务
隧道可按要求建立起一条与其他服务器的通信线路,届时使用 SSL 等加密手段进行通信。隧道的目的是确保客户端能与服务器进行安全的通信。
第 6 章 HTTP 首部
User-Agent 用于传达浏览器的种类。
实体首部字段是包含在请求报文和响应报文中的实体部分所使用的首部,用于补充内容的更新时间等与实体相关的信息。
第 7 章 确保 Web 安全的 HTTPS
HTTP 主要有这些不足,例举如下。
- 通信使用明文(不加密),内容可能会被窃听
- 不验证通信方的身份,因此有可能遭遇伪装
- 无法证明报文的完整性,所以有可能已遭篡改
与 SSL 组合使用的 HTTP 被称为 HTTPS(HTTP Secure,超文本传输安全协议)或 HTTP over SSL。
HTTP+ 加密 + 认证 + 完整性保护 = HTTPS
HTTPS 采用共享密钥加密和公开密钥加密两者并用的混合加密机制。
第 8 章 确认访问用户身份的认证
BASIC 认证
当请求的资源需要 BASIC 认证时,服务器会随状态码 401 Authorization Required;接收到状态码 401 的客户端为了通过 BASIC 认证,需要将用户 ID 及密码经过 Base64 编码处理发送给服务器;接收到包含首部字段 Authorization 请求的服务器,会对认证信息的正确性进行验证。如验证通过,则返回一条包含 Request-URI 资源的响应。
DIGEST 认证
质询响应方式是指,一开始一方会先发送认证要求给另一方,接着使用从另一方那接收到的质询码计算生成响应码。最后将响应码返回给对方进行认证的方式。
SSL 客户端认证
为达到 SSL 客户端认证的目的,需要事先将客户端证书分发给客户端,且客户端必须安装此证书。
基于表单验证
我们会使用 Cookie 来管理 Session,以弥补 HTTP 协议中不存在的状态管理功能。
第 9 章 基于 HTTP 的功能追加协议
Google 在 2010 年发布了 SPDY(取自 SPeeDY,发音同 speedy),其开发目标旨在解决 HTTP 的性能瓶颈,缩短 Web 页面的加载时间(50%)。
Ajax 局部刷新。
使用 SPDY 后,HTTP 协议额外获得以下功能。
- 多路复用流。通过单一的 TCP 连接,可以无限制处理多个 HTTP 请求。
- 赋予请求优先级
- 压缩 HTTP 首部
- 推送功能。支持服务器主动向客户端推送数据的功能。
- 服务器提示功能。服务器可以主动提示客户端请求所需的资源。
WebSocket,即 Web 浏览器与 Web 服务器之间全双工通信标准。
下面我们列举一下 WebSocket 协议的主要特点。
- 推送功能
- 减少通信量。首部信息小,一次握手。
HTTP / 2.0
WebDAV(Web-based Distributed Authoring and Versioning,基于万维网的分布式创作和版本控制)是一个可对 Web 服务器上的内容直接进行文件复制、编辑等操作的分布式文件系统。
第 10 章 构建 Web 内容的技术
RSS(简易信息聚合,也叫聚合内容)和 Atom 都是发布新闻或博客日志等更新信息文档的格式的总称。两者都用到了 XML。
JSON(JavaScript Object Notation)是一种以 JavaScript(ECMAScript)的对象表示法为基础的轻量级数据标记语言。
第 11 章 Web 的攻击技术
HTTP 不具备必要的安全功能,自行设计导致问题。
主动攻击(active attack)是指攻击者通过直接访问 Web 应用,把攻击代码传入的攻击模式。主动攻击模式里具有代表性的攻击是 SQL 注入攻击和 OS 命令注入攻击。
被动攻击(passive attack)是指利用圈套策略执行攻击代码的攻击模式。被动攻击模式中具有代表性的攻击是跨站脚本攻击和跨站点请求伪造。
跨站脚本攻击(Cross-Site Scripting,XSS)是指通过存在安全漏洞的Web 网站注册用户的浏览器内运行非法的 HTML 标签或 JavaScript 进行的一种攻击。
SQL 注入(SQL Injection)是指针对 Web 应用使用的数据库,通过运行非法的 SQL 而产生的攻击。
OS 命令注入攻击(OS Command Injection)是指通过 Web 应用,执行非法的操作系统命令达到攻击的目的。只要在能调用 Shell 函数的地方就有存在被攻击的风险。
HTTP 首部注入攻击(HTTP Header Injection)是指攻击者通过在响应首部字段内插入换行,添加任意响应首部或主体的一种攻击。
邮件首部注入(Mail Header Injection)是指 Web 应用中的邮件发送功能,攻击者通过向邮件首部 To 或 Subject 内任意添加非法内容发起的攻击。
目录遍历(Directory Traversal)攻击是指对本无意公开的文件目录,通过非法截断其目录路径后,达成访问目的的一种攻击。
。。。