图解 http 
了解 Web 及网络基础 
HTTP 的诞生 
- 1989 年 3 月,互联网还只属于少数人。在这一互联网的黎明期,HTTP 诞生了。
 - CERN(欧洲核子研究组织)的蒂姆 • 伯纳斯 - 李(Tim BernersLee)博士提出了一种能让远隔两地的研究者们共享知识的设想。
 - 最初设想的基本理念是:借助多文档之间相互关联形成的超文本(HyperText),连成可相互参阅的 WWW(World Wide Web,万维网)。
 - 现在已 ᨀ 出了 3 项 WWW 构建技术,分别是: 
- 把 SGML(Standard Generalized Markup Language,标准通用标记语言)作为页面的文本标记语言的 HTML(HyperText Markup Language,超文本标记语言);
 - 作为文档传递协议的 HTTP ;
 - 指定文档所在地址的 URL(Uniform Resource Locator,统一资源定位符)。
 
 - WWW 这一名称,是 Web 浏览器当年用来浏览超文本的客户端应用程序时的名称。现在则用来表示这一系列的集合,也可简称为 Web
 
TCP/IP 
- 通常使用的网络(包括互联网)是在 TCP/IP 协议族的基础上运作 的。而 HTTP 属于它内部的一个子集
 - TCP/IP 是互联网相关的各类协议族的总称
 

TCP/IP 的分层管理 
- 应用层 
- 应用层决定了向用户提供应用服务时通信的活动。TCP/IP 协议族内预存了各类通用的应用服务。比如,FTP 、DNS、HTTP 。
 
 - 传输层 
- 传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传输。在传输层有两个性质不同的协议:TCP 和 UDP。
 
 - 网络层(又名网络互连层) 
- 网络层用来处理在网络上流动的数据包。数据包是网络传输的最小数据单位。该层规定了通过怎样的路径(所谓的传输路线)到达对方计算机,并把数据包传送给对方。与对方计算机之间通过多台计算机或网络设备进行传输时,网络层所起的作用就是在众多的选项内选择一条传输路线。
 
 - 链路层(又名数据链路层,网络接口层) 
- 用来处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱动、NIC(Network Interface Card,网络适配器,即网卡),及光纤等物理可见部分(。硬件上的范畴均在链路层的作用范围之内
 
 

简单的 HTTP 协议 
- HTTP 协议和 TCP/IP 协议族内的其他众多的协议相同,用于客户端和 服务器之间的通信。
 - 请求访问文本或图像等资源的一端称为客户端,而提供资源响应的一 端称为服务器端
 HTTP 是不保存状态的协议,为了实现期望的保持状态功能,于 是引入了 Cookie 技术
HTTP 方法 
| 方法 | 说明 | 支持的 HTTP 协议版本 | 
|---|---|---|
| GET | 获取资源 | 1.0、1.1 | 
| POST | 传输实体主体(例如表单数据) | 1.0、1.1 | 
| PUT | 传输文件或更新资源 | 1.0、1.1 | 
| HEAD | 获得报文首部信息,但不返回实体内容 | 1.0、1.1 | 
| DELETE | 删除指定的资源 | 1.0、1.1 | 
| OPTIONS | 查询服务器支持哪些 HTTP 方法 | 1.1 | 
| TRACE | 回显服务器收到的请求,用于测试和诊断 | 1.1 | 
| CONNECT | 要求在服务器与代理之间建立隧道,常用于 SSL | 1.1 | 
| LINK | 建立当前文档和另一个文档之间的关系链接 | 1.0 (实际中并不常用) | 
| UNLINK | 断开两个通过 LINK 方法建立的关系 | 1.0 (实际中并不常用) | 
HTTP 状态码 
| 类别 | 原因短语 | 
|---|---|
| 1XX Informational(信息性状态码) | 接收到请求,服务器正在处理中 | 
| 2XX Success(成功状态码) | 请求已成功接收并处理完成 | 
| 3XX Redirection(重定向状态码) | 需要客户端进行额外操作(如跳转)以完成请求 | 
| 4XX Client Error(客户端错误状态码) | 由于客户端原因导致服务器无法满足请求 | 
| 5XX Server Error(服务器错误状态码) | 服务器在处理请求过程中遇到错误 | 
状态吗详解 
| 类别 | 原因短语 | 
|---|---|
| 200 OK | 表示从客户端发来的请求在服务器端被正常处理了 | 
| 204 No Content | 代表服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分 | 
| 206 Partial Content | 表示客户端进行了范围请求,而服务器成功执行了这部分的 GET 请求。响应报文中包含由 Content-Range 指定范围的实体内容 | 
| 301 Moved Permanently | 永久性重定向。表示请求的资源已被分配了新的 URI,以后应使用资源现在所指的 URI | 
| 302 Found | 临时性重定向。表示请求的资源已被分配了新的 URI,希望用户(本次)能使用新的 URI 访问 | 
| 303 See Other | 由于请求对应的资源存在着另一个 URI,应使用 GET 方法定向获取请求的资源 | 
| 304 Not Modified | 表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。304 状态码返回时不包含任何响应的主体部分 | 
| 307 Temporary Redirect | 临时重定向。与 302 Found 有着相同的含义 | 
| 400 Bad Request | 表示请求报文中存在语法错误 | 
| 401 Unauthorized | 表示发送的请求需要有通过 HTTP 认证(BASIC 认证、DIGEST 认证)的认证信息 | 
| 403 Forbidden | 表明对请求资源的访问被服务器拒绝了 | 
| 404 Not Found | 表明服务器上无法找到请求的资源 | 
| 500 Internal Server Error | 表明服务器端在执行请求时发生了错误。也有可能是 Web 应用存在的 bug 或某些临时的故障 | 
| 503 Service Unavailable | 表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求 | 
在 HTTP 出现之前的协议 
| 协议名称 | 描述 | 
|---|---|
| FTP (File Transfer Protocol) | 传输文件时使用的协议,历史悠久,可追溯至 1973 年前后,尽管在 1995 年被 HTTP 的流量超越,至今仍广泛沿用。 | 
| NNTP (Network News Transfer Protocol) | 用于 NetNews 电子会议室中消息传递的协议,于 1986 年前后出现,随着 Web 信息交换成为主流,该协议已较少使用。 | 
| Archie | 搜索匿名 FTP 公开文件信息的协议,约在 1990 年前后出现,目前不常使用。 | 
| WAIS (Wide Area Information Servers) | 通过关键词检索多个数据库的协议,诞生于 1991 年前后,现已被 HTTP 协议替代,不再常见。 | 
| Gopher | 查找互联网连接计算机内信息的协议,同样在 1991 年前后出现,由于被 HTTP 协议取代,现今已较少使用。 | 
HTTP 首部 
通用首部字段 
| 首部字段名 | 说明 | 
|---|---|
| Cache-Control | 控制缓存的行为 | 
| Connection | 逐跳首部、连接的管理 | 
| Date | 创建报文的日期时间 | 
| Pragma | 报文指令 | 
| Trailer | 报文末端的首部一览 | 
| Transfer-Encoding | 指定报文主体的传输编码方式 | 
| Upgrade | 升级为其他协议 | 
| Via | 代理服务器的相关信息 | 
| Warning | 错误通知 | 
请求首部字段 
| 首部字段名 | 说明 | 
|---|---|
| Accept | 用户代理可处理的媒体类型 | 
| Accept-Charset | 优先的字符集 | 
| Accept-Encoding | 优先的内容编码 | 
| Accept-Language | 优先的语言(自然语言) | 
| Authorization | Web 认证信息 | 
| Expect | 期待服务器的特定行为 | 
| From | 用户的电子邮箱地址 | 
| Host | 请求资源所在服务器 | 
| If-Match | 比较实体标记(ETag) | 
| If-Modified-Since | 比较资源的更新时间 | 
| If-None-Match | 比较实体标记(与 If-Match 相反) | 
| If-Range | 资源未更新时发送实体 Byte 的范围请求 | 
| If-Unmodified-Since | 比较资源的更新时间(与 If-Modified-Since 相反) | 
| Max-Forwards | 最大传输逐跳数 | 
| Proxy-Authorization | 代理服务器要求客户端的认证信息 | 
| Range | 实体的字节范围请求 | 
| Referer | 对请求中 URI 的原始获取方 | 
| TE | 传输编码的优先级 | 
| User-Agent | HTTP 客户端程序的信息 | 
响应首部字段 
| 首部字段名 | 说明 | 
|---|---|
| Accept-Ranges | 是否接受字节范围请求 | 
| Age | 推算资源创建经过时间 | 
| ETag | 资源的匹配信息 | 
| Location | 令客户端重定向至指定 URI | 
| Proxy-Authenticate | 代理服务器对客户端的认证信息 | 
| Retry-After | 对再次发起请求的时机要求 | 
| Server | HTTP 服务器的安装信息 | 
| Vary | 代理服务器缓存的管理信息 | 
| WWW-Authenticate | 服务器对客户端的认证信息 | 
实体首部字段 
| 首部字段名 | 说明 | 
|---|---|
| Allow | 资源可支持的 HTTP 方法 | 
| Content-Encoding | 实体主体适用的编码方式(如 gzip) | 
| Content-Language | 实体主体的自然语言 | 
| Content-Length | 实体主体的大小(单位:字节) | 
| Content-Location | 替代对应资源的 URI | 
| Content-MD5 | 实体主体的报文摘要,用于校验传输完整性 | 
| Content-Range | 实体主体的位置范围,用于字节范围请求 | 
| Content-Type | 实体主体的媒体类型及字符集 | 
| Expires | 实体主体过期的日期时间,决定缓存有效期 | 
| Last-Modified | 资源的最后修改日期时间,用于缓存验证 | 
Cookie 服务的首部字段 
| 首部字段名 | 说明 | 首部类型 | 
|---|---|---|
| Set-Cookie | 开始状态管理所使用的 Cookie 信息 | 响应首部字段 | 
| Cookie | 服务器接收到的 Cookie 信息 | 请求首部字段 | 
Set-Cookie 属性 
| 属性 | 说明 | 
|---|---|
| NAME=VALUE | 必需项,赋予 Cookie 的名称及其对应的值 | 
| expires=DATE | 指定 Cookie 的有效期,若不明确指定,则默认为浏览器关闭前为止 | 
| path=PATH | 设置服务器上文件目录作为 Cookie 的适用对象,若不指定则默认为创建 Cookie 的文档所在的文件目录 | 
| domain=域名 | 指定 Cookie 适用的域名,若不指定则默认为创建 Cookie 的服务器域名 | 
| Secure | 标识符,仅在 HTTPS 安全通信时该 Cookie 才会被发送到服务器 | 
| HttpOnly | 标识符,限制 Cookie 不能通过 JavaScript 脚本访问,有助于防止跨站脚本攻击(XSS)对 Cookie 信息的窃取和篡改 | 
其他首部字段 
| 首部字段名 | 说明 | 可选值与含义 | 
|---|---|---|
| X-Frame-Options | 控制网站内容在其他 Web 网站的 Frame 标签内的显示问题,防止点击劫持 | DENY:拒绝 SAMEORIGIN:仅同源域名下的页面匹配时许可  | 
| X-XSS-Protection | 针对跨站脚本攻击(XSS)的一种对策,控制浏览器 XSS 防护机制开关 | 0:将 XSS 过滤设置成无效状态 1:将 XSS 过滤设置成有效状态  | 
| DNT | Do Not Track 的简称,表示用户是否同意被精准广告追踪 | 0:同意被追踪 1:拒绝被追踪  | 
| P3P | 让 Web 网站上的个人隐私信息以程序可理解的形式呈现,旨在保护用户隐私 | - | 
确保 Web 安全的 HTTPS 
- HTTP+ 加密 + 认证 + 完整性保护 = HTTPS
 
确认访问用户身份的认证 
- BASIC 认证(基本认证)
 - DIGEST 认证(摘要认证)
 - SSL 客户端认证
 - FormBase 认证(基于表单认证)
 
基于 HTTP 的功能追加协议 
SPDY (消除 HTTP 瓶颈) 
HTTP 标准就会成为瓶颈- 一条连接上只可发送一个请求。
 - 请求只能从客户端开始。客户端不可以接收除响应以外的指 令。
 - 请求/响应首部未经压缩就发送。首部信息越多延迟越大。
 - 发送冗长的首部。每次互相发送相同的首部造成的浪费较 多
 
SPDY 的设计与功能
- SPDY 没有完全改写 HTTP 协议,而是在 TCP/IP 的应用层与运输层之间通过新加会话层的形式运作。同时,考虑到安全性问题,SPDY 规定通信中使用 SSL。
 - SPDY 以会话层的形式加入,控制对数据的流动,但还是采用 HTTP 建立通信连接。因此,可照常使用 HTTP 的 GET 和 POST 等方 法、Cookie 以及 HTTP 报文等。
 
使用 SPDY 后,HTTP 协议额外获得以下功能。
多路复用流通过单一的 TCP 连接,可以无限制处理多个 HTTP 请求。所有请求 的处理都在一条 TCP 连接上完成,因此 TCP 的处理效率得到提高。赋予请求优先级SPDY 不仅可以无限制地并发处理请求,还可以给请求逐个分配优先 级顺序。这样主要是为了在发送多个请求时,解决因带宽低而导致响应变慢的问题压缩 HTTP 首部压缩 HTTP 请求和响应的首部。推送功能支持服务器主动向客户端推送数据的功能。服务器提示功能服务器可以主动提 示客户端请求所需的资源。
WebSocket 
HTTP/2.0 
Web 服务器管理文件的 WebDAV 
Web 的攻击技术 
对 Web 应用的攻击模式有两种
- 主动攻击:主动攻击(active attack)是指攻击者通过直接访问 Web 应用,把攻击代码传入的攻击模式
 - 被动攻击:是指利用圈套策略执行攻击代码的攻击模式。在被动攻击过程中,攻击者不直接对目标 Web 应用访问发起攻击
 
| 安全漏洞类别 | 具体安全漏洞 | 
|---|---|
| 输出值转义漏洞 | 跨站脚本攻击(XSS) SQL 注入攻击 OS 命令注入攻击 HTTP 首部注入攻击 邮件首部注入攻击 目录遍历攻击 远程文件包含漏洞  | 
| 设置或设计上的漏洞 | 强制浏览 不正确的错误消息处理 开放重定向  | 
| 会话管理漏洞 | 会话劫持 会话固定攻击 跨站点请求伪造(CSRF)  | 
| 其他安全漏洞 | 密码破解 点击劫持 拒绝服务攻击(DoS) 后门程序  |