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

Web服务器可以搭建多个独立域名的Web网站,也可以作为通信路径上的中转服务器提升效率。

HTTP/1.1规范允许一台HTTP服务器搭建多个Web站点,提供Web托管服务的供应商,可以用一台服务器为多为客户服务,也可以以每位客户的域名允许各自不同的网站。

物理层面只有一台服务器,只要使用虚拟主机,即可相当于拥有多台服务器。

客户端通过主机名和域名访问服务器,域名通过DNS服务映射到IP地址后访问目标网站。所以当请求发送到服务器时,已经是以IP地址形式访问了。【如果一台服务器托管了多个域名,收到请求后需要直到访问哪个域名】

例如:www.web1.com 和 www.web2.com部署在一台服务器上,DNS解析后,二者的IP都是服务器的IP:XXX.XXX.XXX.XXX。

当IP地址相同时,由于虚拟主机可以寄存多个不同主机名或域名的web网站,所以发送HTTP请求时,必须在host首部内完整的指定主机名或域名

通信数据转发

HTTP通信中还有一些用于通信转发的应用程序:代理、网关、隧道。可以配合服务器工作。

代理:有转发功能的应用程序,接收客户端的请求,转发给服务端。接收服务端响应,转发给客户端。

网关:转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,像源服务器一样地对请求进行处理。

隧道:相隔很远的客户端和服务器两者之间进行中转,保持双方通信连接的应用程序。

一、代理

基本行为:接收客户端请求,转发给其他服务器。代理不改变URI,直接发送给持有资源的服务器(源服务器)。服务器的响应经由代理发送给客户端。

可以级联多台代理服务器,转发时需要附加Via首部字段,标记经过的主机信息。

使用代理的优势:利用缓存技术减少网络带宽流量。组织内部针对特定网络的访问控制,获取访问日志。

代理的分类:是否使用缓存、是否会修改报文。

缓存代理:代理在转发响应时,缓存代理预先将资源的副本保存在代理服务器上。下次接收到相同请求时,就可以不从源服务器获取资源,用缓存的资源作为返回。

透明代理:转发请求或响应时,不对报文做任何加工。否则就是非透明代理。

二、网关

网关的优势:

1. 可以使通信线路上的服务器提供非HTTP协议服务。

2. 可以提高通信的安全性,因为客户端和网关之间的通信线路可以加密,确保连接的安全。例如:网关可以连接数据库,使用SQL查询。网关可以和信用卡结算系统联动。

三、隧道

隧道可以按要求建立起一条和其他服务器的通信线路。使用SSL等加密手段进行通信。

隧道的目的:确保客户端和服务端进行安全的通信。

隧道不会解析HTTP协议,请求保持原样中转给服务器,在通信双方断开连接后结束。

四、资源的缓存

代理服务器或客户端的本地磁盘可以保存资源的副本,也就是缓存,利用缓存可以减少对服务器的访问,节省通信流量和通信时间。

当缓存被判定为过期后,会向源服务器确认资源的有效性,如果失效的话,会向源服务器请求新的资源。

HTTP首部

一、HTTP报文首部

HTTP的结构 = 报文首部+空行+报文主体

报文首部:客户端和服务端通信的重要信息

报文主体:用户信息/资源信息

HTTP请求报文

报文首部 = 请求行+请求首部字段+通用首部字段+实体首都字段+else

请求行 = 请求方式 + URI + HTTP版本

HTTP首部字段 = 请求首部字段+通用首部字段+实体首都字段

HTTP响应报文

报文首部 = 状态行+响应首部字段+ 通用首部字段+实体首都字段+else

状态行 = HTTP版本+状态码

二、HTTP首部字段

首部字段:提供报文主体大小、使用的语言、认证信息等内容

首部字段的结构 —— 首部字段名:字段值

例如:Content-Type: text/html   Keep-Alive: timeout=15, max=100

1. 通用首部字段:请求报文和响应报文都会使用

2. 请求首部字段:请求报文中使用,补充请求的附加内容、客户端信息、响应内容相关优先级信息。

3. 响应首部字段:响应报文中使用,补充响应的附加信息,要求客户端附加的额外的内容信息。

4. 实体首部字段:补充资源内容更新时间等和实体相关的信息。

三、HTTP/1.1 通用首部字段

1. Cache-Control

用于操作缓存的工作机制。

Cache-Control: private, max-age=0, no-cache

缓存请求指令
指令 参数 说明
no-cache / 必须向源服务器验证
no-store / 不缓存请求或响应的任何内容
max-age=?[s] 必需 响应的最大时间
max-stale=?[s] 可省略 接收已经过期的响应
min-fresh=?[s] 必需 期望在指定时间内的响应仍有效
no-transform / 代理不可更改媒体类型
only-if-cached / 从缓存获取资源
cache-extension - 新指令标记
缓存响应指令
public / 可以向任意方提供响应的缓存
private 可省 仅向特定用户返回响应
no-cache 可省 缓存前必须先确认有效性
no-store / 不缓存
no-transform / 代理不可更改媒体类型
must-revalidate / 可缓存但必须向源服务器确认
proxy-revalidate / 要求中间缓存服务器对缓存的响应有效性进行确认
max-age=[s] 必需 响应的最大值
s-maxage=[s] 必需 公共缓存服务器响应的最大值
cache-extension - 新指令标记

2. 表明是否能缓存的指令

public:表明其他用户也可以利用缓存

private:只有特定用户才能使用缓存

no-cache:防止从缓存中返回过期的资源。客户端设置no-cache则不会接收缓存过的响应,缓存服务器要把请求转发给服务端。服务端设置no-cache则缓存服务器不能对资源进行缓存,也就不需要验证缓存服务器资源的有效性。

Cache-Control:no-cache=Location。客户端接收到有参的首部字段对应的响应报文后不能使用缓存。无参的首部字段可以使用缓存。

注意:no-cache不是不缓存,是不缓存过期的资源。no-store才是不缓存。

3. 指定缓存期限和认证的指令

s-maxage & max-age:前者只能用于供多位用户使用的公共缓存服务器。(一位用户没有任何作用)用了s-maxage会忽略Expires首部字段和max-age指令。

如果没有超期,则发送缓存,如果超期,则向源服务器验证。

min-fresh:要求缓存服务器返回至少还未过指定时间的缓存资源。超过的资源无法作为响应返回。

max-stale:可指示缓存资源,即使过期也照样接收。【有参数,在参数时间内,照样接收,无参数,永久照样接收】

only-if-cached:只在缓存服务器有缓存的时候才返回。没有响应的话返回504 Gateway Timeout

must-revalidate:代理会向源服务器再次验证即将返回的响应缓存目前是否有效。如果代理无法再次获取有效资源,返回504。该指令会忽略max-stale指令。

proxy-revalidate:缓存服务器必需再次验证缓存的有效性。

no-transform:不可以改变实体主体的媒体类型,防止缓存或代理压缩图片等操作。

4. Connection首部字段

作用:控制不再转发给代理的首部字段,管理持久连接。

HTTP/1.1默认持久连接,Connection:close可以断开连接。

HTTP/1.1之前非持久连接,所以在旧版本上持续连接需要指定Connection:Keep-alive

5. Date首部字段

表明创建HTTP报文的日期和时间

6. Pragma

作为HTTP/1.0的向后兼容 Pragma:no-cache

用于兼容不同的HTTP协议版本

7. Trailer

事先说明报文主体后面写了哪些首部字段。应用于HTTP/1.1版本分块传输编码时。

8. Transfer-Encoding

规定传输报文主体时采用的编码方式(HTTP/1.1只对分块传输编码有效)

9.  Upgrade

用于检测HTTP协议及其他协议是否可以使用更高的版本进行通信,参数值可以用来指定一个完全不同的通信协议。

10. Via

用于追踪客户端与服务端之间的请求和响应报文的传输路径。报文经过代理和网关时,会在首部字段Via中附加该服务器的信息,然后进行转发。

还可以避免请求回环的发生。

11. Warning

HTTP/1.1的warning是从HTTP/1.0的响应头部Retry-After演变过来的。会告知用户一些关于缓存的问题的警告。

警告码:

110:响应已过期

111:再验证失败,代理再验证资源有效性的时候,服务器访问出现问题

112:断开连接

113:试探性过期,响应的使用期超过24小时(有效缓存设定时间大于24小时时)

199:杂项警告:任意的警告内容

214:使用了转换,代理对内容编码或媒体类型执行了某些处理

299:持久杂项警告:任意的警告内容

四、请求首部字段

五、响应首部字段

六、实体首部字段

七、为Cookie服务的首部字段

八、其他首部字段

【HTTP】Web服务器和HTTP的协作&HTTP首部的更多相关文章

  1. 第五章、web服务器

    一.web服务器 Web服务器就是整个万维网的骨干,广义上来说Web服务器既可以用来表示Web服务器的软件,也可以用来表示提供Web页面的特定设备和计算机.我们在网络上获取的所以资源,都需要有服务器来 ...

  2. 前端学HTTP之WEB服务器

    前面的话 Web服务器每天会分发出数以亿计的Web页面,它是万维网的骨干.本文主要介绍WEB服务器的相关内容 总括 Web服务器会对HTTP请求进行处理并提供响应.术语“Web服务器”可以用来表示We ...

  3. HTTP之Web服务器是如何进行工作的!

    Web服务器是如何进行工作的 ====================文章摘自<HTTP权威指南>====================== 1.  建立连接—接收一个客户端的连接,或者 ...

  4. 图解HTTP权威指南(三)| Web服务器对HTTP请求的处理和响应

    作者简介   李先生(Lemon),高级运维工程师(自称),SRE专家(目标),梦想在35岁买一辆保时捷.喜欢钻研底层技术,认为底层基础才是王道.一切新技术都离不开操作系统(CPU.内存.磁盘).网络 ...

  5. 与http协作的web服务器、http首部(第五章、第六章)

    第五章 与http协作的web服务器 1.用单台虚拟主机实现多个域名 通过域名访问主机,经过DNS解析成ip地址,反向代理,可以代理多台服务器,正向代理则相反,代理客户端 2.通信数据转化程序:代理. ...

  6. 第五章 与HTTP协作的Web服务器

    第五章  与HTTP协作的Web服务器 一台Web服务器可搭建多个独立域名的Web网站,也可以作为通信路径上的中转服务器提升传输效率. 1.用单台虚拟机实现多个域名 HTTP/1.1规范允许一台HTT ...

  7. 读《图解HTTP》有感-(与HTTP协作的WEB服务器)

    写在前面 Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以向浏览器等Web客户端提供文档: 一台web服务器可以搭建多个独立域名的web网站,也可以作为通信路径(路由)上的中 ...

  8. HTTP协议图--与 HTTP 协作的 Web 服务器

    HTTP 通信时,除客户端和服务器外,还有一些用于协助通信的应用程序.如下列出比较重要的几个:代理.缓存.网关.隧道.Agent 代理. 1.代理   代理 HTTP 代理服务器是 Web 安全.应用 ...

  9. 图解HTTP总结(5)——与HTTP协作的Web服务器

    一台 Web 服务器可搭建多个独立域名的 Web 网站, 也可作为通信路径上的中转服务器提升传输效率. 用单台虚拟主机实现多个域名 HTTP/1.1 规范允许一台 HTTP 服务器搭建多个 Web 站 ...

随机推荐

  1. INTERVIEW #2

    吐槽下ZZ的面试安排:面试时间12:30不说了,周围没有饭店,中午就没吃饭...不像其他公司给每个人安排不同的面试时间,这样可以节约大家的时间,SPDB是把一大批人都安排在了12:30,而且面试是5个 ...

  2. 图论--网络流--最大流 HDU 3572 Task Schedule(限流建图,超级源汇)

    Problem Description Our geometry princess XMM has stoped her study in computational geometry to conc ...

  3. postman(断言)

    一.断言 1.Code is 200 断言状态码是200 2.contains string 断言respoonse body中包含string 3.json value check (检查JSON值 ...

  4. C++ 函数重载,函数模板和函数模板重载,选择哪一个?

    重载解析 在C++中,对于函数重载.函数模板和函数模板重载,C++需要有一个良好的策略,去选择调用哪一个函数定义(尤其是多个参数时),这个过程称为重载解析. (这个过程将会非常复杂,但愿不要遇到一定要 ...

  5. Pika源码学习--pika的通信和线程模型

    pika的线程模型有官方的wiki介绍https://github.com/Qihoo360/pika/wiki/pika-%E7%BA%BF%E7%A8%8B%E6%A8%A1%E5%9E%8B,这 ...

  6. nginx判定国家ip访问网站

    我们可以通过GeoIP模块和MaxMind免费数据库来实现.MaxMind具有新版本的数据库GeoLite2,它仅支持CSV和mmdb格式.可以支持mngx_http_geoip2_modulemdb ...

  7. 13_JavaScript基础入门(3)

    条件分支语句 条件分支语句,也叫作条件判断语句,就是根据某种条件执行某些语句,不执行某些语句. JS中有三种语法是可以表示条件分支的. 1.if--else-- 条件分支的主力语法,这个主力语法能够书 ...

  8. 【HBase】Java实现过滤器查询

    目录 概述 代码实现 rowKey过滤器RowFilter 列族过滤器FamilyFilter 列过滤器QualifierFilter 列值过滤器ValueFilter 专用过滤器 单列值过滤器 Si ...

  9. Adobe Reader XI 打开后“已停止工作”的解决办法

    搜了好多方法按照步骤做完,基本无用,试了以下方法搞定. 具体方法是: 把域名解析到本机. 打开 C:\Windows\System32\drivers\etc\hosts 添加 127.0.0.1 a ...

  10. STM32 基于 CubeMX配置GPIO点亮LED灯(超级详细+图文并茂)

    我是一个只会点灯的菜鸟: 相关文章 [STM32系列汇总]小白博主的STM32实战快速进阶之路(持续更新) 文章目录 相关文章 1 前言 2 理论分析 2.1 LED 原理 2.2 板载资料 2.3 ...