有关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应用服务器是Web服务的核心,它们需要处理...
它以ARM芯片作为核心处理器,利用MPEG-2编码格式对视频信号进行压缩处理,并在嵌入式Linux操作系统上运行内置的Web服务器应用程序。这种设计不仅简化了系统的结构,提高了系统的稳定性和可靠性,同时也降低了成本。 ...
在Web应用开发中,我们经常会遇到一些高级问题,这些问题涉及到多方面,如字符编码、数据传输、动态内容呈现等。本文将重点讨论如何处理Web应用中的中文显示问题以及JSP中动态显示表格的方法。 首先,让我们关注Web...
【WebServer vb web 服务器】 在信息技术领域,Web服务器是一种软件程序,它的主要任务是接收来自互联网用户的HTTP请求,并返回相应的HTML页面或者其他Web资源。在这个特定的案例中,"WebServer vb web 服务器"指的...
网页到底是什么?...通过以上步骤,可以理解网页、Web服务器的工作原理以及如何利用网络芯片实现相关功能。在实际开发中,还需要结合具体的硬件平台和编程语言,如C#、Lua等,进行程序设计和调试。
Web应用的请求响应流程大致如下: 1. **浏览器向应用服务器发送请求**:可以通过表单提交(POST或GET)、超链接或Ajax实现。在POST请求中,表单数据按页面编码(如UTF-8)转为字节流发送。对于GET请求,表单值会URI...
### 无法在WEB服务器调试问题解决 #### 一、概述 在进行Web开发时,开发者经常会遇到无法在Web服务器上进行调试的问题。这类问题可能由多种因素引起,包括但不限于配置错误、权限设置不当、环境变量缺失等。本文将...
### WEB应用系统编码与部署安全规范知识点解析 #### 一、引言 随着互联网技术的飞速发展,WEB应用已成为企业信息化建设的重要组成部分。然而,伴随着广泛应用的同时,WEB应用的安全问题日益凸显,如SQL注入、跨站...
在讨论AJAX应用中的编码问题之前,有必要先理解MVC(模型-视图-控制器)模式的优点,这将有助于我们更好地构建Web应用程序。MVC模式允许将应用程序分为三个核心组件,分别是模型(Model)、视图(View)和控制器...
Web日志数据挖掘在服务器安全方面的应用探讨是计算机网络安全领域内的重要议题。随着互联网技术的迅速发展,网络犯罪活动层出不穷,给个人、企业乃至国家的安全带来严重威胁。服务器作为计算机网络的核心,其安全性...
Web应用安全开发规范是针对当前互联网环境中Web应用面临的安全威胁而制定的一套详细的指导原则。随着Web技术的快速发展,黑客攻击手段不断升级,Web安全问题变得尤为重要。许多开发者由于缺乏安全意识,导致开发出的...
Tomcat作为常用的Java应用服务器,其默认编码为ISO8859_1。在处理请求参数时,如果不指定编码,可能会导致中文乱码。 在B/S架构中,客户端浏览器向服务器提交数据主要有两种方式:表单(Form)提交和Ajax异步请求。...
它可以帮助开发者深入理解网络通信过程,提升Java编程能力,同时为理解和开发更复杂的Web应用打下坚实基础。虽然目前的实现存在局限性,但通过不断迭代和改进,可以逐步将其完善成一个功能完备的Web服务器。
在"实验1_web"这个压缩包中,可能包含了实现这个Web服务器的源代码、实验指导文档和相关的测试页面。通过分析和运行这些代码,学生可以亲手实践上述理论知识,观察请求和响应的交互过程,调试可能出现的问题,从而更...
Java Web开发是构建Web应用程序的核心技术之一,涵盖了众多高级主题,如服务器配置、安全性、用户体验优化等。在这个领域,我们主要关注的是Tomcat服务器的高级特性,以及如何解决Web开发中常见的问题。 1. **...
2. 扩展的B/S架构中,客户端通过Web服务器与应用服务器通信,应用服务器再与数据库交互。 3. 高级B/S架构可能包含负载均衡器(如Nginx)和中间服务器(如Node.js),以实现高性能、高可用性和分布式部署。 Web技术...
【标题】"一个绿色WEB服务器"指的是无需安装即可运行的Web服务器软件,它通常是一个便携式的、不依赖系统注册表的应用程序。这样的服务器能够帮助用户快速搭建本地Web环境,以便进行网页开发、测试或者演示。 ...
在IT领域,特别是软件开发与网络编程中,利用C#语言构建一个简易的WEB服务器是一项既具挑战性又富有教育意义的任务。以下是对基于C#实现的WEB服务器的知识点进行的详细阐述,涵盖其基本原理、核心功能以及具体实现...
- **金融行业网络安全情况**:据数据显示,在2018年,金融行业的安全问题主要集中在以下几个方面:43.81%的攻击集中在Web应用安全上,19.26%在业务安全,14.14%为安全管理,12.13%为移动应用安全,而10.66%则为系统...