【HTTP】Web服务器和HTTP的协作&HTTP首部
用单台虚拟主机实现多个域名
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首部的更多相关文章
- 第五章、web服务器
一.web服务器 Web服务器就是整个万维网的骨干,广义上来说Web服务器既可以用来表示Web服务器的软件,也可以用来表示提供Web页面的特定设备和计算机.我们在网络上获取的所以资源,都需要有服务器来 ...
- 前端学HTTP之WEB服务器
前面的话 Web服务器每天会分发出数以亿计的Web页面,它是万维网的骨干.本文主要介绍WEB服务器的相关内容 总括 Web服务器会对HTTP请求进行处理并提供响应.术语“Web服务器”可以用来表示We ...
- HTTP之Web服务器是如何进行工作的!
Web服务器是如何进行工作的 ====================文章摘自<HTTP权威指南>====================== 1. 建立连接—接收一个客户端的连接,或者 ...
- 图解HTTP权威指南(三)| Web服务器对HTTP请求的处理和响应
作者简介 李先生(Lemon),高级运维工程师(自称),SRE专家(目标),梦想在35岁买一辆保时捷.喜欢钻研底层技术,认为底层基础才是王道.一切新技术都离不开操作系统(CPU.内存.磁盘).网络 ...
- 与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 站 ...
随机推荐
- python(os 模块)
1.os.name 输出字符串指示正在使用的平台.如果是window 则用'nt'表示,对于Linux/Unix用户,它是'posix' import os print(os.name) #结果如下 ...
- JavaScript 浅析数组对象与类数组对象
数组(Array对象) 数组的操作 创建数组方法 添加与修改数组元素 删除数组元素 使用数组元素 遍历数组元素 多维数组 数组相关的函数 concat() join() pop() push() sh ...
- Java常用关键字总结
1.abstract abstract修饰类,表示抽象的意思,抽象类可以含有非抽象变量和成员变量,也可以有普通方法和构造方法,但是不能被实例化(接口),但是可以被子类继承. public abstra ...
- 5G新基建到来,图扑推出智慧路灯三维可视化方案
前言 作为智慧城市的重要组成部分,智慧灯杆管理系统采用信息化.数字化手段,把路灯及城市景观照明等各种不同对象的监控和数据采集及处理融于一体, 为城市管理者进行城市管理.进行科学决策提供了强有力的手段. ...
- Day_09【常用API】扩展案例8_计算字符'j'和字符串'java'在字符串中出现的次数
需求说明 定义如下字符串: String str = "javajfiewjavajfiowfjavagkljjava"; 请分别定义方法统计出: 1.字符串中:字符j的数量 2. ...
- python语法学习第五天--函数(2)
命名空间: 命名空间(Namespace)是从名称到对象的映射,大部分的命名空间都是通过 Python 字典来实现的. 命名空间提供了在项目中避免名字冲突的一种方法.各个命名空间是独立的,没有任何关系 ...
- acm的一些头文件和调试代码
个人觉得单步调试麻烦且费时间,所以我两年时间里F4+watch基本没怎么用过,但由于"查看变量的值"这个需求总是存在的,并且调试时通常需要显示很多东西,printf写起来又比较蛋疼 ...
- vue面试常遇到的面试题
最近面试了好几家公司,总结一下经常被问到的面试题. 首先呢,一开始先来一个自我介绍,没啥好说的. 接下来就是考验你vue技术的问题了 一些常见的面试题 vue的生命周期 一共有八个阶段,分别为创建前后 ...
- Zookeeper入门一篇就够了
谈点分布式 什么是分布式呢? 起初,我们的应用流量比较小,所有东西全部部署在一个服务器,比如全部丢给一个tomcat来处理,顶多做一个tomcat的多节点部署多分,再挂一台Nginx做一下负载均衡就O ...
- Netty源码死磕一(netty线程模型及EventLoop机制)
引言 好久没有写博客了,近期准备把Netty源码啃一遍.在这之前本想直接看源码,但是看到后面发现其实效率不高, 有些概念还是有必要回头再细啃的,特别是其线程模型以及EventLoop的概念. 当然在开 ...