4月阅读周·HTTP权威指南:国际化之其他需要考虑的地方篇

举报
叶一一 发表于 2025/04/25 09:27:59 2025/04/25
【摘要】 引言HTTP(Hypertext Transfer Protocol,超文本传输协议)是在万维网上进行通信时所使用的协议方案。HTTP有很多应用,但最著名的是用于Web浏览器和Web服务器之间的双工通信。《HTTP权威指南》一书将HTTP中一些互相关联且常被误解的规则梳理清楚,并编写了一系列基于各种主题的章节介绍HTTP各方面的特性。纵观全书,对HTTP“为什么”这样做进行了详细的解释,而不...

引言

HTTP(Hypertext Transfer Protocol,超文本传输协议)是在万维网上进行通信时所使用的协议方案。HTTP有很多应用,但最著名的是用于Web浏览器和Web服务器之间的双工通信。

《HTTP权威指南》一书将HTTP中一些互相关联且常被误解的规则梳理清楚,并编写了一系列基于各种主题的章节介绍HTTP各方面的特性。纵观全书,对HTTP“为什么”这样做进行了详细的解释,而不仅仅停留在它是“怎么做”的。此外,这本书还介绍了很多HTTP应用程序正常工作所必需且重要的非HTTP技术。

这本书主要包括以下内容:

  • 第一部分描述了Web的基础构件与HTTP的核心技术
  • 第二部分重点介绍了Web系统的结构构造块:HTTP服务器、代理、缓存、网关以及机器人应用程序。
  • 第三部分提供了一套用于追踪身份、增强安全性以及控制内容访问的技术和技巧。
  • 第四部分涵盖HTTP报文主体和Web标准,前者包含实际内容,后者描述并处理主体内容。
  • 第五部分介绍了发布和传播Web内容的技巧。
  • 第六部分是一些很有用的参考附录,以及相关技术的教程。

国际化

每天有上亿的人用数百种语言写着各种文档。为了真正实现万维网的目标,HTTP要能够传输和处理用多种语言和字母表编写的国际性文档。

网站国际化方面的两个主要问题:字符集编码(character set encoding)和语言标记(language tag)。HTTP应用程序使用字符集编码请求和显示不同字母表中的文本,它们使用语言标记根据用户所理解的语言来说明并限制内容。而在本章的最后将讨论多语言URI和日期格式。

其他需要考虑的地方

首部和不合规范的数据

HTTP首部必须由US-ASCII字符集中的字符构成。不过,并不是所有的客户端和服务器都正确地实现了这一点,你可能会时不时收到一些代码值大于127的非法字符。很多HTTP应用程序使用操作系统和库例程来处理字符(比如Unix中的字符分类库ctype),但不是所有这些库都支持ASCII范围(0~127)之外的字符代码。在某些情况下(一般来说,是较老的实现),当输入非ASCII字符时,这些库可能会返回不正确的结果,或者使应用程序崩溃。假设报文中含有非法数据,在使用这些字符分类库来处理HTTP报文之前,要仔细阅读它们的文档。

日期

HTTP的规范中明确定义了合法的GMT日期格式,但要知道并非所有Web服务器和客户端都遵守这些规则。例如,我们曾见过Web服务器发送的无效HTTP Date(日期)首部中的月份是用本地语言表示的。HTTP应用程序应当尝试容忍一些不合规矩的日期,不能在接收的时候崩溃。不过也不是所有发送出来的日期都能被正确解释,如果日期无法解析,服务器应当谨慎处理。

域名

DNS目前还不支持在域名中使用国际化的字符。现在正在进行支持多语言的域名的相关标准化工作,但还没有被广泛部署。

URI中的模态切换

有些URI也用ASCII字符的序列来表示其他字符集中的字符。例如,可能使用iso-2022-jp编码插入“ESC ( J”,切换到JIS-Roman字符集,用“ESC ( B”切换回ASCII字符集。这在一些本地化的环境中可以工作,但这种方式没有进行良好的定义,而且没有标准化的方案来识别URL所使用的特定编码。正如RFC 2396的作者所说的那样:

不过,对于含有非ASCII字符的原始字符序列来说,境况更加复杂。如果可能用到多个字符集的话,传输表示字符序列的8位字节序列的因特网协议期待能有办法来识别所用的字符集[RFC 2277]。

然而,在通用的URI语法中没有提供进行这种识别的手段。个别的URI方案可以请求单一的字符集,定义默认的字符集,或提供指示所用字符集的方法。期待将来对这个规范的修改能为URI中的字符编码提供一种系统化的处理方案。

目前,URI对国际化应用还不是非常友好。URI的可移植性目标比语言灵活性方面的目标更重要。人们正在尽最大努力使URI更加国际化,但在短期内,HTTP应用程序还是应当坚持使用ASCII。它从1968年就出现了,所以只用它的话,一切还不至于太糟。

总结

万维网的极大成功意味着HTTP应用程序要继续在不同的语言和字符集之间交换更多的内容。


作者介绍
非职业「传道授业解惑」的开发者叶一一。
《趣学前端》、《CSS畅想》等系列作者。华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏️ | 留言📝

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。