有关Web应用服务器的显示编码问题
刘睿
2005年7月
最近和一个软件开发商的工程师聊了一下Web应用服务器的显示编码问题,于是感觉不少人虽然玩了多年的软件,对这个问题还是云里雾里,很少有人能清晰地说明这一问题,网上也基本没有相关的精辟的文章。所以在这里就简单介绍一下,帮初学者入入门。需要指出的是,不同的Web应用服务器很可能采用不同的方式。这里仅仅以IBM WebSphere为例,其它服务器比如Tomcat和WebLogic,以后有机会再说吧。
1. 浏览器的设置:
1.1 浏览器的语言相关设置:
IE浏览器会把自己支持的语言(在IE浏览器可以设置该语言选项)通过HTTP请求头Accept-Language,并上传给Web服务器供参考。但服务器一般都忽略HTTP请求头Accept-Language,我知道有些应用程序就通过读这个HTTP请求头(Accept-Language)来实现一定的国际化。(注:WebSphere对Servlet的扩展属性autoRequestEncoding和autoResponseEncoding就是利用这个“Accept-Language”。)
另外,如果HTML没有定义“<META http-equiv="Content-Type"...>”,且服务器也没有返回HTTP头Content-Type和Content-Language,就以自己首选的语言解释HTML。(此时就很可能出现服务器返回的中文乱码)
1.2 浏览器缓存:
浏览器重复访问同一网页时,发送的HTTP头(last-modified),服务器可以返回HTTP Code 304 - Not Modified,于是从本地缓存取网页。
有时候语言环境变了,浏览器的显示还没变,就可能是缓存的问题。
当然一般浏览器都有主动选择变换语言的功能,实际上是用不同的语言解释显示的HTML。
2. 浏览器如何理解HTTP返回内容的编码:
首先,看服务器返回的HTTP头Content-Type;
其次,看HTML中的“<META http-equiv="Content-Type"...>”;
最后,看服务器返回的HTTP头Content-Language,注意Content-Language与服务器默认的文件编码一致。
2.1 WebSphere服务器返回HTML时,其返回数据的HTTP头Content-Type不包含字符集。所以说:其HTML数据的编码必须和“<META http-equiv="Content-Type"...>”声明一致,这样才能让浏览器有正确的理解。如果你在WebSphere Studio或者Eclipse中开发HTML,这种一致性是由该工具保证的。
服务器在发送HTML时,服务器不会做任何编码转换。如果有必要,浏览器在显示时自己进行转换(对用户透明)。
2.2 WebSphere服务器调用Servlet或JSP时,其返回数据的HTTP头Content-Type肯定包含字符集(默认是ISO-8859-1),所以HTML中的“<META http-equiv="Content-Type"...>”声明必然被忽略。
那么,这个HTTP头Content-Type是怎么决定的呢?在Servlet,使用ServletResponse接口的setContentType;在JSP中,参见声明“<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030" %>”中的contentType部分。(注意JSP声明中的pageEncoding部分,指的是JSP源文件(对比Java源文件)的编码。对WebSphere来说,JSP源文件的默认编码可以由JVM命令行参数-Ddefault.client.encoding=...来设置。)
所以说:其Servlet和JSP的数据的编码必须与其相应的声明一致,这样才能让浏览器有正确的理解。如果你在WebSphere Studio或者Eclipse中开发JSP,这种一致性是由该工具保证的。
3. 服务器如何理解HTTP请求参数的编码:
服务器得到客户机的GET或POST请求时,一般都会有一些参数。这些参数很可能是从浏览器输入的,也可能是带在HTML中的,那么服务器如何理解这些参数的编码呢?
这个问题实际上并没有得到圆满的解决。一般服务器都会忽略IE浏览器的语言选项决定的HTTP请求头(Accept-Language),所以就不知道浏览器输入的数据的编码。于是只能使用ServletRequest接口的setCharacterEncoding方法来设置。对WebSphere来说,还可以使用JVM命令行参数-Ddefault.client.encoding=...来设置一个默认值。
值得一提的是,如果没有任何设置,WebSphere就按照ISO-8859-1来解释,也可以通过一个简单的校正的方法得到原始的参数值(比如:new String( paramValues[0].getBytes("8859_1"), "GBK" ))。其它的Web应用服务器不一定采取相同的办法。比如WebLogic8就默认使用UTF-8来解释参数的编码,而且不支持简单的校正。
如果你愿意使用WebSphere扩展的非标准Servlet属性autoRequestEncoding和autoResponseEncoding,就能利用HTTP请求头(Accept-Language)来决定HTTP请求参数的编码。
原文:http://www.lrsolution.com/resource.html
分享到:
相关推荐
剩下三分之一的内容讲解单页Web应用的服务器端 开发和其他与单页Web应用相关的知识,如Node.js、MongoDB、CDN、搜索引擎优化、数据分析、错误日志以及各个层级的缓存等。本书最后的两个附录分别介绍JavaScript的编码...
剩下三分之一的内容讲解单页Web应用的服务器端开发和其他与单页Web应用相关的知识,如Node.js、MongoDB、CDN、搜索引擎优化、数据分析、错误日志以及各个层级的缓存等。本书两个附录分别介绍JavaScript的编码规范和...
攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。 2、跨站脚本 ...
第1部分 Nginx服务器 第1章 Nginx的功能 第2章 Nginx的模块管理和进程管理 第3章 Nginx如何处理一个请求 第4章 服务器名字 第5章 协助用户操作Nginx的工具 第6章 5XX错误处理 第7章 使用TCMalloc优化Nginx ...
协作在线法官系统是一个类似于论坛的Web应用程序,它允许多个用户像Google Doc一样添加编码问题并同时就一个编码问题进行协作。 与Google Doc不同,协作在线法官系统带有执行器服务器,该服务器将执行用户提交的...
一个 Web 浏览器,例如 Firefox或 Internet Explorer,用于请求一个特定的页面,并且以人类可读的方式显示从另一个应用程序那里收到的内容。 一个 Web 服务器,通常是在远程机器上,负责对页面请求作出响应,...
第1章 Web应用程序基础 Java Web程序设计 Java-Web程序设计(PPT)全文共389页,当前为第1页。 课程概述 终点 起点 1 2 3 4 5 6 7 1.Web应用程序基础 2.JSP基础 3.JSP内置对象 5. Servlet技术 4.JavaBean和标准动作 6....
第1部分 Nginx服务器 第1章 Nginx的功能 第2章 Nginx的模块管理和进程管理 第3章 Nginx如何处理一个请求 第4章 服务器名字 第5章 协助用户操作Nginx的工具 第6章 5XX错误处理 第7章 使用TCMalloc优化Nginx ...
第1部分 Nginx服务器 第1章 Nginx的功能 第2章 Nginx的模块管理和进程管理 第3章 Nginx如何处理一个请求 第4章 服务器名字 第5章 协助用户操作Nginx的工具 第6章 5XX错误处理 第7章 使用TCMalloc优化Nginx ...
Web应用服务器与文件服务器的交互过程基本上由4步来完成: 第一步:设定FUSConfig各种参数,确定上传模式 Web应用服务器中,文件上传组件[即fus文件夹]需要被放入到根目录下。同时,需要上传文件的页面中,进行配置...
Mongrel2是一个基于ZeroMQ的Web服务器,语言独立,可以用17种语言编写应用,还有更多非常奇特的地方:What makes Mongrel2 special is how it satisfies these requests in a language agnostic andasynchronous way...
分片用于独立应用程序的小型 Web 服务器当 HttpContext.Current 的荒谬性被第一百万次暴露出来时,这个 Web 服务器就开始了。 它旨在成为一个纤薄、严肃的 Web 服务器,可为您提供设置简单应用程序所需的一切,这些...
服务器以一个状态行作为响应,相应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容。 HTTP协议方法 Http协议定义了很多与服务器交互的方法,最基本的有4种,分别是GET...
这个框架的目的在于加速web应用的开发以及维护,减少重复的编码工作。 Symfony的系统需求不高,可以被轻易的安装在任意设置上:你只需一个Unix或Windows,搭配一个安装了PHP5的网络服务器即可。它与差不多所有的...
它分析和研究了Web应用程序的前端和后端,并系统地提升了其性能和运行效率。《高性能PHP应用开发》还介绍了PHP编码最佳实践的运用以及如何使用工具来应用缓存技术。另外书中也涉及了对Web服务器的优化和数据库的优化...
它分析和研究了Web应用程序的前端和后端,并系统地提升了其性能和运行效率。《高性能PHP应用开发》还介绍了PHP编码最佳实践的运用以及如何使用工具来应用缓存技术。另外书中也涉及了对Web服务器的优化和数据库的优化...
它分析和研究了Web应用程序的前端和后端,并系统地提升了其性能和运行效率。《高性能PHP应用开发》还介绍了PHP编码最佳实践的运用以及如何使用工具来应用缓存技术。另外书中也涉及了对Web服务器的优化和数据库的优化...
Web应用程序和框架,提供模块化的转换,编码和加密。 翻译在客户端完成,无需任何服务器交互— 入门 使用 下载或 克隆存储库: git clone git@github.com:cryptii/cryptii.git 在本地构建项目: 确保已安装....
还有一种情况,就是Web服务器的某些显示环境变量的程序错误的输出了Web服务器的物理路径,这通常是设计上的问题。 网络安全Web的安全概述全文共71页,当前为第7页。 2.目录遍历 目录遍历对于Web服务器来说并不多见...
代理面向 Web 应用程序开发人员的 Nodejs 服务器代理安装$ npm install proxey如何使用rootFolder:web 应用程序文件夹; rootDocument:要呈现为主 html 的文档; port:运行的端口,默认为5000(可选); vars:...