浏览器发送请求过程解析1.6

上传人:kms****20 文档编号:39635350 上传时间:2018-05-18 格式:DOCX 页数:15 大小:40.82KB
返回 下载 相关 举报
浏览器发送请求过程解析1.6_第1页
第1页 / 共15页
浏览器发送请求过程解析1.6_第2页
第2页 / 共15页
浏览器发送请求过程解析1.6_第3页
第3页 / 共15页
浏览器发送请求过程解析1.6_第4页
第4页 / 共15页
浏览器发送请求过程解析1.6_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《浏览器发送请求过程解析1.6》由会员分享,可在线阅读,更多相关《浏览器发送请求过程解析1.6(15页珍藏版)》请在金锄头文库上搜索。

1、6.1 HTTP 协议及浏览器编码行为协议及浏览器编码行为HTTP 协议和浏览器是 Web 国际化的基础,在进入 Java 服务器端之前,必须先对它们的编 码行为有所了解。6.1.1 HTTP 协议协议HTTP 协议是 B/S 体系结构应用程序的基础,只有了解了 HTTP 协议,才能理解如何在 B/S 体系结构下实现应用程序的国际化。1 1HTTPHTTP 请求请求当用户在浏览器的地址栏中输入一个 URL 并按回车键之后,浏览器会向 HTTP 服务器发送 HTTP 请求。HTTP 请求主要分为“Get”和“Post”两种方法。2 2采取采取“Get”“Get”方法的方法的 HTTPHTTP 请

2、求请求“Get”请求的典型用途是从 HTTP 服务器获取指定的资源,这样的请求不包含请求体。 在浏览器中输入一个 URL 并按回车键后,浏览器就会生成这种 类型的请求。HTTP 服务器 根据该请求所包含 URL 中的参数来动态产生响应内容,即“Get”请求的参数是 URL 的一部分。 例如:http:/ URL 是一个使用百度搜索关键字“Chinese”的 URL,参数“wd”包含在 URL 中,一起 发送到 HTTP 服务器,参数的值是“Chinese”。当参数名和参数值都是 ASCII 字符时不会出现 问题,但当参数名或参数值中包含非 ASCII 字符时就有可能出现问题。 由于 URL 通

3、过网络传递,因此,为了保证信息的兼容性和通用性,当 URL 包含非 ASCII 字符时,必须对其进行转义。如果将上例中的参数值改为“中文”,则 URL 变为:http:/ Firefox2.0)的地址栏中输入上述 URL 并按回车键后,可以 看到浏览器会自动对 URL 进行转义,得到的是:http:/ GBK 编码对应的转义形式。另外,不同的浏览器对 URL 进行转义的行为是不同的,具体内 容请参阅 6.1.2 节的介绍。 当 HTTP 服务器收到这样的请求时,必须先将转义的字符解释为有效的字符,再对 URL 进行处理。但是,HTTP 协议中并没有指定使用何种编码和字符 集来解释 URL 中的

4、非 ASCII 字符(细节可参阅 RFC2396,2.1 节),因此,是否能成功解析就完全取决于 URL 中非 ASCII 内容的编码是否与 HTTP 服务器的解析编码一致。例如,如果我们希望在 Google 中 也搜索“中文”,构造如下 URL:http:/ URL 并按回车键后,会发现搜索结果页面查询的关键字并 不是“中文”而是一个不能识别的乱码。这是因为 Google 的 HTTP 服务器使用 UTF8 编码来解 释 URL 中的非 ASCII 字符。如果使用下面以 UTF8 编码的 URL 就能得到正确的结果:http:/ 在不同区域的服务器可能会使用不用的编码方式来解析 URL。例如

5、 可以正确解析:http:/ 只能正确解析:http: / 而且,由于 Google 可以根据用户浏览器的区域设置自动将用户重定向到某个特定区域 的服务器上,因此在 Firefox 中,如果浏览器的首选区域是 zh-cn,那么访问如下 url:http:/ 会被自动重定向到 http: / /search?q=%D6%D0%CE%C4,因此,显示的结果是正确的。3 3采取采取“Post”“Post”方法的方法的 HTTPHTTP 请求请求“Post”请求通常用来向 HTTP 服务器提交量比较大的数据(比如请求中包含许多参数或 者文件上传操作等),它与“Get”方法的主要区别在于请求的参数包

6、含在消息体而非 URL 中,服务器同样需要获得正确的编码信息才能够正确解析在消息体中的请求参数。在 “Post”方法的 HTTP 请求中,通常包含一个“Content-Type”消息头指明该消息体的媒体类型 和编码,如“Text/XML; charset=gb2312”,指明该请求的消息体中包含的是纯文本的 XML 类 型的数据,字符编码采用“gb2312”。 (在 request 方式中就不行吗?) 使用一些 Firefox 插件可以辅助开发人员分析请求的消息头和消息体,较常用的有 Firebug 等。4 4HTTPHTTP 响应响应HTTP 响应是 HTTP 服务器在接收请求之后向客户端返

7、回的信息。一个 HTTP 响应通常由状态行、消息头和消息体组成。HTTP 响应消息的第一行是 状态行,表示服务器对请求 的应答。常见的应答有:“200:OK”、“404:Not Found”、“500:Internal Server Error”等。 与 HTTP 请求类似,HTTP 响应消息也包含一个“Content-Type”消息头,它指定了消息体 中内容的类型和编码,例如 “text/html; charset=UTF-8”。只有正确指定了“Content-Type”消 息头,浏览器才能正确解析收到响应消息体中的数据并呈现页面。6.1.2 浏览器行为分析浏览器行为分析浏览器是发送 HTT

8、P 请求和接收 HTTP 响应的客户端,HTTP 协议保证了大多数情况下 浏览器行为的一致性,但不同浏览器之间仍有许多差异。这些差异经常导致 B/S 体系结构 应用程序的开发变得困难。本节着重解释不同浏览器在涉及国际化方面的不同行为。1发送请求发送请求使用浏览器发送 HTTP 请求有多种方式: 在浏览器地址栏中直接输入 URL; 在页面中通过点击“提交”按钮提交表单; 用户在页面中点击超链接产生的请求; 使用 JavaScript 脚本的 XMLHTTPRequest 对象发送请求。(1)在浏览器地址栏中直接输入 URL当 URL 中包含非 ASCII 码字符时,Firefox 会自动将这些字

9、符进行转义,转义使用的编 码由浏览器的语言版本决定。例 如,“http:/ http:/ %C4。 Firefox 也提供了使用 UTF-8 进行 URL 编码的选项。在地址栏中输入“about:config”,并 按回车键打开配置页面,在过滤器中输 入“network.standard-url.encode-utf8”以定位到该选 项,如图 6-1 所示。将该选项的值修改为 true,以使 Firefox 始终用 UTF-8 对 URL 进行转义。 这样,上述 URL 将转义为 http:/ %E6%96%87。默认情况下,中文 Windows 平台上的 IE 浏览器将 URL 分为两个部分

10、,“?”之前的部分 URL 使用 UTF8 进行转义,而“?”之后的参数部分, 则不进行转义而直接使用 GBK 编码发 送。例如 URL“http:/localhost/中文.jsp?test=中文”,前一个“中文”将按照 UTF8 编码的转义 形式“%E4%B8%AD%E6%96%87”发送,而参数部分的“中文”则直接以 GBK 编码发送,因此, 最终发送的 URL 如图 6-2 所示。在 IE 的“Internet 选项”的“高级”选项卡页中有一个选项“总是以 UTF-8 发送 URL”,在缺 省情况下该选项是选中的。如果去掉这个选项,IE 将会以系统当前的代码页来对 URL 进行 编码。

11、在中文 Windows 中整个 URL 都将以 GBK 编码发送,如图 6-3 所示。(2)在页面中通过单击“提交”按钮来提交表单在表单中属性“method”用来指定提交表单时所使用的 HTTP 请求方法,可以选择 Post 或者 Get。用户不指定时,默认采用 Get 方法。而表单所提交内容采用的编码则由页面当 前的编码决定。例如,在一个 JSP 中包含以下表单代码: =formencoding.jsp=在 IE 或 Firefox 浏览器中打开该页面,在“中文”输入框中填入“中文”并单击“提交”按钮,会 产生一个 Get 请求,所使用的 URL 为:http:/localhost:8080

12、/jsbook/formencoding.jsp?%D6%D0%CE%C4=%D6%D0%CE%C4即使用 GBK 编码对 URL 进行转义。如果将该页面的 contentType 重置为 contentType=“text/html; charset=UTF-8“,则该表 单所产生的 URL 为:http:/localhost:8080/jsbook/formencoding.jsp? %E4%B8%AD%E6%96%87= %E4%B8%AD%E6%96%87%即使用 UTF-8 编码对 URL 进行转义。如果表单使用 Post 方法,则提交的参数将放在请求的消息体中,而使用的编码方式仍

13、将由该页面的编码方式决定。(3)在页面中单击超链接产生的请求用户单击页面中的超链接时,浏览器将会产生一条“Get”请求。这个请求的 URL 使用的 编码方式由当前页面使用的编码及使用的浏览器共同决定。我们仍然使用前文的例子 “http:/localhost/中文.jsp?test=中文”来说明。 在 IE 中,页面编码为 UTF8 时,这一请求中“?”前的部分将以 UTF8 编码转义,而“?” 后的参数部分将直接使用 UTF8 编码发送;当页面编码为 GBK 时,请求中“?”前的部分仍 以 UTF8 编码转义,而“?”后的参数部分将直接使用 GBK 编码发送。 在 Firefox 中,页面编码

14、为 UTF8 时,整个 URL 将以 UTF8 编码转义。如果页面编码为 GBK,则请求以 GBK 编码转义。 如果在 IE 中禁用了“总是以 UTF-8 发送 URL”选项,那么当页面编码为 UTF8 时,这一请 求中“?”前的部分将以 UTF8 编码转义,而“?”后的参数部分将直接使用 UTF8 编码发送; 当页面编码为 GBK 时,整个请求都将直接使用 GBK 编码发送。(4)使用 XMLHTTPRequest 对象发送请求最后,我们来看一下使用 JavaScript 脚本来发送请求的情形。XMLHTTPRequest 对象(下面简称 XHR)是构成 Ajax 应用程序的基础,它允许 JavaScript 脚本直接向服务器发送 HTTP 请求,在页面不刷新的前提下与服务器通信,提交和获取数据。 使用 XHR 对象发送请求也分为 Get 和 Post 两种。 IE 中使用 XHR 对象发送“Get”请求时,对 URL 所使用的编码规则和在地址栏中输入 URL 是一致的。 Firefox 中使用 XHR 对象发送“Get”请求时始终使用 UTF-8 编码对 URL 进行转义,而发送 “Post”请求时,参数和 URL 分离,参数 部分在消息体中,使用 UTF-8 编码。要使 Web 服务 器能够正确识别,最好在 Content-type 消息头中添加“Cha

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号