`
wenjinglian
  • 浏览: 807872 次
  • 性别: Icon_minigender_1
  • 来自: 株洲->深圳
社区版块
存档分类
最新评论

[转]有关Web应用服务器的显示编码问题

    博客分类:
  • Web
阅读更多

 

有关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应用-JavaScript从前端到后端 高清完整中文版pdf(完整版)

    剩下三分之一的内容讲解单页Web应用的服务器端 开发和其他与单页Web应用相关的知识,如Node.js、MongoDB、CDN、搜索引擎优化、数据分析、错误日志以及各个层级的缓存等。本书最后的两个附录分别介绍JavaScript的编码...

    单页Web应用 JavaScript从前端到后端

    剩下三分之一的内容讲解单页Web应用的服务器端开发和其他与单页Web应用相关的知识,如Node.js、MongoDB、CDN、搜索引擎优化、数据分析、错误日志以及各个层级的缓存等。本书两个附录分别介绍JavaScript的编码规范和...

    Web应用安全:常见的Web应用威胁.pptx

    攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。 2、跨站脚本 ...

    决战Nginx系统卷:高性能Web服务器详解与运维第一部分(保证能用)

    第1部分 Nginx服务器 第1章 Nginx的功能 第2章 Nginx的模块管理和进程管理 第3章 Nginx如何处理一个请求 第4章 服务器名字 第5章 协助用户操作Nginx的工具 第6章 5XX错误处理 第7章 使用TCMalloc优化Nginx ...

    COJ:一种类似于论坛的Web应用程序,允许多个用户添加编码问题并与docker executor服务器同时在一个编码问题上进行协作

    协作在线法官系统是一个类似于论坛的Web应用程序,它允许多个用户像Google Doc一样添加编码问题并同时就一个编码问题进行协作。 与Google Doc不同,协作在线法官系统带有执行器服务器,该服务器将执行用户提交的...

    hi web服务器源码

    一个 Web 浏览器,例如 Firefox或 Internet Explorer,用于请求一个特定的页面,并且以人类可读的方式显示从另一个应用程序那里收到的内容。  一个 Web 服务器,通常是在远程机器上,负责对页面请求作出响应,...

    Java-Web程序设计(PPT).pptx

    第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....

    决战Nginx系统卷:高性能Web服务器详解与运维第二部分(保证能用)

    第1部分 Nginx服务器 第1章 Nginx的功能 第2章 Nginx的模块管理和进程管理 第3章 Nginx如何处理一个请求 第4章 服务器名字 第5章 协助用户操作Nginx的工具 第6章 5XX错误处理 第7章 使用TCMalloc优化Nginx ...

    决战Nginx: 系统卷 - 高性能Web服务器详解与运维第三部分(保证能用)

    第1部分 Nginx服务器 第1章 Nginx的功能 第2章 Nginx的模块管理和进程管理 第3章 Nginx如何处理一个请求 第4章 服务器名字 第5章 协助用户操作Nginx的工具 第6章 5XX错误处理 第7章 使用TCMalloc优化Nginx ...

    文件服务器规划设计.docx

    Web应用服务器与文件服务器的交互过程基本上由4步来完成: 第一步:设定FUSConfig各种参数,确定上传模式 Web应用服务器中,文件上传组件[即fus文件夹]需要被放入到根目录下。同时,需要上传文件的页面中,进行配置...

    Web服务器Mongrel2.zip

    Mongrel2是一个基于ZeroMQ的Web服务器,语言独立,可以用17种语言编写应用,还有更多非常奇特的地方:What makes Mongrel2 special is how it satisfies these requests in a language agnostic andasynchronous way...

    WebShard:用于独立应用程序的小型 Web 服务器

    分片用于独立应用程序的小型 Web 服务器当 HttpContext.Current 的荒谬性被第一百万次暴露出来时,这个 Web 服务器就开始了。 它旨在成为一个纤薄、严肃的 Web 服务器,可为您提供设置简单应用程序所需的一切,这些...

    Web应用安全:HTTP头消息.pptx

    服务器以一个状态行作为响应,相应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容。 HTTP协议方法 Http协议定义了很多与服务器交互的方法,最基本的有4种,分别是GET...

    Symfony v2.0 开发PHP5项目的web应用框架.rar

    这个框架的目的在于加速web应用的开发以及维护,减少重复的编码工作。 Symfony的系统需求不高,可以被轻易的安装在任意设置上:你只需一个Unix或Windows,搭配一个安装了PHP5的网络服务器即可。它与差不多所有的...

    高性能Php应用开发

    它分析和研究了Web应用程序的前端和后端,并系统地提升了其性能和运行效率。《高性能PHP应用开发》还介绍了PHP编码最佳实践的运用以及如何使用工具来应用缓存技术。另外书中也涉及了对Web服务器的优化和数据库的优化...

    高性能PHP应用开发

    它分析和研究了Web应用程序的前端和后端,并系统地提升了其性能和运行效率。《高性能PHP应用开发》还介绍了PHP编码最佳实践的运用以及如何使用工具来应用缓存技术。另外书中也涉及了对Web服务器的优化和数据库的优化...

    php高性能应用开发

    它分析和研究了Web应用程序的前端和后端,并系统地提升了其性能和运行效率。《高性能PHP应用开发》还介绍了PHP编码最佳实践的运用以及如何使用工具来应用缓存技术。另外书中也涉及了对Web服务器的优化和数据库的优化...

    cryptii:提供模块化转换,编码和加密的Web应用程序和框架

    Web应用程序和框架,提供模块化的转换,编码和加密。 翻译在客户端完成,无需任何服务器交互— 入门 使用 下载或 克隆存储库: git clone git@github.com:cryptii/cryptii.git 在本地构建项目: 确保已安装....

    网络安全Web的安全概述.pptx

    还有一种情况,就是Web服务器的某些显示环境变量的程序错误的输出了Web服务器的物理路径,这通常是设计上的问题。 网络安全Web的安全概述全文共71页,当前为第7页。 2.目录遍历 目录遍历对于Web服务器来说并不多见...

    proxey:使前端开发人员能够在 nodejs 代理中运行他们的 web 应用程序,而无需担心 cors 或创建服务器端编码

    代理面向 Web 应用程序开发人员的 Nodejs 服务器代理安装$ npm install proxey如何使用rootFolder:web 应用程序文件夹; rootDocument:要呈现为主 html 的文档; port:运行的端口,默认为5000(可选); vars:...

Global site tag (gtag.js) - Google Analytics