div.example { background-color: rgba(229, 236, 243, 1); color: rgba(0, 0, 0, 1); padding: 0.5em; margin: 1em 2em 1em 1em }
div.warning { border: 1px solid rgba(255, 0, 0, 1) }

在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

Location和Content-Location的更多相关文章

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

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

  2. window.location.href = window.location.href 跳转无反应 a 超链接 onclick 点击跳转无反应

    错误写法 , 主要是在 href="#"这里 <a href="#" id="send" onclick="return b ...

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

    location.href 和 window.location.href 区别: 1.location.href 可以直接跳转其他地址(不属于本项目) 也可以跳转本项目中的 2.window.loca ...

  4. JS中 window.location 与window.location.href的区别

    疑惑:window.location='url'  与window.lcoation.href='url'效果一样,都会跳转到新页面,区别在哪?查得的资料如下: 1:window.location是页 ...

  5. js中的 window.location、document.location、document.URL 对像的区别(转载)

    原文:http://www.cr173.com/html/18417_1.html 当我们需要对html网页进行转向的时候或是读取当前网页的时候可以用到下面三个对像: window.location. ...

  6. 关于js中window.location.href,location.href,parent.location.href,top.location.href的用法与区别(跳出iframe方法)

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

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

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

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

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

  9. javascript:location.reload()和location.replace()的区别,及对图片缓存的影响。

    有段时间没有清理IE的临时文件(缓存文件),在我清理的时候,我突然发现一个问题. 我打开的一个网站,图片默认缓存一个月的,但我发现,当我上传图片或删除图片之后,图片重新缓存,也就意味着,在我上传新图片 ...

  10. One difference between AngularJS' $location and window.location

    Recenently, I encountered a problem. Client side code is: $http({ url: "/api/runtimelicense&quo ...

随机推荐

  1. JAVA递归算法及经典递归例子 对于这个汉诺塔问题

    前言:递归(recursion):递归满足2个条件 1)有反复执行的过程(调用自身) 2)有跳出反复执行过程的条件(递归出口) 第一题:汉诺塔 对于这个汉诺塔问题,在写递归时,我们只需要确定两个条件: ...

  2. JavaScript获取页面元素方法

  3. 对象、对象监视器、同步队列、执行线程关系(synchronized的实现细节或原理)

    synchronized在使用的时候底层细节你了解吗,相信很多同学对细节很少关注:比如竞争失败了的线程怎么安置,每个对象的监视器,线程执行synchronized时,其实是获取对象的监视器才能进入同步 ...

  4. 远程控制卡 使用ipmitools设置ipmi

    远程控制卡 使用ipmitools设置ipmi 使用DELL的远程控制卡可以方便的管理服务器 在CentOS中可以使用ipmitools管理 IPMI( Intelligent Platform Ma ...

  5. SpringBoot框架中解决日期展示问题

    解决日期展示问题(返回的json中日期的格式是:"birthday":"1988-08-07T15:00:00.000+0000");需要转化成指定的格式(年月 ...

  6. Inno Step软件安装包制作教程

    Inno setup制作软件安装包教程 1,Inno Setup介绍 Inno Setup 是一个免费的安装制作软件,小巧.简便.精美是其最大特点,支持pascal脚本,能快速制作出标准Windows ...

  7. python函数----名称空间和作用域

    一 名称空间 名称空间即存放名字与对象映射/绑定关系的地方. 对于x=3,Python会申请内存空间存放对象3,然后将名字x与3的绑定关系存放于名称空间中,del x表示清除该绑定关系. ​在程序执行 ...

  8. IntelliJ IDEA实用插件

    Free MyBatis plugin 插件效果 Save Actions 插件设置 勾选后Ctrl + S就会执行格式化操作,等价于格式化快捷键Alt + Ctrl + L

  9. Linux设置系统时区

    https://www.xlsys.cn/1741.html 如果你的 Linux 系统时区配置不正确,必需要手动调整到正确的当地时区.NTP 对时间的同步处理只计算当地时间与 UTC 时间的偏移量, ...

  10. 查找Command

    Find [路径] [匹配表达式] -name filename : 查找指定名称的文件 -user username: 查找属于指定用户的文件 -group grpname: 查找属于指定组的文件 ...