• 浏览器发送URL的编码特性


    转载自:http://blog.csdn.net/wangjun_1218/article/details/4330244

    浏览器发送URL的编码特性

    尽管有很多规范URL的标准,例如RFC 3987,但实际应用中却非常混乱。本文主要介绍浏览器发送URL到服务器的一些特性,作为开发和应用的参考。

    通常浏览器会用两种编码方式发送URL到服务器,分别是UTF-8和ANSI(当前系统语言设置,在Windows系统中可以理解为当前代码页)。接下来分别介绍几种常用浏览器发送URL的编码特性。

     

    一、直接在地址栏输入URL的情况

    中文Windows环境下,假如直接在浏览器的地址栏输入URL:

    http://www.charset.cn/中国.html?kw=中国

    1、IE浏览器特性

    PATH部分 参数部分
    UTF-8模式(默认) %E4%B8%AD%E5%9B%BD.html kw=中国
      UTF-8编码、urlencode GBK编码、无urlencode
    ANSI模式 中国.html kw=中国
      GBK编码、无urlencode GBK编码、无urlencode

    中文Windows环境下,IE中默认发送的URL的PATH部分是UTF-8编码,参数部分是GBK编码。IE的设置选项中有一项是“总是以 UTF-8 发送URL”可以改变发送URL的编码为ANSI。

    2、FireFox浏览器特性

    PATH部分 参数部分
    UTF-8模式 %E4%B8%AD%E5%9B%BD.html kw=%E4%B8%AD%E5%9B%BD
      UTF-8编码、urlencode UTF-8编码、urlencode
    ANSI模式(默认) %D6%D0%B9%FA.html kw=%D6%D0%B9%FA
      GBK编码、urlencode GBK编码、urlencode

    中文Windows环境下FireFox中默认发送的URL的PATH和参数都是GBK编码,在FireFox地址栏输入“about:config”,找到选项“network.standard-url.encode-utf8”,即可改变发送URL的编码方式。

    3、Opera浏览器特性

    PATH部分 参数部分
    UTF-8模式(默认) %E4%B8%AD%E5%9B%BD.html kw=%E4%B8%AD%E5%9B%BD
      UTF-8编码、urlencode UTF-8编码、urlencode

     

    在地址栏的url编码中,空格被编码为%20,+号不变。

     

    二、来自网页中的链接

    在不同的浏览器中打开不同编码的网页中的链接,特性也不相同。在不改变浏览器默认选项情况下访问不同编码的网页中以下链接:

    http://www.charset.cn/中国.html?kw=中国

     

    1. IE浏览器特性
    PATH部分 参数部分
    UTF-8网页 %E4%B8%AD%E5%9B%BD.html kw=中国
      UTF-8编码、urlencode UTF-8编码、无urlencode
    GBK网页 %E4%B8%AD%E5%9B%BD.html kw=中国
      UTF-8编码、urlencode GBK编码、无urlencode

     

    1. FireFox?浏览器特性
    PATH部分 参数部分
    UTF-8网页 %E4%B8%AD%E5%9B%BD.html kw=%E4%B8%AD%E5%9B%BD
      UTF-8编码、urlencode UTF-8编码、urlencode
    GBK网页 %D6%D0%B9%FA.html kw=%D6%D0%B9%FA
      GBK编码、urlencode GBK编码、urlencode

    如果改变IE默认选项为ANSI模式或者将FireFox改为UTF-8模式的访问结果可以自己测试。

     

    三、来自js的ajax请求

    ajax的GET请求在IE下不管页面是什么编码,发送的都是GBK编码(本地编码,无urlencode)。 在firefox中发送的情况,按照页面编码进行发送,并且有urlencode。

     

    四、来自网页表单提交的数据

    表单get请求,按照页面编码,urlencode
    在表单的get请求url编码中,空格被编码为+,+号编码为%2B

    几点说明:

    1. 对于开发人员而言,一定要考虑到不同环境下URL编码的不同,才能实现系统更好的兼容性。兼容性好的系统必须要能够识别来自客户端URL的编码,才能正确处理。 例如在Opera浏览器地址栏直接输入“http://www.baidu.com/s?wd=我们”,就会发现不能正确访问。
    2. 不同的WEB服务器对各种编码的URL处理也不相同,尽量不要使用中文字符作文件名。
    3. 如果写入网页中的链接包括中文字符,最好使用urlencode处理,才能和当前网页编码无关。否则有可能不能正确访问。
    4. 很多情况下浏览器的地址栏看到URL并不等同于发送到服务器的URL。要正确查看浏览器发送的到服务器URL,最好借助一些工具分析HTTP的请求头。
  • 相关阅读:
    php多态
    ssl certificate problem: self signed certificate in certificate chain
    test plugin
    open specific port on ubuntu
    junit vs testng
    jersey rest service
    toast master
    use curl to test java webservice
    update folder access
    elk
  • 原文地址:https://www.cnblogs.com/ycpanda/p/3637184.html
Copyright © 2020-2023  润新知