http:内容协商,面向对象

时间:2015-03-06 21:45:54

标签: http

我正在阅读关于HTTP的内容,我对其内容协商问题有疑问。和面向对象的'特征

据说当HTTP服务器能够发送单个资源的多个表示时,内容协商用于决定发送哪个表示。在实践中,这将是一个什么样的例子?我无法弄清楚单个资源的多重表示会出现什么情况,因为我只是输入一个以http开头的URL,并且该URL唯一地标识了一个资源?

我也在某处读到它说http是"面向对象",这是什么意思?

谢谢

2 个答案:

答案 0 :(得分:1)

我不知道"面向对象"是什么意思?与HTTP有关。这是编程语言的术语。

当您键入URL时,这不是发送到Web服务器的唯一内容。浏览器还添加了许多标题。这些可以从计算机的语言环境(本地化语言和格式设置)和其他约束来计算。内容协商标题采用的形式(q =质量级别):

`Accept-<aspect>: option1; q=<value1>, option2; q=<value2>`

如:

Accept-Language: de; q=1.0, en; q=0.5

含义:我更喜欢你的德语页面,但英语是第二选择。

通过这种方式,来自世界各地的用户可以访问Google.com并使用其母语获取搜索页面。

(借鉴:http://en.wikipedia.org/wiki/Content_negotiation

答案 1 :(得分:0)

我参与过的项目根据要求提供了几种不同类型的回复。例如,给定URL(虚构和说明性)http://example.com/catalog/item/23956,我可能希望相同的路由映射到我的项目的JSON表示,到提供项目详细信息的HTML页面,甚至是pdf,取决于要求。

请求包含Accept标头,例如,可能看起来像text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8,指定它需要html,xhtml或xml。

其他标题包括Accept-Language,指定首选的语言,以及Accept-Encoding,其中包括可以让服务器知道客户端能够解压缩发送给它的数据(例如gzip压缩)

设计良好的Web服务器可以根据请求的内容类型更改其响应,而不仅仅需要路由中的某种标识符(例如,以.htm.pdf结尾)