了解 Web 及网络基础
- 访问 Web 时用的就是 HTTP 协议。
- 有三项 WWW 构建技术
- 页面的文本标记语言 HTML
- 文档传递协议 HTTP
- 文档所在地址的 URL
- 通常使用的网络是在 TCP/IP 协议的基础上运作的。HTTP 属于其内部的一个子级
- OSI 五层模型:应用层,传输层,网络层,数据链路层,物理层
- 与 HTTP 密不可分的3个协议(IP、TCP 和 DNS)
- IP 网际协议位于网络层,其作用是把何种数据包传送给对方。其中两个重要条件是 IP 地址和 MAC 地址
- TCP 位于传输层,提供可靠的字节流服务。字节流服务是指,将大块数据分割成以报文字段为单位的数据包进行管理。可靠就是把数据准确地传递给对方。为了准确无误地把数传送到,TCP 协议采用了三次握手策略
- DNS 服务和 HTTP 协议 一样位于应用层的协议。它提供域名到 IP 地址之间的解析服务
- URL 是使用 Web 浏览器等访问 Web 页面时需要输入的网页地址
简单的 HTTP 协议
- HTTP 协议和 TCP/IP 协议内的其他众多协议相同,用于客户端和服务器之间的通信
- HTTP 协议规定,请求从客户端发出,最后服务器端相应该请求并返回
- HTTP 是无状态协议,所以引入了 Cookie 技术
- HTTP 使用 URI 定位互联网上的资源
- GET 获取资源
- POST 传输实体主体
- PUT 传输文件
- HEAD 获取报文首部
- DELETE 删除文件
- HTTP/1.1 建立的是持久连接,持久连接的好处在于减少了 TCP 连接的重复建立和断开造成的额外开销,减轻了服务器端的负载,这也使得请求以管线化方式发送称为可能。
- 使用 Cookie 的状态管理
HTTP 报文内的 HTTP 信息
- 用于 HTTP 协议交互的信息被称为 HTTP 报文
- 报文的结构:请求行,状态行,首部字段,其他
- 编码可以提升传输速率,但同时会消耗更多的 CPU
- 压缩传输的内容编码:gzip, compress, deflate, identity
- 分割发送的分块传输编码: 分块传输编码会将实体分成多个部分,每一块都会用十六进制来标记块的大小,而实体的最后一块会使用"0(CR+LF)"来标记
- 发送多种数据的多部分对象集合:HTTP 协议中采纳了多部分对象集合,发送一份报文主体内可含有多类型实体。通常再图片或者文本上传时使用。常见的是 multipart/form-data
- 获取部分内容的范围请求,指定范围发送的请求叫做范围请求。 Range: bytes=5001-1000 ,会用到首部字段 Range 来制定资源的 byte 范围
- 内容协商返回给客户端最为适合的资源
返回结果的 HTTP 状态码
- 状态码的职责是当客户端向服务器发送请求时,描述返回的请求结果
- 1xx 接受的请求正在处理
- 2xx 请求正常处理完毕
- 3xx 需要进行附加操作以完成请求
- 4xx 服务器无法处理请求
- 5xx 服务器处理请求出错
与 HTTP 协作的 Web 服务器
一台 Web 服务器可搭建多个独立域名的 Web 网站,也可以作为通信路径上的中转服务器提升效率。
一个服务器可以使用虚拟主机功能,就像是有多台服务器一般
HTTP 通信时, 除客户端和服务器以外,还有一些用于通信数据转发的应用程序,例如代理、网管和隧道。它们可以配合服务器工作。
代理
代理:代理是一种有转发功能的应用程序,它扮演了位于服务器和客户端“中间人”的角色,接收由客户端发送的请求并转发给服务器,同时也接受服务器返回的响应并转发给客户端。
每次经过代理服务器转发请求或相应时,会追加写入 Via 首部信息。
使用代理服务器理由:利用缓存技术减少网络带宽的流量,组织内部针对特定网站的访问控制,以获取访问日志为主要目的,等等。
代理有多种使用方法,按两种基准分类。一种是是否使用缓存,另一种是是否会修改报文。
缓存代理:会预先将资源的副本保存在代理服务器上。
透明代理:转发请求或响应时,不对报文做任何加工的代理类型被称为透明代理。反之,对报文内容加工的代理被称为非透明代理。
网关
网关:网关是转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,它就像自己拥有资源的源服务器一样对请求及进行处理。有事客户端可能都不会察觉,自己的通信目标是一个网关。
网关的工作机制和代理十分相似。而网关能使通信线路上的服务器提供非 HTTP 协议服务。
利用网关能提高通信的安全性,因为可以在客户端与网关之间的通信线路上加密以保持连接的安全。比如,网管可以连接数据库,使用 SQL 语句查询数据。另外, 在 Web 购物网站进行信用卡结算时,网关可以和信用卡结算系统联动。
隧道
隧道: 隧道是相隔在甚远的客户端和服务器之间进行中转,并保持双方通信连接的应用程序。
隧道可以按要求建立起一条与其他服务器的通信线路,届时使用 SSL 等加密手段进行通信。隧道的目的确保客户端与服务器进行安全的通信。
隧道本身不会解析 HTTP 请求。也就是说,请求保持原样中转给之后的服务器。隧道会在通信双方断开连接时结束。
HTTP 报文首部
HTTP 报文由 HTTP 版本、状态码、HTTP首部字段3部分构成。
HTTP 首部字段是构成 HTTP 报文的要素之一。在客户端与服务器之间以 HTTP 协议进行通信的过程中,无论是请求还是先响应都会使用到首部字段,它能起到传递额外重要信息的作用。
HTTP/1.1 通用首部字段
Cache-Control: 通过指定首部字段 Cache-Control 的指令,就能操作缓存的工作机制。
Connection: 控制不再转发给代理的首部字段,管理持久连接。
Date: 首部字段 Data 表明创建 HTTP 报文的日期和时间。
Pragma: 客户端会要求所有的中间服务器不返回缓存的资源。
Trailer: 会事先说明在报文主体后记录了哪些首部字段。
Transfer-Encoding: 规定了传输报文主体时采用的编码方式。
Upgrade: 用于检测 HTTP 协议及其他协议是否可使用更高的版本进行通信。
Via: 为了追踪客户端和服务器之间的请求和响应报文的传输路径。
ETag: 一种可将资源以字符串形式做唯一性标识的方式。服务器会为每份资源更新 ETag值。
Retry-After: 告诉客户端多久之后再次发送请求。
Content-Range: 针对范围请求,返回响应时使用的首部字段 Content-Rnage,能告知客户端作为响应返回的实体的哪个部分符合范围请求。
HttpOnly: 可以使 JavaScript 脚本无法获得 Cookie。
DNT: 拒绝个人信息被收集
确保 Web 安全的 HTTPS
在 HTTP 协议中可能会存在信息窃听或身份伪装等安全问题。使用 HTTPS 通信机制可以有效地防止这些问题。
HTTP 协议的缺点
- 通信使用明文,内容可能会被窃听
- 不验证通信方的身份,因此可能遭遇伪装
- 无法验明报文的完整性,所以可能已遭篡改
HTTPS 简述
HTTP + 通信加密 + 证书认证 + 完整性保护 = HTTPS
HTTPS 并非是应用层的一种新协议。只是 HTTP 通信接口部分用 SSL 和 TLS 协议代替而已。
通常 HTTP 直接和 TCP 通信。当使用 SSL 时, 则演变成先和 SSL 通信, 再由 SSL 和 TCP 通信。
SSL 是独立于 HTTP 的协议,所以不光是 HTTP 协议, 其它运行在应用层的 SMTP 和 Telnet 等协议可配合 SSL 协议使用。
HTTPS 加密机制
HTTPS 采用共享密钥加密和公开密钥加密两者并用的混合加密机制。若密钥能够实现安全交换,那么有可能会考虑仅使用公开密钥加密来通信。但是公开密钥与共享密钥相比,其处理速度要慢。
所以充分利用两者优势,将多种方法组合起来用于通信。在交换密钥环节使用公开密钥加密方式,之后建立通信交换报文阶段使用共享密钥加密方式。
在能使用 HTTPS 的情况下尽可能用 HTTPS
确认访问用户的身份
- BASIC 认证
- DIGEST 认证
- SSL 客户端认证
- FormBase 认证
基于 HTTP 的功能追加协议
- Ajax 的解决办法
- Comet 的解决方法
- 浏览器进行全双工通信的 WebSocket
- HTTP/2.0
针对 Web 的攻击技术
- SQL 注入攻击
- XSS 跨站脚本攻击
- CSRF 跨站请求伪造
- DDoS 分布式拒绝服务
--EOF--