http 报文中可以承载以任何语言表示的内容,就像它能承载图像、影片、或任何类型的媒体那样。对http来说,实体主体只是二进制信息的容器而已。
为了支持国际性的内容,服务器需要告知客户端每个文档的字母表和语言,这样客户端才能正确地把文档中的信息解包为字符并把内容呈现给用户。
服务器通过http协议的Content-Type首部中的charset参数和Content-Lauguage首部告知客户端文档的字母表和语言。这些首部描述了实体主休的信息盒子里面装的是什么,如何把内容转换成合适的字符以便显示在屏幕上以及里面的词语表示的是哪种语言。
客户端需要告知服务器用户理解何种语言,浏览器上安装了何种字母表编码算法。客户端发送Accept-Charset首部和Accept-Language首部,告知服务器它理解哪些字符集编码算法和语言以及其中的优先顺序。
Accept-Language:fr,en/q=.8
Accept-Charset:iso-8859-1,utf-8
字符集与HTTP
字符集是把字符转换为二进制码的编码:Http 字符集的值说明如何把实体内容的二进制码转换为特定字母表中的字符。每个字符集标记都命名了一种把二进制码转换为字符的算法反之亦然。
国际化字符系统的关键目标是把语义(字母)和表示(图形化的显示形式)隔离开来。http 只关心字符数据和相关语言及字符集标签的传输。字符形状的显示是由用户的图形显示软件 包括 浏览器、操作系统、字体 等 完成的。
Content-Language 首部不仅限于文本文档。音频片段/电影以及应用程序都有可能是面向特定语言受众的。任何面向特定语言受众的媒体类型都可以有Content-Language首部。
可以在Accept-Language首部中放入多个语言标记以枚举所支持的人部语言及其优先顺序 从左到右。
所有的标记都不区分大小写的,习惯上用全小写来表示一般的语言,用全大写来表示特定的国家