《HTTP 权威指南》笔记:第十六章 国际化

客户端通过在请求报文中的 Accept-Language 首部和 Accept-Charset 首部来告知服务器:“我理解这些语言.”
服务器通过 Content-type 首部中的 charset 参数和 Content-Language 来告知客户端文件可用的字母表和语言.
两者进行协商,得到最佳的结果.

MIME charset

术语

字符编码方案:将二进制代码转化为字符代码
字符集:将字符代码转换为字符
MIME 字符集:是将特定的编码方案和特定的已编码字符集组合而成.

常见的 MIME charset:

  • us-ascii
  • iso-8859-1
  • utf-8

如果客户端无法推断出字符编码,就假定使用的是 ios-8859-1.

类型

  1. 固定宽度
  2. 可变宽度+无模态:对不同的字符代码采用不同数量的比特.
  3. 可变宽度+有模态:可以通过转义处理相互有重叠的字符集

语言标记

定义:语言标记是命名口语的标准化字符串短语.
子标记定义:语言标记包括一个或多个部分,每个部分称为一个子标记.
类型:

  1. 主子标记:第一个子标记,其值是标准化的;通常表示语言的类型.
  2. 可选子标记:第二个子标记,通常表示某一种语言所在的地区的方言
  3. 其他子标记都是未注册的.·

应用:
在响应报文中的 Content-Language 这个 header 和请求报文中的 Accept-Language 中出现.

《HTTP 权威指南》笔记:第十七章 内容协商与转码

内容协商的目标是在保证一个 URL 的情况下,为客户端提供不同的、最适合的页面.
可以通过三种方法来进行内容协商:

  1. 客户端驱动(存在多个 URL 的问题)
  2. 服务器驱动
  3. 透明协商

服务器驱动的协商

服务器通过对客户端的请求报文进行解析,得到相关的信息,然后决定回应的报文主体,主要的方式有两种:

  1. 通过内容协商首部
  2. 通过其他首部进行变通,例如 User-Agent 首部

内容协商首部——Accpet

内容协商首部是客户端发向服务器的请求报文中的 Accept 首部,它包括:

  • Accept
  • Accept-Language
  • Accept-Charset
  • Accept-Encoding

透明协商

定义:透明协商是缓存代理在来代表服务器对客户端进行协商的过程,其能够减少服务器的负担.
当缓存中的内容协商首部的值与请求中的协商首部的值不同的时候,需要从原始服务器中请求一份新的文档.

Vary 首部

在缓存存储来自服务器的文件时,在缓存中包含了 Vary 首部.
当第二次有不同的内容协商的请求报文的时候,能够从服务器更新并储存一个 alternate,另外一个名称叫做 variant

内容转码

内容协商的机制中存在一个缺陷:服务器无法满足客户端的内容协商的要求,没有能提供的相应的格式的文件.
这种情况下,可以通过内容转码来进行实现.
常见的类型有下面三种:

  1. 格式转换:将 HTML 格式文件转化为 WML 格式文件,便于无线的客户端查看
  2. 信息综合: 将小节标题生成文档的大纲
  3. 内容注入:不减少内容,,例如自动广告生成器和用户追踪系统

《HTTP 权威指南》笔记:第十六章&第十七章 国际化、内容协商与转码的更多相关文章

  1. ng机器学习视频笔记(十六) ——从图像处理谈机器学习项目流程

    ng机器学习视频笔记(十六) --从图像处理谈机器学习项目流程 (转载请附上本文链接--linhxx) 一.概述 这里简单讨论图像处理的机器学习过程,主要讨论的是机器学习的项目流程.采用的业务示例是O ...

  2. Struts2权威指南笔记

    Struts2权威指南笔记 1.mvc特点包括: ① 多个视图可以对应一个模型 ② 模型返回的数据与显示逻辑分离 ③ 应用层被分隔为三层,降低了各层之间的耦合,提供了应用的可扩展性 ④ 控制层的概念也 ...

  3. Nodejs学习笔记(十六)--- Pomelo介绍&入门

    目录 前言&介绍 安装Pomelo 创建项目并启动 创建项目 项目结构说明 启动 测试连接 聊天服务器 新建gate和chat服务器 配置master.json 配置servers.json ...

  4. 深度学习课程笔记(十六)Recursive Neural Network

    深度学习课程笔记(十六)Recursive Neural Network  2018-08-07 22:47:14 This video tutorial is adopted from: Youtu ...

  5. python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码

    python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码 python的json.dumps方法默认会输出成这种格式"\u535a\u ...

  6. Nodejs学习笔记(十六)—Pomelo介绍&入门

    前言&介绍 Pomelo:一个快速.可扩展.Node.js分布式游戏服务器框架 从三四年前接触Node.js开始就接触到了Pomelo,从Pomelo最初的版本到现在,总的来说网易出品还算不错 ...

  7. Android编程权威指南(第2版)--第16章 使用intent拍照 挑战练习

    16.7挑战练习:优化照片显示 新建dialog_photo.xml 1234567891011121314 <?xml version="1.0" encoding=&qu ...

  8. <构建之法>第十三章到十七章有感以及这个项目读后感

    <构建之法>第十三章到十七章有感 第13章:软件测试方法有哪些? 主要讲了软件测试方法:要说有什么问题就是哪种效率最高? 第14章:质量保障 软件的质量指标是什么?怎么样能够提升软件的质量 ...

  9. Gradle 1.12用户指南翻译——第二十六章. War 插件

    其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...

随机推荐

  1. ASP.NET Core 集成测试中通过 Serilog 向控制台输出日志

    日志是程序员的雷达,不仅在生产环境中需要,在集成测试环境中也需要,可以在持续集成失败后帮助定位问题.与生产环境不同,在集成测试环境中使用控制台输出日志更方便,这样可以通过持续集成 runner 执行 ...

  2. springboot+@async异步线程池的配置及应用

    示例: 1. 配置 @EnableAsync @Configuration public class TaskExecutorConfiguration { @Autowired private Ta ...

  3. [redis] redis

    redis是什么? wiki redis官方介绍:introduction to redis 安装: install 拉到最下面的install小节 wget http://download.redi ...

  4. java8新特性--Stream的基本介绍和使用

    什么是Stream? Stream是一个来自数据源的元素队列并可以进行聚合操作. 数据源:流的来源. 可以是集合,数组,I/O channel, 产生器generator 等 聚合操作:类似SQL语句 ...

  5. 洛谷P4396 作业 [AHOI2013] 莫队

    正解:莫队 解题报告: 传送门! 天呐太久没做莫队了连板子都认不出来了,,,所以复健下做下莫队的题目QAQ 就很板子鸭,和莫队板子比好像只有一个离散化,,,?就不讲了QAQ 等下直接放代码QAQ ov ...

  6. Elasticsearch学习笔记(二)Search API 与 Query DSL

    一. Search API eg: GET /mall/product/_search?q=name:productName&sort=price desc 特点:search的请求参数都是以 ...

  7. Yarn vs npm: 你需要知道的一切(转)

    英文原文:https://www.sitepoint.com/yarn-vs-npm/ 译文:http://web.jobbole.com/88459/ Yarn 是 Facebook, Google ...

  8. 使用js对WGS-84 ,GCJ-02与BD-09的坐标进行转换

    获取到经纬度在用百度地图进行定位时,却发现行驶轨迹的路线定到海里面去了.从网上查阅,知道此方法. 出处:https://www.jianshu.com/p/53f00ba897f7 一.在进行地图开发 ...

  9. Py中查看数据类型【转载】

    转自:https://www.jianshu.com/p/bb5cc438e3b2 1.内置函数isinstance(object, (type1,type2...)) isinstance('con ...

  10. 实现html页面自动刷新的几种方式

    自动页面刷新通常会用在对数据的实时性比较敏感的网站中,比如股票走势等,另外在普通的页面自动跳转中也会使用到页面自动刷新技术. 页面刷新我见过的有三种方式,下面来一一说明 1.通过在<head&g ...