5、与 HTTP 协作的 Web 服 务器
一台 Web 服务器可搭建多个独立域名的 Web 网站,也可作为通信路 径上的中转服务器提升传输效率。
5.1、 用单台虚拟主机实现多个域名
HTTP/1.1 规范允许一台 HTTP 服务器搭建多个 Web 站点。
在互联网上,域名通过 DNS 服务映射到 IP 地址(域名解析)之后访 问目标网站。可见,当请求发送到服务器时,已经是以 IP 地址形式访问了。在相同的 IP 地址下,由于虚拟主机可以寄存多个不同主机名和域名 的 Web 网站,因此在发送 HTTP 请求时,必须在 Host 首部内完整指定主机名或域名的 URI。
5.2、通信数据转发程序 :代理、网关、隧 道
这些应用程序和服务器可以将请求转发给通信线路上的下一站服务 器,并且能接收从那台服务器发送的响应再转发给客户端。
5.2.1、代理
代理是一种有转发功能的应用程序,它扮演了位于服务器和客户端 “中间人” 的角色,接收由客户端发送的请求并转发给服务器,同时 也接收服务器返回的响应并转发给客户端。
代理服务器的基本行为就是接收客户端发送的请求后转发给其他服务 器。代理不改变请求 URI,会直接发送给前方持有资源的目标服务器。
源服务器:持有资源实体的服务器。
在 HTTP 通信过程中,可级联多台代理服务器。请求和响应的转发会 经过数台类似锁链一样连接起来的代理服务器。转发时,需要附加 Via 首部字段以标记出经过的主机信息。
使用代理的理由:
-
用缓存技术减少网络带宽的流量。
-
组织内部针对特定网站的访问控制。
-
以获取访问日志为主要目的,等等。
代理的使用方法的分类基准:一种是否使用缓存;另一种是是否修改报文。
缓存代理
代理转发响应时,缓存代理(Caching Proxy)会预先将资源的副本 (缓存)保存在代理服务器上。 当代理再次接收到对相同资源的请求时,就可以不从源服务器那里获取资源,而是将之前缓存的资源作为响应返回。
透明代理
透明代理 转发请求或响应时,不对报文做任何加工的代理类型被称为透明代理 (Transparent Proxy)。反之,对报文内容进行加工的代理被称为非 透明代理。
5.2.2、网关
网关是转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,它就像自己拥有资源的源服务器一样对请求进行处理。有时客户端可能都不会察觉,自己的通信目标是一个网关。
网关的工作机制和代理十分相似。而网关能使通信线路上的服务器提 供非 HTTP 协议服务。
利用网关能提高通信的安全性,因为可以在客户端与网关之间的通信 线路上加密以确保连接的安全。
5.2.3、隧道
隧道是在相隔甚远的客户端和服务器两者之间进行中转,并保持双方通信连接的应用程序。
隧道可按要求建立起一条与其他服务器的通信线路,届时使用 SSL等 加密手段进行通信。
隧道的目的是确保客户端能与服务器进行安全的通信。
隧道本身不会去解析 HTTP 请求。通过隧道的传输,可以和远距离的服务器安全通信。隧道本 身是透明的,客户端不用在意隧道的存在
5.3、 保存资源的缓存
缓存:指代理服务器或客户端本地磁盘内保存的资源副本。可以减少对源服务器的访问,减少访问时间。
当代理转发从服务器返回的响应时,代理服务器将会保存一份资源的副本作为缓存使用。
缓存服务器的优势在于利用缓存可避免多次从源服务器转发资源。
6、HTTP 首部
6.1、HTTP报文首部
报文结构如下图
报文首部的组成:
-
HTTP请求报文:在请求中,HTTP 报文由方法、URI、HTTP 版本、HTTP 首部字段等 部分构成。
-
-
HTTP 响应报文:在响应中,HTTP 报文由 HTTP 版本、状态码(数字和原因短语)、 HTTP 首部字段 3 部分构成。
-
6.2、 HTTP 首部字段
6.2.1、 HTTP 首部字段传递重要信息
在客户端与服务器之 间以 HTTP 协议进行通信的过程中,无论是请求还是响应都会使用首 部字段,它能起到传递额外重要信息的作用。
使用首部字段是为了给浏览器和服务器提供报文主体大小、所使用的 语言、认证信息等内容。
6.2.2、 HTTP 首部字段结构
HTTP 首部字段是由首部字段名和字段值构成的,中间用冒号“:” 分 隔。例如: 首部字段名: 字段值
字段值对应单个 HTTP 首部字段可以有多个值,例如:Keep-Alive: timeout=15, max=100
6.2.3、 4 种 HTTP 首部字段类型
根据实际用途划分:
-
通用首部字段(General Header Fields):请求报文和响应报文两方都会使用的首部。
-
请求首部字段(Request Header Fields):从客户端向服务器端发送请求报文时使用的首部。补充了请求的附加 内容、客户端信息、响应内容相关优先级等信息。
-
响应首部字段(Response Header Fields):从服务器端向客户端返回响应报文时使用的首部。补充了响应的附加 内容,也会要求客户端附加额外的内容信息。
-
-
实体首部字段(Entity Header Fields):针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更 新时间等与实体有关的信息。
6.3、其他首部字段
HTTP 首部字段是可以自行扩展的。所以在 Web 服务器和浏览器的应 用上,会出现各种非标准的首部字段。
6.3.1、 X-Frame-Options
X-Frame-Options: DENY
首部字段 X-Frame-Options 属于 HTTP 响应首部,用于控制网站内容 在其他 Web 网站的 Frame 标签内的显示问题。其主要目的是为了防 止点击劫持(clickjacking)攻击。
有以下两个可指定的字段值:
-
DENY :拒绝
-
SAMEORIGIN :仅同源域名下的页面(Top-level-browsingcontext)匹配时许可。
6.3.2、 X-XSS-Protection
X-XSS-Protection: 1
首部字段 X-XSS-Protection 属于 HTTP 响应首部,它是针对跨站脚本 攻击(XSS)的一种对策,用于控制浏览器 XSS 防护机制的开关。
可指定的字段值如下:
-
0 :将 XSS 过滤设置成无效状态
-
1 :将 XSS 过滤设置成有效状态
6.3.3、 DNT
首部字段 DNT 属于 HTTP 请求首部,其中 DNT 是 Do Not Track 的简 称,意为拒绝个人信息被收集,是表示拒绝被精准广告追踪的一种方法。
可指定的字段值如下
-
0 :同意被追踪
-
1 :拒绝被追踪
6.3.4、 P3P
首部字段 P3P 属于 HTTP 相应首部,通过利用 P3P(The Platform for Privacy Preferences,在线隐私偏好平台)技术,可以让 Web 网站上 的个人隐私变成一种仅供程序可理解的形式,以达到保护用户隐私的 目的。
要进行 P3P 的设定,需按以下操作步骤进行。
-
步骤 1:创建 P3P 隐私
-
步骤 2:创建 P3P 隐私对照文件后,保存命名在 /w3c/p3p.xml
-
步骤 3:从 P3P 隐私中新建 Compact policies 后,输出到 HTTP 响应 中