《HTTP 权威指南》笔记:第十六章&第十七章 国际化、内容协商与转码
《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.
类型
- 固定宽度
- 可变宽度+无模态:对不同的字符代码采用不同数量的比特.
- 可变宽度+有模态:可以通过转义处理相互有重叠的字符集
语言标记
定义:语言标记是命名口语的标准化字符串短语.
子标记定义:语言标记包括一个或多个部分,每个部分称为一个子标记.
类型:
- 主子标记:第一个子标记,其值是标准化的;通常表示语言的类型.
- 可选子标记:第二个子标记,通常表示某一种语言所在的地区的方言
- 其他子标记都是未注册的.·
应用:
在响应报文中的 Content-Language 这个 header 和请求报文中的 Accept-Language 中出现.
《HTTP 权威指南》笔记:第十七章 内容协商与转码
内容协商的目标是在保证一个 URL 的情况下,为客户端提供不同的、最适合的页面.
可以通过三种方法来进行内容协商:
- 客户端驱动(存在多个 URL 的问题)
- 服务器驱动
- 透明协商
服务器驱动的协商
服务器通过对客户端的请求报文进行解析,得到相关的信息,然后决定回应的报文主体,主要的方式有两种:
- 通过内容协商首部
- 通过其他首部进行变通,例如 User-Agent 首部
内容协商首部——Accpet
内容协商首部是客户端发向服务器的请求报文中的 Accept 首部,它包括:
- Accept
- Accept-Language
- Accept-Charset
- Accept-Encoding
透明协商
定义:透明协商是缓存代理在来代表服务器对客户端进行协商的过程,其能够减少服务器的负担.
当缓存中的内容协商首部的值与请求中的协商首部的值不同的时候,需要从原始服务器中请求一份新的文档.
Vary 首部
在缓存存储来自服务器的文件时,在缓存中包含了 Vary 首部.
当第二次有不同的内容协商的请求报文的时候,能够从服务器更新并储存一个 alternate,另外一个名称叫做 variant
内容转码
内容协商的机制中存在一个缺陷:服务器无法满足客户端的内容协商的要求,没有能提供的相应的格式的文件.
这种情况下,可以通过内容转码来进行实现.
常见的类型有下面三种:
- 格式转换:将 HTML 格式文件转化为 WML 格式文件,便于无线的客户端查看
- 信息综合: 将小节标题生成文档的大纲
- 内容注入:不减少内容,,例如自动广告生成器和用户追踪系统
《HTTP 权威指南》笔记:第十六章&第十七章 国际化、内容协商与转码的更多相关文章
- ng机器学习视频笔记(十六) ——从图像处理谈机器学习项目流程
ng机器学习视频笔记(十六) --从图像处理谈机器学习项目流程 (转载请附上本文链接--linhxx) 一.概述 这里简单讨论图像处理的机器学习过程,主要讨论的是机器学习的项目流程.采用的业务示例是O ...
- Struts2权威指南笔记
Struts2权威指南笔记 1.mvc特点包括: ① 多个视图可以对应一个模型 ② 模型返回的数据与显示逻辑分离 ③ 应用层被分隔为三层,降低了各层之间的耦合,提供了应用的可扩展性 ④ 控制层的概念也 ...
- Nodejs学习笔记(十六)--- Pomelo介绍&入门
目录 前言&介绍 安装Pomelo 创建项目并启动 创建项目 项目结构说明 启动 测试连接 聊天服务器 新建gate和chat服务器 配置master.json 配置servers.json ...
- 深度学习课程笔记(十六)Recursive Neural Network
深度学习课程笔记(十六)Recursive Neural Network 2018-08-07 22:47:14 This video tutorial is adopted from: Youtu ...
- python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码
python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码 python的json.dumps方法默认会输出成这种格式"\u535a\u ...
- Nodejs学习笔记(十六)—Pomelo介绍&入门
前言&介绍 Pomelo:一个快速.可扩展.Node.js分布式游戏服务器框架 从三四年前接触Node.js开始就接触到了Pomelo,从Pomelo最初的版本到现在,总的来说网易出品还算不错 ...
- Android编程权威指南(第2版)--第16章 使用intent拍照 挑战练习
16.7挑战练习:优化照片显示 新建dialog_photo.xml 1234567891011121314 <?xml version="1.0" encoding=&qu ...
- <构建之法>第十三章到十七章有感以及这个项目读后感
<构建之法>第十三章到十七章有感 第13章:软件测试方法有哪些? 主要讲了软件测试方法:要说有什么问题就是哪种效率最高? 第14章:质量保障 软件的质量指标是什么?怎么样能够提升软件的质量 ...
- Gradle 1.12用户指南翻译——第二十六章. War 插件
其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...
随机推荐
- 日期控件——my97
一.官网 http://www.my97.net/index.asp 下载: //下文已更新与bootstrap样式的结合 二.demo演示 实际使用时请注意文件引入的实际位置: [补充] 数据库字段 ...
- 【Python全栈-后端开发】Django入门基础-2
Django入门基础知识-2 一 .模版 一.模版的组成 HTML代码+逻辑控制代码 二.逻辑控制代码的组成 1 变量(使用双大括号来引用变量) {{var_name}} 2 标签(tag)的使用 ...
- CentOS下rpm命令详解
CentOS下rpm命令详解 rpm,Redhat Package Manager,即为红帽公司为RHEL开发的专用包管理器,后来更改为RPM Package Manager,类似于GNU项目,使用递 ...
- python基础之 面向对象之反射
1.isinstance和issubclass issubclass(Son,Foo) 判断雷与类之间的是否有继承关系,接受两个参数,一个是疑似子类,一个是疑似父类,判断Son是否是Foo的子类 ob ...
- 【UML】NO.55.EBook.8.UML.3.001-【UML和模式应用 第3版】
1.0.0 Summary Tittle:[UML]NO.54.EBook.8.UML.3.001-[UML和模式应用 第3版] Style:DesignPattern Series:DesignPa ...
- taro中子父传值
其实网上很多方法,我这只是一个简单的demo,废话不多说直接上代码 import Taro, { Component } from '@tarojs/taro' import { View, Text ...
- Go 初体验 - 令人惊叹的语法 - defer.3 - defer 函数参数计算时机
defer 函数的参数计算时机 定义一个 defer 函数,接收参数 n: 调用: 输出: 有点惊讶,为什么不是 100 200 200? go 语言里,defer 函数的参数是在定义位置被计算的,也 ...
- 1*1的卷积核与Inception
https://www.zhihu.com/question/56024942 https://blog.csdn.net/a1154761720/article/details/53411365 本 ...
- 0003-20180422-自动化第三章-python基础学习笔记
3章 内容回顾: 1. 计算机组成 2. 程序编译器 3. 变量 4. 条件 5. 循环 6. py2与py3区别 - 默认编码, - 除法, - input ,raw_input 7. 位,字节关系 ...
- jdk1.8新特性之lambda表达式及在Android Studio中的使用举例
Jdk1.8已经出很久了但是很多同学对它的特性在android studio 中的应用可能还不是很熟悉,今天我们就来对这个新特性在AS中做它的应用实践. 一.首先在有JDK1.8的情况下我们要在AS的 ...