Http系列:内容协商与资源表述

前言:

HTTP协议是超文本传输协议的缩写,英文是Hyper Text Transfer Protocol。超文本就是一种资源的表述,它(HTML)是从WEB服务器传输到本地浏览器用于展现。
restful架构,它是http设计师所遵循的架构。全称为:REpresentational State Transfer,翻译过来就是:表现层状态转移。用@Ivony老师的一句话归纳就是:html

URL定位资源,用HTTP动词(GET,POST,DELETE,DETC)描述操做。git

它也是在描述资源状态的一种转移。因为一种资源有着多种状态,因此客户端在接收一种资源的转移时是须要进行协商的。好比在中国访问一个url时是接收的资源多是中文的,而在其余国家访问同一个url时得到的资源多是他们国家的语言。github

内容协商

每一个URL指向的资源能够是任何事物,能够有多种不一样的表述,例如一份文档能够有不一样语言的翻译、不一样的媒体格式、能够针对不一样的浏览器提供不一样的压缩编码等web

内容协商的两种方式

  • Proactive 主动式内容协商:指由客户端如今请求头部中提出须要的表述形式,而服务器根据这些请求头部提供特定的representation表述。
    举例:

Accept-Language:en表示客户端要求URI是中文的;
Accept-Encoding:br表示客户端能够接受br类型的压缩方式。算法

而服务端接收到客户端的要求后,会返回符合要求的响应。浏览器

  • Reactive 响应式内容协商:指服务器返回300Multiple Choices或者406 Not Acceptable,由客户端选择一种表述URI使用。
    举例:

    客户端将要求发给服务器,服务器以为本身不能太武断,因而经过300响应码返回了一个列表给客户端,供客户端选择。
    客户端再从返回的列表中,再次选择一个URL,好比URLe。再次访问服务器,服务器返回正确响应。

常见的协商要素

  • 质量因子q:内容的质量、可接受类型的优先级
    一、内容质量。举例,客户端发起一个图片的请求,这个图片只供快速浏览用的,那么就能够作很是高的压缩比,这时的质量q就能够比较低。若是这个图片用做医学的,那么q就比较大,由于不能容忍医用照片模糊以损失大量的细节。
    二、可接受类型的优先级。举例:有一个URI即支持中文,又支持英文。可是但愿优先显示中文,就能用q来表示。服务器

  • 媒体资源的MIME类型及质量因子
    一、Accept: text/html, application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    二、Axxept: text/html, application/xhtml+xml,application/xml;1=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3restful

  • 内容编码:主要指压缩算法
    Accept-Encoding: gzip. deflate, br架构

  • 表述语言
    一、Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
    二、Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2app

资源表述的元数据头部

  • 媒体类型、编码
    Content-Type: text/html; chareset=utf-8
  • 内容编码
    Content-Encoding: gzip
  • 语言 Content-Language: de-DE, en-CA

总结

内容协商将决定服务器端生成不一样的HTTP响应体传输给客户端。

备注

更多文章请移步楼主github,若是喜欢请点一下star,对做者也是一种鼓励

相关文章
相关标签/搜索