浏览器发送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=中国
- 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 | 
- 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
几点说明:
- 对于开发人员而言,一定要考虑到不同环境下URL编码的不同,才能实现系统更好的兼容性。兼容性好的系统必须要能够识别来自客户端URL的编码,才能正确处理。 例如在Opera浏览器地址栏直接输入“http://www.baidu.com/s?wd=我们”,就会发现不能正确访问。
 - 不同的WEB服务器对各种编码的URL处理也不相同,尽量不要使用中文字符作文件名。
 - 如果写入网页中的链接包括中文字符,最好使用urlencode处理,才能和当前网页编码无关。否则有可能不能正确访问。
 - 很多情况下浏览器的地址栏看到URL并不等同于发送到服务器的URL。要正确查看浏览器发送的到服务器URL,最好借助一些工具分析HTTP的请求头。
 
浏览器发送URL的编码特性的更多相关文章
- JavaScript对浏览器的URL进行编码、解码
		
关于url编码,js有三个函数.有三个解码方法,escape,encodeURI,encodeURIComponent().有三个解码方法,unescapse,decodeURI,decodeURIC ...
 - URL 字符编码
		
URL 编码会将字符转换为可通过因特网传输的格式. URL - 统一资源定位器 Web 浏览器通过 URL 从 web 服务器请求页面. URL 是网页的地址,比如http://www.cnblogs ...
 - html-----018----HTML Web Server/HTML URL 字符编码
		
HTML Web Server 如果希望向世界发布您的网站,那么您必须把它存放在 web 服务器上. 托管自己的网站 在自己的服务器上托管网站始终是一个选项.有几点需要考虑: 硬件支出 如果要运行“真 ...
 - URL的编码和解码
		
URL的编码和解码 参考:阮一峰--关于URL编码 1 为什么要URL编码 在因特网上传送URL,只能采用ASCII字符集 也就是说URL只能使用英文字母.阿拉伯数字和某些标点符号,不能使用其他文字和 ...
 - 为何要对URL进行编码
		
为何要对URL进行编码 我们都知道Http协议中参数的传输是"key=value"这种简直对形式的,如果要传多个参数就需要用“&”符号对键值对进行分割.如"?na ...
 - 使用HttpClient配置代理服务器模拟浏览器发送请求调用接口测试
		
在调用公司的某个接口时,直接通过浏览器配置代理服务器可以请求到如下数据: 请求url地址:http://wwwnei.xuebusi.com/rd-interface/getsales.jsp?cid ...
 - [网络] 在浏览器输入URL回车之后发生了什么
		
目录 一 前言 二 URL解析 三 DNS域名解析 1 IP 地址 2 什么是域名解析 3 浏览器如何通过域名去查询 URL 对应的 IP 呢 4 小结 四 建立连接 1 TCP三次 ...
 - 【Web】URI和URL,及URL的编码
		
URI和URL是什么,以及他们的区别 URL,Uniform Resource Locator,统一资源定位符.用于表示网络上服务器的资源所在位置,比如我们输入浏览器的地址. URI,Uniform ...
 - 从浏览器输入url到页面加载完成都发生了什么
		
一个http请求的过程 简要介绍一下一个http请求的网络传输过程: DNS Lookup先获得URL对应的IP地址 Socket Connect浏览器和服务器建立TCP连接 Send Request ...
 
随机推荐
- Python3 小工具-ARP扫描
			
from scapy.all import * import optparse import threading import os def scan(ipt): pkt=Ether(dst='ff: ...
 - 科普:PCI-E插槽都有哪些样子?
			
主板上的扩展插槽曾经是多种多样的,例如曾经非常流行的组合就是PCI插槽搭配AGP插槽,其中AGP插槽主要用在显卡上,而PCI插槽的用途则更广一些,不仅有用在显卡上,还能用于扩展其它设备,如网卡.声卡. ...
 - 11.24Daily Scrum(4)
			
人员 任务分配完成情况 明天任务分配 王皓南 实现网页上视频浏览的功能.研究相关的代码和功能.1007 实现视频浏览的功能 申开亮 实现网页上视频浏览的功能.研究相关的代码和功能.1008 实现视频浏 ...
 - 20172332 实验一《Java开发环境的熟悉》实验报告
			
20172332 2017-2018-2 <程序设计与数据结构>实验一报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 于欣月 学号:20172332 实验教师:王 ...
 - Ligerui首页的快速搭建
			
一.目录 1.多层架构+MVC+EF+AUTOFAC+AUTOMAPPER: 2.MVC中验证码的实现(经常用,记录备用) 3.Ligerui首页的快速搭建 4.Ligerui Grid组件--学生信 ...
 - Sqoop使用笔记(转载)
			
Sqoop是Apache顶级项目,主要用来在Hadoop和关系数据库中传递数据.通过sqoop,可以方便的将数据从关系数据库导入到HDFS,或将数据从HDFS导出到关系数据库. 关于Sqoop 官网S ...
 - WEB安全测试要点总结
			
一.大类检查点: 二.测试项详细说明 上传功能 绕过文件上传检查功能 上传文件大小和次数限制 注册功能 注册请求是否安全传输 注册时密码复杂度是否后台校验 激活链接测试 重复注册 批量注册问题 登录 ...
 - Tiny4412 LED 程序
			
package cn.hyc.led; import android.os.Bundle; import android.app.Activity; import android.view.Menu; ...
 - Java多线程同步机制之同步块(方法)——synchronized
			
在多线程访问的时候,同一时刻只能有一个线程能够用 synchronized 修饰的方法或者代码块,解决了资源共享.下面代码示意三个窗口购5张火车票: package com.jikexueyuan.t ...
 - 【python】 可迭代对象、迭代器、生成器
			
可迭代对象 iterable 可直接作用于for循环的对象统称为可迭代对象. 有 list. dict.tuple.set.str等数据类型,还有 generator(包括生成器和带yield的gen ...