HTTP协议及浏览器编码行为 联系客服

发布时间 : 星期日 文章HTTP协议及浏览器编码行为更新完毕开始阅读0e34aa3531126edb6f1a1046

...

这是网页的标题

...

2.配置IBM HTTP Server

这是一种自动防错机制,即便个别HTML文档因为这样或那样的原因,没有用META标记声明字符编码,IBM HTTP Server仍能够自动地在HTTP响应消息头中提供编码信息,帮助浏览器正确解读HTML文档。

具体的配置方法是修改IBM HTTP Server的配置文件httpd.conf(默认情况下位于conf目录下),如下面的代码片段所示。

...

AddType ‘text/html; charset=UTF-8’ html htm

...

这样,服务器就会为每一个后缀为html和htm的请求回复中自动加上消息头(如下所示),以达到通知浏览器文档的编码格式的目的。

Content-Type: text/html; charset=UTF-8

上面的配置适用于整个网站统一采用UTF-8编码的情况。那么,如果并没有统一为UTF-8编码该怎么办呢?IBM HTTP Server可以根据文档所处目录的不同,自动添加不同的消息头,当然这种配置会复杂一些。

假设网站包含不同编码的文档,分布在不同的目录中。

/root/-----/en/---index.html (encoded in ASCII)

| page1.html

|

|--/cn/---index.html (encoded in GB2312)

| page1.html

|

|--/ja/---index.html (encoded in Shift_JIS)

page1.html

那么相应的 httpd.conf 大致如下。

...

AddType 'text/html; charset=iso-8859-1' html htm

...

...

...

AddType 'text/html; charset=GB2312' html htm

...

...

...

AddType 'text/html; charset=Shift_JIS' html htm

...

有了上面的配置,在目录/root/下的html和htm就会以相应的HTTP消息头返回给浏览器。比如对于/root/cn/index.html,就会返回“Content-Type: text/html; charset=UTF-8”消息头。 如果不希望直接修改httpd.conf,那么,可以通过修改.htaccess来覆盖httpd.conf中的配置,可以达到相同的目的。.htaccess是一个作用于其所在目录和所有子目录的配置文件,对.htaccess的修改不需要重新启动IBM HTTP Server就能生效,因此被经常使用。要保证.htaccess中的配置覆盖httpd.conf,首先需要在httpd.conf中对相关目录加上“AllowOverride”参数,如下所示。

...

...

AllowOverride All

...

然后在.htaccess中关于/root/cn/的配置中加入下面一行以使之生效。

AddType 'text/html; charset=GB2312' html htm

更多关于IBM HTTP Server配置文件和参数的信息,请查阅相关文档。 3.小结

以UTF-8编码保存HTML文档。

在HTML文档中加入META标记以标识字符编码。 配置IBM HTTP Server以启用自动防错功能。

6.2.2 JSP的编码设置

在当代的网络应用程序中,JSP常常扮演MVC模型中视图的角色,用来生成HTML以返回客户端,从而在浏览器中呈现用户界面。对国际化的应用程序来说,JSP文件可能以多种编码(为不同的语言)编写,因此,需要有特定的参数标识JSP的字符编码,以保证应用程序服务器能正确地解析和编译JSP文件。本节会介绍相关的参数并说明它们的用途,同时再一次强调,采用统一的UTF-8编码是最简单和最安全的策略。 1.设置JSP文件的编码

在JSP能够被执行并响应用户请求之前,首先要经过一个编译的过程,这里JSP文件的编码指的是应用程序服务器读取JSP,进行编译时所使用的字符编码。最通常的做法是将所有JSP都保存为UTF-8格式,并在文件中使用pageEncoding标明字符编码。

<%@ page language=\

如上pageEncoding就是一个专用于标识JSP字符编码的参数,但同时它也是可选的。你也可以不提供pageEncoding,而通过设置contentType参数来指定页面编码。

<%@ page language=\

像这样缺少pageEncoding的情况下,contentType中的charset部分将用于JSP页面的字符编码。如果同时使用了contentType和pageEncoding,哪一个参数优先级更高呢?答案是pageEncoding优先。在contentType和pageEncoding中使用不同的编码是一种非常少见的情况,后面的章节会具体讨论。但一般而言,字符编码在contentType和pageEncoding中应当保持一致。

除了上述在每一个JSP文件中指定字符编码外,从JSP 2.0规范开始,也可以在web.xml中一次声明多个JSP文件的编码。

For all JSPs

*.jsp

UTF-8

如果在web.xml中加入上面的配置,那么,所有的JSP文件都会采用UTF-8编码执行编译,这比在每一个JSP文件中加入声明要简洁得多,当然,这首先要求应用程序服务器支持JSP 2.0规范。

在JSP 2.0规范中,JSP文件的编码声明和查询次序的定义如下。 (1)首先,寻找web.xml中url-pattern匹配的jsp-config声明。

(2)其次,寻找JSP文件中的pageEncoding参数,如果pageEncoding参数与jsp-config中的配置不符,将产生一个JSP编译错误。

(3)再次,寻找contentType中的charset声明,这仅当jsp-config和pageEncoding参数都不存在时才有效。

(4)最后,如果上述所有设置都不存在,那么,采用ISO-8859-1作为默认编码。 2.设置JSP响应字符编码

JSP响应字符编码是指JSP生成的HTTP响应所使用的字符编码,也就是JSP运行后生成的HTML文档的字符编码,该编码由contentType参数指定。在每一个JSP文件中都加入合适的contentType声明是推荐的做法。比如:

<%@ page language=\

这样会调用ServletResponse.setContentType()方法,从而设置HTTP响应的字符编码。 如果缺少contentType,那么会继续查询pageEncoding参数及web.xml中的jsp-config配置。如果其中任意一个存在,那么其字符编码将作用于HTTP响应,如果都不存在,那么最终会使用ISO-8859-1字符编码。 3.符合XML语法的JSP文件

JSP规范从V2.0开始支持完全符合XML语法的JSP文件,对于这类符合XML语法的JSP文件,上述的文件字符编码和响应字符编码的设置会略有不同。 对于JSP文件编码,它取决于XML文件第一行的编码声明。