一台HTTP服务器可以搭建多个Web站点,相同的IP地址下,虚拟主机可以寄存多个不同主机名和域名的Web网站,因此在发送HTTP请求时,必须在Host首部内完整指定主机名或域名的URI
代理:一种有转发功能的应用程序,扮演了位于服务器和客户端中间人的角色,接受由客户端发送的请求并转发给服务器,同时也接收服务器返回的响应并转发给客户端。
网关:转发其他服务器通信数据的服务器,接受从客户端发送过来的请求时,它会想自己拥有资源的源服务器一样对请求进行处理。也可以由HTTP请求转化为其他通信协议,此外网关也能提高通信的完全性,可以在客户端和网关之间的通信线路上加密以确保连接的安全
隧道:是在相隔甚远的客户端和服务器之间进行中转,并保持双方通信连接的应用程序。使用SSL等加密手段进行通信。确保客户端能与服务器进行安全的通信
代理服务器:
代理服务器优势:利用缓存技术减少网络带宽的流量,组织内部针对特定网站的访问控制,以获取访问日志为主要目的
缓存:代理服务器或客户端本地磁盘内保持的资源副本,缓存服务器是代理服务器的一种。利用缓存可以避免多次从源服务器转发资源,因此客户端可以就近从缓存服务器上获取资源,而源服务器也不必多次处理相同的请求了。缓存存在一个有效期
HTTP报文首部
HTTP响应报文由HTTP版本,状态码,HTTP首部字段3部分:
首部字段是为了给浏览器和服务器提供报文主体大小,所使用的语言,认证信息等内容。
1.通用首部字段(General Header Fields):请求报文和响应报文两方都会使用的首部
2.请求首段字段(Request Header Fields):从客户端向服务端发送请求报文时使用的首部,补充了请求的附加内容,客户端信息,响应内容相关优先级等信息
3.响应首部字段(Response Header Fields):从服务器端向客户端返回响应报文时使用的首部,补充了响应的附加内容,也会要求客户端附加额外的内容信息
4.实体首部字段(Entity Header Fields):针对请求报文和响应报文的实体部分使用的首部,补充了资源内容更新时间等与实体有关的信息
首段字段结构:首部字段名和字段值构成的,中间使用冒号:分割
通用首部字段
请求首部字段
响应首部字段
实体首部字段
HTTP首部字段将定义成缓存代理和非缓存代理的行为
端到端首部(End-to-End Header):分在次类别中的首部会转发给请求/响应对应的最终接受目标,且必须保存在由缓存生成的响应中,另外规定它必须被转发
逐跳首部(Hop-by-hop Header):分在此类别中的首部只对单次转发有效,会因通过缓存或代理而不再转发,如果使用hop-by-hop首部,需要提供Connection首部字端
Connection
Keep-Alive
Proxy-Authenticate
Proxy-Authorization
Trailer
TE
Transfer-Encoding
Upgrade这八个都是逐跳首部(其他字段都是端到端字段)
cache-Control:控制缓存行为。
格式:Cache-Control:private(public 表示是否可以缓存), max-age=0, no-cache
缓存请求指令
缓存响应指令
Cache-Control中部分操作
Cache-Control:min-fresh=60(单位:秒):指令要求缓存服务器返回至少还未过指定时间的缓存资源
Cache-Control:max-stale=3600(秒):权限高于min-fresh,只要没过max-stale时间就可以被客户端接受响应,不指定时间就是永久
only-if-cached:表示客户端仅在缓存服务器本地缓存目标资源的情况下才会要求其返回,也就是要求缓存服务器不重新加载响应,也不会再次确认资源的有效性
must-revalidate:代理会向源服务器再次验证即将返回的响应缓存目前是否仍然有效,权限甚至比max-stale更高,直接忽视它
proxy-revalidate:要求所有的缓存服务器在接收到客户端带有该指令的请求返回响应之前,必须再次验证缓存的有效性
no-transform:无论是在请求还是在响应中,缓存都不能改变实体主体的媒体类型,防止缓存或代理压缩图片的操作
HTTP1.1警告码
请求首部字段
用于补充请求的附加信息,客户端信息,对响应内容相关的优先级等内容
Accept
可通知服务器,用户代理能够处理的媒体类型和媒体类型的相对优先级,优先级使用q=来额外表示权重值
Accept-Charset:用来通知服务器用户代理支持的字符集及字符集的相对优先顺序,用于内容协商机制的服务器驱动协商
格式:Accept-Charset: iso-8859-5, unicode-1-1;q=0.8
Accept-Encoding:用来告知服务器用户代理支持的内容编码及内容编码的优先级顺序
格式:Accept-Encoding: gzip, deflate
Accept-Language:告诉服务器用户代理能够处理的自然语言集
格式Accept-Language: zh-cn,zh;q=0.7,en-us,en;q=0.3
Authorization: 告知服务器用户代理的认证信息
格式:Authorization: Basic dWVub3NlbjpwYXNzd29yZA==
Host:告知服务器请求的资源所处的互联网主机名和端口号,必须被包含在请求内的首部字段
Proxy-Authorization:客户端和代理服务器之间的相互认证
Referer:告知服务器请求的原始资源的URI
User-Agent:用于传达浏览器的种类和用户代理名称等信息给服务器
格式:User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gec
响应首部字段
由服务器端向客户端返回响应报文中所使用的字段,用于补充响应的附加信息,服务器信息以及对客户端的附加要求等信息
Accept-Ranges: 用来告知客户端服务器是否能够处理范围请求以指定获取服务器端某个部分的资源
Age:告知客户端源服务器在多久之前创建了响应,字段值的单位为秒
ETag:客户端的实体标识,ETag有强弱之分,强ETag不论实体发生多么细微的变化都会该改变其值,而弱ETag只用于提示资源是否相同,只有资源发生了根本变化,产生差异才会改变ETag值
Location: http://www.usagidesign.jp/sample.html 使用首部字段可以将响应接收方引导至某个与请求URI位置不同的资源,几乎所有的浏览器在接收到包含首部字段Location的响应后,都会强制性地尝试对已提示的重定向资源访问。
Server:首部字段Server告诉客户端当前服务器上安装的HTTP服务器应用程序的信息,不单单会标出服务器上的软件应用名称,还有可能包括版本号和安装时启动的可选项
Vary:可对缓存进行控制
如果语言不同,则只能从源服务器端获取资源后才能作为响应返回
实体首部字段
实体首部字段是包含在请求报文和响应报文中的实体部分所使用的的首部,用户补充内容的更新时间等与实体相关的信息
Allow:用户通知客户端能够支持Request-URI指定资源的所有HTTP方法。
Content-Encoding:告知客户端服务器对实体的主体部分选用的内容编码方式,内容编码是指在不丢失实体信息的前提下所进行的压缩
Content-Location 表示的是报文主体返回资源对应的 URI
Content-Range:告知客户端作为响应返回的实体的那个部分符合范围请求
Expires:将资源失效的日期告知客户端
Last-Modified 指明资源最终修改的时间
为COOKIE服务的首部字段
Set-COOKIE字段属性和含义
其他首部字段
X-Frame-Options:用于控制网站内容再其他Web网站的Frame标签内的显示问题,主要目的是为了防止点击劫持攻击
X-XSS-Protection:针对XSS的一种策略,用于控制浏览器XSS防护机制的开关
DNT:Do Not Track的简称,意为拒绝个人信息被收集,是表示拒绝被精准广告追踪的一种方法
P3P:可以让Web网站上的个人隐私变成一种仅供程序可理解的形式,以达到保护用户隐私的目的