与http协作的web服务器
1、虚拟主机
一台web服务器可以搭建多个独立域名的web网站,也可以作为通信线路上的中转服务器提升传输效率。比如web托管服务供应商可以用一台服务器为多个不同域名的客户提供服务,这是利用了虚拟主机(virtual host,又称虚拟服务器)的功能。在发送http请求时,必须在Host首部内完整指定主机名或域名的URI,以确定要请求的web网站。
2、代理
通信数据转发程序:代理、网关、隧道、中继。
如下图,转发“客户端”和“服务器”之间的数据,使用代理服务器可以利用其缓存技术减少网络带宽流量,也可以控制内部对特定网站的访问。每次通过代理服务器转发请求或响应时,会追加写入via首部信息。代理不改变请求的URI,它直接发送给前方的目标服务器。转发时不对报文做任何加工则为透明代理,否则为非透明代理。
代理服务器或客户端本地保存的资源副本称为缓存,缓存服务器是代理服务器的一种。即使存在缓存,也会因为缓存的有效期、客户端的要求等因素,向服务器确认资源的有效性。
3、网关
网关工作机制与代理类似,但网关提供了http协议和其它协议之间的转换。可以将网关可以分为“协议网关”和“资源网关”。
“协议网关”(如下图)主要有:http/ftp输入转换网关、http/pop网关、https/http安全加速器网关(通常作为拦截网关或反向代理使用,这种网关通常都包含专用的解密硬件,其解密速度比普通的https服务器要快,这样也可以减轻web服务器的负荷,网关与web服务器之间的网络应该确保是安全的,比如是受保护的内部LAN)、http/https输入安全网关(一个组织可以通过网关对普通的http请求加密,以提供额外的隐私和安全保护)。
资源网关主要有“数据库网关”和“应用程序服务器”(如下图)。数据库网关:客户端通过http协议向服务器发送请求,当请求数据库资源的时候服务器与网关进行交互以获取资源,网关可以连接数据库,向数据库发送查询语句。应用程序服务器:将目标服务器和网关结合在一起的服务器,应用程序服务器(作为目标服务器)与客户端通过http通信,(作为网关)并与服务器端的应用程序相连。通用网关接口(Common Gateway Interface, CGI)是一个流行的应用程序网关API,CGI在Web上广泛用于数据库査询、信用卡结算处理、动态HTML等任务,CGI应用程序独立于服务器,几乎可以用任意语言来实现。
4、隧道
Web隧道允许用户通过HTTP连接发送非HTTP流量,这样就可以在HTTP上捎带其他协议数据了。使用Web隧道最常见的原因就是要在HTTP连接中嵌入非HTTP流量,这样,这类流量就可以穿过只允许Web流量通过的防火墙了。HTTP 隧道的一种常见用途是通过 HTTP 连接承载加密的安全套接字层(SSL,Secure Sockets Layer) 流量, 这样 SSL 流量就可以穿过只允许 Web 流量通过的防火墙了。
比如,在一个网络中,防火墙禁止端口443上的连接,因此网络中的用户无法访问使用HTTPS协议的网站。但是,防火墙允许端口80上的连接。网络中的用户想要访问该服务器有两种方法:一种是使用http/https输入安全网关,一种是通过HTTP隧道。使用网关的方法有三个缺点:客户端到网关之间的连接是普通的非安全HTTP;客户端无法对远端服务器执行SSL客户端认证;网关要支持完整的SSL实现。使用隧道的话SSL流量被封装到一条HTTP报文中,并通过HTTP端口80上的连接发送, 最后被解封为普通的SSL流量。 使用隧道协议的流程是客户端发送一条CONNECT请求给网关请求打开一条TCP连接(在这里,打开的是到目标主机的标准SSL端口443的连接),一旦建立了TCP连接,网关就会发送一条HTTP 200 Connection Established响应来通知客户端;此时,隧道就建立起来了。如下图:
前面描述了一条SSL隧道,其中的SSL流量是在一条HTTP连接上发送的,通过CONNECT方法可以与使用任意协议的任意服务器建立TCP连接。一些喜欢捣乱的用户可能会通过本打算用于SSL的隧道越过公司防火墙传递因特网游戏流量,而恶意用户可能会用隧道打开Telnet会话,或用隧道绕过公司的E-mail扫描器来发送E-mail。为了降低对隧道的滥用,网关应该只为特定的知名端口,比如HTTPS的端口443打开隧道。
5、中继
中继负责处理HTTP中建立连接的部分,然后对字节进行盲转发。某些简单盲中继实现中存在的一个常见问题是,它们无法正确处理Connection首部,所以有潜在的挂起keep-alive连接的可能。
如下图,Web客户端向中继发送了一条包含Connection: Keep-Alive首部的报文,如果可能的话要求建立一条keep-alive连接。客户端等待响应,以确定它要求建立keep-alive信道的请求是否被认可了。中继收到了这条HTTP请求,但它并不理解Connection首部,因此会将报文一字不漏地沿着链路传递给服务器。但Connection首部是个逐跳首部,只适用于单条传输链路,是不应该沿着链路传送下去的。这会导致客户端和服务器建立了长连接后中继器却不知道,它会在收到原始服务器的所有数据后转发给客户端,然后等待原始服务器关闭连接,这样,中继就会挂起,客户端再次在这条连接上发送请求的话,中继不会去理睬。
要为某个特定目标构建简单的HTTP中继,一定要特别注意其使用方法。对任何部署来说,都要非常认真地考虑使用真正的、完全遵循HTTP的代理服务器。
以上内容转载和参考自:代理、网关与隧道,https://blog.csdn.net/sjailjq/article/details/82287345
前端学HTTP之网关、隧道和中继,https://www.cnblogs.com/xiaohuochai/p/6180941.html
与http协作的web服务器的更多相关文章
- 与http协作的web服务器、http首部(第五章、第六章)
第五章 与http协作的web服务器 1.用单台虚拟主机实现多个域名 通过域名访问主机,经过DNS解析成ip地址,反向代理,可以代理多台服务器,正向代理则相反,代理客户端 2.通信数据转化程序:代理. ...
- 第五章 与HTTP协作的Web服务器
第五章 与HTTP协作的Web服务器 一台Web服务器可搭建多个独立域名的Web网站,也可以作为通信路径上的中转服务器提升传输效率. 1.用单台虚拟机实现多个域名 HTTP/1.1规范允许一台HTT ...
- 读《图解HTTP》有感-(与HTTP协作的WEB服务器)
写在前面 Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以向浏览器等Web客户端提供文档: 一台web服务器可以搭建多个独立域名的web网站,也可以作为通信路径(路由)上的中 ...
- HTTP协议图--与 HTTP 协作的 Web 服务器
HTTP 通信时,除客户端和服务器外,还有一些用于协助通信的应用程序.如下列出比较重要的几个:代理.缓存.网关.隧道.Agent 代理. 1.代理 代理 HTTP 代理服务器是 Web 安全.应用 ...
- 图解HTTP总结(5)——与HTTP协作的Web服务器
一台 Web 服务器可搭建多个独立域名的 Web 网站, 也可作为通信路径上的中转服务器提升传输效率. 用单台虚拟主机实现多个域名 HTTP/1.1 规范允许一台 HTTP 服务器搭建多个 Web 站 ...
- 与http协作的web服务器--代理、网关、隧道
一台服务器可以搭建多个web站点 代理: 接受客户端发送的请求,转发给其他服务器,然后接受服务器的返回结果(响应)再返回给客户端.每次经过代理服务器,就会追加写入via首部信息. 按两种基准分类.一种 ...
- 与HTTP协作的Web服务器——代理、网关、隧道
1.虚拟主机 (1)HTTP/1.1规范允许一台HTTP服务器搭建多个Web站点: (2)在互联网上,域名通过DNS服务映射到IP地址(域名解析)之后访问目标网站,即当请求发送到服务器时,已经是以IP ...
- 图解 HTTP 笔记(五)——Web 服务器
该章的主要内容是讲解与 HTTP 协作的 Web 服务器 一.用单台虚拟主机实现多个域名 基于虚拟主机的功能,可以只使用一台物理机实现多个域名的网站部署. 在互联网上,域名通过 DNS 域名解析系统可 ...
- 【HTTP】Web服务器和HTTP的协作&HTTP首部
用单台虚拟主机实现多个域名 Web服务器可以搭建多个独立域名的Web网站,也可以作为通信路径上的中转服务器提升效率. HTTP/1.1规范允许一台HTTP服务器搭建多个Web站点,提供Web托管服务的 ...
随机推荐
- Swift字符串截取与Range使用
1.String.Index String.Index表示一个位置,使用String与String.Index可以获取该位置的Character let str = "123456789&q ...
- String类型不属于八种基本类型
String不属于8种基本数据类型,String是一个对象.因为对象的默认值是null,所以String的默认值也是null:但它又是一种特殊的对象,有其它对象没有的一些特性. new String( ...
- 解决TeamViewer提示商业用途
安装此插件 提取码:i8o3
- quartz详解3:quartz数据库集群-锁机制
http://blog.itpub.NET/11627468/viewspace-1764753/ 一.quartz数据库锁 其中,QRTZ_LOCKS就是Quartz集群实现同步机制的行锁表,其表结 ...
- 启动mysql遇到问题Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
在mysql的启动过程中有时会遇到下述错误 Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) 请问mys ...
- 中后缀表达式/洛谷P1175 表达式的转换
P1175 表达式的转换 思路:先用栈转成中缀表达式,再用栈进行计算.要输出过程,因此计算一次输出一次,但是栈没有迭代器,不好用,换成vector(可以pop_back).虽然表达式求值也可以这么做, ...
- redis常用命令--zsets
zsets常用命令: zadd key score1 mb1 [score2 mb2....]:像key中添加元素和这个元素的分数,如果元素已经存在,则替换分数. zscore key mb :获取k ...
- Thread--CountDownLatch & CyclicBarrier
参考:http://www.importnew.com/21889.html CountDownLatch countDown() 方法执行完只是计数器减一, 并不会阻塞当前运行线程的的后续代码执行. ...
- 18 12 23 html 基本学习
一个html的基本结构如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...
- KVM以及其虚拟机安装
一.KVM安装 安装:yum -y install kvm python-virtinst libvirt tunctl bridge-utils virt-manager qemu-kvm-tool ...