http协议_数据协商

http协议中,可以通过内容协商返回最合适的内容,例如根据浏览器的默认语言选择返回中文界面还是英文界面。

在客户端发送给服务端一个请求的时候,客户端可以声明该请求所期望获得的数据格式和数据相关的一些属性,服务端会根据客户端声明的请求做出判断并给出相应的结果

实现方式一:

客户端设置特定的 HTTP 首部字段,例如 Accept、Accept-Charset、Accept-Encoding、Accept-Language,服务器根据这些字段返回特定的资源。

1. 在客户端的请求中

  • Accept : 指定期望的数据类型  (MIME Type)
  • Accept-Encoding : 指定期望的数据编码方式,主要用于限制服务端的数据压缩
  • Accept-Language : 指定期望的数据语言
  • User-Agent : 用于表示浏览器的一些相关信息,如移动端的浏览器或者pc端的浏览器
  • Content-Type : 指定发送的数据类型

2. 在服务端返回时

  • Content-Type : 对应"Accept",指定返回的数据类型
  • Content-Encoding : 对应"Accept-Encoding",指定返回的数据编码方式
  • Content-Language : 对应"Accept-Language",指定返回数据的语言

存在以下问题:

  1. 服务器很难知道客户端浏览器的全部信息;
  2. 客户端提供的信息相当冗长(HTTP/2 协议的首部压缩机制缓解了这个问题),并且存在隐私风险(HTTP 指纹识别技术);
  3. 给定的资源需要返回不同的展现形式,共享缓存的效率会降低,而服务器端的实现会越来越复杂。

实现方式二:

服务器通过返回 300 Multiple Choices 或者 406 Not Acceptable,客户端从中选出最合适的那个资源

 

Vary

Vary: Accept-Language

在使用内容协商的情况下,只有当缓存服务器中的缓存满足内容协商条件时,才能使用该缓存,否则应该向源服务器请求该资源。

例如,一个客户端发送了一个包含 Accept-Language 首部字段的请求之后,源服务器返回的响应包含 Vary: Accept-Language 内容,缓存服务器对这个响应进行缓存之后,在客户端下一次访问同一个 URL 资源,并且 Accept-Language 与缓存中的对应的值相同时才会返回该缓存。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值