该章的主要内容是讲解与 HTTP 协作的 Web 服务器

一、用单台虚拟主机实现多个域名

基于虚拟主机的功能,可以只使用一台物理机实现多个域名的网站部署。

在互联网上,域名通过 DNS 域名解析系统可以映射到具体的 IP 上,多个域名可以映射到同一个 IP,但是一个域名只能映射到一个 IP。如果服务器想知道请求来自于哪个域名,可以通过请求头中的 Host 首部字段获取。

二、代理、网关和隧道

HTTP 通信时,除服务端和客户端以外,还有一些用于通信数据转发处理的应用程序,例如代理、网关和隧道,它们可以配合服务器工作。

  • 代理是一种有转发功能的应用程序,扮演者服务器和客户端的中间人的角色。代理接受客户端的请求转发给服务器,然后接受服务器的响应转发给客户端。
  • 网关是转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,它就像自己拥有资源的源服务器一样对请求进行处理。
  • 隧道是在相隔甚远的客户端和服务器之间进行中转并保持双方连接的应用程序。

2.1 代理

代理服务器的基本行为就是在客户端和服务端之间转发请求和响应,代理不改变请求 URI,会直接发送给持有资源的服务器(称为源服务器)。

每次通过代理转发请求或者响应时,会追加写入 Via 首部字段,该字段会标记处经过的代理主机信息。

使用代理服务器的理由包括利用缓存技术减少网络带宽的流量,组织内部针对特定网站的访问控制,获取访问日志等。

代理的使用方式可以按照是否使用缓存和是否修改报文来进行分类。

缓存代理:代理转发响应时,会把资源保存在代理服务器上,当代理再接收到相同的资源请求时,会返回之前缓存的资源。

透明代理:转发请求或者响应时,不对报文进行任何修改的代理类型称为透明代理,反之称为非透明代理。

2.2 网关

网关的工作机制和代理十分相似,但是网关可以使通信线路上的服务器提供非 HTTP 协议服务。

利用网关能提高通信的安全性,因为可以在客户端和网关之间的通信线路上加密以确保连接的安全性。

2.4 隧道

隧道可以按照要求建立起一条与其他服务器的通信线路,届时使用 SSL 等加密手段进行通信。隧道的目的是确保客户端与服务端能够进行安全的通信

三、保存资源的缓存

缓存是指代理服务器或客户端本地磁盘内保存的资源副本。

利用缓存可以减少对源服务器的访问,可以减少通信流量和通信时间。

缓存服务器是代理服务器的一种,并归类在缓存代理类型中。

3.1 缓存的有效期限

即使存在缓存,也会因为客户端的要求、缓存的有效期等因素向源服务器确认资源的有效性。若缓存失效,缓存服务器会再次向源服务器获取“新的”资源。

3.2 客户端缓存

除了代理服务器内的缓存以外,客户端的浏览器也可以缓存。同样的客户端也会向源服务器确定资源的有效性,然后再返回有效的资源。

图解 HTTP 笔记(五)——Web 服务器的更多相关文章

  1. HTTP权威协议笔记-5.Web服务器

    5.1 Web服务器工作内容 建立连接--接受一个客户端的连接,或者将其拒绝 接受请求--从网络中读取一条HTTP报文 处理请求--对请求报文进行解释,并采取行动 访问资源--访问报文中指定的资源 构 ...

  2. 06-Node.js学习笔记-创建web服务器

    创建web服务器 //引用系统模块 const http = require('http'); //创建web服务器 //用于处理url地址 const url = require('url'); c ...

  3. 「图解HTTP 笔记」Web 基础

    Web 基础 三项构建技术: HTML:页面的文本标记语言 HTTP:文档传输协议 URL:指定文档所在地址 一些概念 HTTP(HyperText Transfer Protocol):通常被译为& ...

  4. 《图解HTTP》阅读笔记-第五章-web服务器

      第五章.与HTTP协助的web服务器单台虚拟主机实现多个域名可以用单台物理主机运行多台虚拟主机,这些虚拟主机的IP相同,而虚拟主机有可以寄存多个不同主机名和域名的web网站,所以要保证发送HTTP ...

  5. HTTP权威指南阅读笔记五:Web服务器

    Web服务器会做些什么: 1.建产连接:接受一个客户端连接,或者如果不希望与这个客户端建立连接,就将其关闭. 1)处理新连接 2)客户端主机名识别 3)通过ident确定客户端用户 ident在组织内 ...

  6. Node.js学习笔记(五) --- 使用Node.js搭建Web服务器

    1. Node.js 创建的第一个应用 1.引入http模块 var http = require("http"); 2. 创建服务器接下来我们使用 http.createServ ...

  7. 20145216 20145330 《信息安全系统设计基础》 实验五 简单嵌入式WEB 服务器实验

    20145216 20145330 <信息安全系统设计基础> 实验五 简单嵌入式WEB 服务器实验 实验报告封面 实验步骤 1.阅读理解源码 进入/arm2410cl/exp/basic/ ...

  8. 20145208《信息安全系统设计基础》实验五 简单嵌入式WEB 服务器实验

    20145208<信息安全系统设计基础>实验五 简单嵌入式WEB 服务器实验 20145208<信息安全系统设计基础>实验五 简单嵌入式WEB 服务器实验

  9. 20145210 20145226 《信息安全系统设计基础》实验五 简单嵌入式WEB服务器实验

    20145210 20145226 <信息安全系统设计基础>实验五 简单嵌入式WEB服务器实验 结对伙伴:20145226 夏艺华 实验报告封面 实验目的与要求 · 掌握在ARM开发板实现 ...

随机推荐

  1. 15_sqoop数据导出

    1.Sqoop的数据导出 将数据从HDFS导出到RDBMS数据库,导出前,目标表必须存在于目标数据库中 默认操作是将文件中的数据使用INSERT语句插入到表中 更新模式下,是生成UPDATE语句更新表 ...

  2. python基础应用---列表应用

    列表:列表用[]来表示 names = ['wang', 'yuan', 'yang', 'china', 'french', 'wang'] #列表增加 names.append('zhang') ...

  3. 共用dll如何扩展

    今天需要对一个多个项目共用的dll进行扩展.发现很难搞,然后老大告诉我共享的dll有一个属性指向各个平台自己的类型,这个类型是暴露在各个平台自己项目中的. 然后直接对这个属性进行扩展就行了,这个属性是 ...

  4. webpack中环境变量的使用方法

    这节课讲解一下,在webpack打包过程中,怎么去使用一些环境变量. 首先我有一个打包配置的三个文件 "scripts": { "dev-build": &qu ...

  5. 做一个函数 返回当前日期、当前时间 格式为“XXXX年XX月XX日”

    import time import datetime def time_strf(now_date):#传入0,1,2返回 当前日期.当前时间.当前日期与时间 today=datetime.date ...

  6. Python基础之异常

    一.摘要 Python使用被称为异常 的特殊对象来管理程序执行期间发生的错误.每当发生让Python不知所措的错误时,它都会创建一个异常对象.如果你编写了处理该异常的代码,程序将继续运行:如果你未对异 ...

  7. SQL SERVER 查询第20行到30之间的数据

    1.先查询前20行的ID,后查询除去20条记录的前10条记录 SELECT TOP * FROM tbBank WHERE BankID NOT IN(SELECT TOP BankID FROM t ...

  8. linux实操_组管理

    1.文件/目录的所有者 一般为文件的创建者,谁创建了该文件,就自然成为该文件的所有者. 查看文件的所有者: 指令:ls -ahl 修改文件所有者: 指令:chown 用户名 文件名 组的创建: 指令: ...

  9. Codeforces 1221 F Choose a Square

    题面 不知道大佬们怎么想的,反正我看到这种区间包含性质的并且score只和包含的区间与询问区间挂钩的题,马上就想到了扫描线23333 虽然革命方向无比正确,但却因为SB错误交了5次才 A. WA第一发 ...

  10. windows游戏编程了解消息事件模型

    本系列文章由jadeshu编写,转载请注明出处.http://blog.csdn.net/jadeshu/article/details/22309265 作者:jadeshu   邮箱: jades ...