在httpd的反向代理中,ProxyPass 的主要作用就是修改Content-Location和Location的内容。对这两个首部的含义做一些说明。

内容协商(content negotiation)

为了说明Content-Location的含义,必须先明白http的内容协商机制。

考虑支持多语言的服务器端:一个相同的URL可以返回不同语言版本的文档, 其实服务器端就是利用内容协商来识别客户端的,具体可以参见《http权威指南》第17章。  在请求的头信息中,包含有Accept开头的内容协商首部,服务器端可以根据这些内容协商首部来判断出客户端的需求。 除此之外,服务器端还可以根据诸如User-Agent这种首部信息进行推测,例如老版本的浏览器可能不支持JavaScript,如果User-Agent代表老版本的浏览器,那么服务器可以向其响应不包含JavaScript的文档。

在上面的请求头部中,我们看到了多个内容协商首部。 在Accept-Languoge中我们还发现了q值,这叫做质量值。 考虑这种情况,假如服务器端仅仅拥有中文和英文两个版本,并没有日文,但是客户端却最希望能请求到日文内容,这样服务器端就无法提供合适的文档给它了。 而q值的意义就是让客户端可以提供多个候选方案,q值(0.0-1.0)越大表明优先级越高,例如上图中表明:优先选择日文,如果没有日文优先选择en-US,没有en-US,那就选择en。

上面这种内容协商机制叫做服务器端协商。 为了减轻服务器端的压力,我们可以使用中间代理来代替服务器端来与客户端协商,这叫做透明协商。 中间代理如果可以代替服务器,那么代理必须有能力可以完全像服务器那样处理协商逻辑。对于每一种不同的请求服务器端响应的不同版本的文档,我们可以称作是一个 变体。 代理需要有能力根据每一个请求的信息,从缓存的副本中选择 或者 向服务器请求(当副本中没有对应的时候),得到准确的变体。 从上面服务器端协商的讨论中我们知道除了内容协商首部外,服务器能够根据其他首部(例如user-agent)来识别客户端,从而响应不同的变体。 为了让代理具有完全相同的处理协商逻辑的能力,服务器在响应代理的时候,必须告诉代理除了内容协商首部外还根据什么信息处理协商逻辑了,这个首部叫做vary,例如vary:User-Agent。

值得注意的是 协商首部是客户端请求中的头信息,用来向服务器端说明自身的请求特性;而vary是服务器端响应中的头信息,主要作用是用来帮助中间代理处理与客户端的协商逻辑。 

Content-Location和Content

Content-Location首部表明返回数据的另一种位置。主要的使用场景是用来表明作为内容协商结果响应的资源的URL。

Location和Content-Location是不同的:Location表明重定向的目标(302),而Content-Location表明无需进行进一步的内容协商就可以直接访问的资源的URL,例如英文环境客户端发送 url_file_a  可以得到文件fileA,那么假设响应中Content-Location中内容为 url_file_a_en ,则这个url可以直接访问到对应的那个英文文件,此时其实就不存在内容协商了。 Location是一个与响应相关的头信息,而Content-Location是与返回的内容主体相关的头信息。

参考:

《http权威zhinan》 第17章

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Content-Location

转载于:https://www.cnblogs.com/zh1164/p/6531857.html

Location和Content-Location相关推荐

  1. 解决安卓微信浏览器中location.reload 或者 location.href失效的问题

    解决安卓微信浏览器中location.reload 或者 location.href失效的问题 参考文章: (1)解决安卓微信浏览器中location.reload 或者 location.href失 ...

  2. 关于js中window.location.href、location.href 等如何跳转

    关于js中"window.location.href"."location.href"."parent.location.href".&qu ...

  3. js中window.location.href,location.href,parent.location.href,top.location.href的用法

    "window.location.href"."location.href"是本页面跳转 "parent.location.href"是上一 ...

  4. 关于js中window.location.href,location.href,parent.location.href,top.location.href的使用方法

    关于js中"window.location.href"."location.href"."parent.location.href".&qu ...

  5. location.host与location.hostname和跨浏览器的兼容性?

    本文翻译自:location.host vs location.hostname and cross-browser compatibility? Which one of these is the ...

  6. window.location和document.location的区别分析

    用户不能改变document.location(因为这是当前显示文档的位置).但是,可以改变window.location (用其它文档取代当前文档)window.location本身也是一个对象,而 ...

  7. 关于js中window.location.href、location.href、parent.location.href、top.location.href的用法...

    关于js中"window.location.href"."location.href"."parent.location.href".&qu ...

  8. php location.href,window.location.href的用法(动态输出跳转)

    javascript中的location.href有很多种用法,主要如下. self.location.href="/url" 当前页面打开URL页面 location.href= ...

  9. 关于js中window.location.href,location.href,parent.location.href,top.location.href的用法

    "window.location.href"."location.href"是本页面跳转. "parent.location.href" 是 ...

  10. document.location和window.location有什么区别就是

    用户不能改变document.location(因为这是当前显示文档的位置).但是,可以改变window.location (用其它文档取代当前文档),window.location本身也是一个对象, ...

最新文章

  1. golang不编译.html,golang之条件编译
  2. 爬虫监控1000家企业新闻动态
  3. 学生选课管理系统c语言程序报告,c语言课程设计学生选课管理系统实验报告.doc...
  4. 一个月后的2016产品汪温馨提示
  5. mac无法访问samba共享 提示输入用户名密码
  6. 电商美工中秋节电商淘宝页面设计模板素材,临摹参考框架
  7. java 单链表反转_Java实现单链表翻转详解
  8. hibernate4中主要的配置文件配置
  9. Android 面(被)试(锤)现场还原~
  10. Maven无法下载com.oracle:ojdbc14:jar解决方法
  11. 基于java的校园兼职管理系统_基于JAVA WEB的大学生兼职管理系统的分析与设计
  12. android 获取经纬度的三种方法,Android简单获取经纬度的方法
  13. 靶机渗透练习06-driftingblues6 (利用脏牛提权)
  14. 计算机备注用if函数怎么算,Excel中IF函数使用操作的设置技巧
  15. 第62页的gtk+编程例子——菜单
  16. 怎样制作中阿拉伯文网页
  17. 黑马程序员————小牛皮糖学习笔记————其他对象Sytem-Runtime-Date-Math
  18. Titanic 泰坦尼克数据集 特征工程 机器学习建模
  19. 计算Grassmannian geodesic
  20. Vue中components几个组件

热门文章

  1. 微软正式发布Windows 10 2020年10月更新
  2. 智能算法把奥巴马识别成白人,AI也学会歧视了?
  3. 央视曝光:刷单实为非法商业模式 步步设置全是套路
  4. OJ系列之---单词倒排
  5. labview 串口通信开发基础详解
  6. matlab中fminunc函数使用方法,[分享]无约束非线性规划函数\fminunc函数使用方法(MATLAB)...
  7. 使用c语言读写netcdf文件,[原][c][netcdf]读取函数
  8. 马走日poj java超时_简单搜索poj 2243(水
  9. oracle 触发器 upsert,数据库管理员
  10. 025_CSS框模型概述