URL编码:
可以理解为对一个字符串进行编码,在表单编码中也用到这个算法。
用途:
一个URL可以包含任何字符,URL编码可以把这个URL编码成只用ASCII码就可以表示的形式。编码后的URL在任何机器上都可以正常显示。
例如:你在浏览器地址栏输入一个URL,浏览器会首先对这个URL进行URL编码,然后再发送给web服务器。比如输入了“中”字,浏览器会编码成%E4%B8%AD发送给服务器。
浏览器编码的字符集是由用户进行配置的,在 IE选项 - 高级 - 国际 栏中,有个“发送UTF-8 URL”的checkbox,如果选中,URL将以UTF-8的编码发送给客户端,否则,会使用本机的缺省编码(在我的机器上是GBK)对URL进行编码。
编码算法:
输入一个字符串和编码字符集,输出编码后的字符串。
主要处理过程:
1 String变成流
- 普通字符直接保留给输出 (大小写字母,数字,[-_.*])
- 如果是空格,转换成+
- 其它字符保留到下一步处理
2 未处理的字符把流按输入的编码字符集获取流
按字节首先加%, 再转换成16进制的形式,16进制中的字母需用大写字母。
算法非常简单,说明如下:
1 你可以把字符分成保留和不保留两部分,例如A是保留字符,直接放到输出字符串中。非保留字符处理成%XX的形式,即先转换成字节码,每个字节再转换成XX的形式,前面加上%。
2 空格转换成+号,+号会转换成%2B (此处比较诡异,后面还会提到)
很多地方可以找到URL编码的源码:
// URL编码源码位置
jdk: 工具类java.net.URLEncoder类encode方法
apache: org.apache.commons.codec.net.URLCodec类encodeUrl方法
表单编码:
表单编码的目的是把form中的数据编码后发给服务器。
表单有两种类型: application/x-www-form-urlencoded, multipart/form-data,前一种是form的默认类型;后一种主要用来传输二进制数据,比如我们使用form上传文件,就要使用multipart/form-data类型。
application/x-www-form-urlencoded表单编码:
这种情况form中含有很多键值对,编码规则是对键,值分别使用URL编码,然后用=号和&连接起来。
例如: name1, value1, name2, value2编码后就成了 name1=value1&name2=value2
如果这是form的方法是get,编码后的表单就通过查询字符串发送给服务器,如果form的方法是post,表单通过http请求的正文发送。
源码:
// 表单编码源码位置
org.apache.commons.httpclient.util.EncodingUtil类doFormUrlEncode方法。
没有解决的问题:
1 通过tomcat测试,在web.xml文件中可以配置中文URL,在我的机器上,URL被tomcat用UTF-8进行编码,这个可以进行配置吗? 如果可以配置,能配置支持两种编码吗? 举个例子,我有一个含有中文的URL,我想让使用UTF-8编码和GBK编码发送URL的用户都能通过中文链接访问这个网址,如果不能直接配置,实现这个功能就会很麻烦。
2 服务器如何知道客户端发送的URL的编码? 开始的猜测服务器可以根据用户请求头里的Accept-Charset进行判断,但是客户端可能从其他地方获取了一个不在自己Accept-Charset内的编码,服务器如何处理?
3 浏览器和服务器对"空格"和"+"号的处理很让人疑惑。
浏览器端:经过试验,浏览器对空格处理成%20,对+号不做处理。
服务器端:如果在web.xml配置了一个含有"+"号的路径,那么服务器端对提交的+号和%2B都能找到这个路径。
这是一个让人迷惑的结果,但想想也有一定道理,从浏览器的角度,按照URL编码规则,把空格编码成+号,把+号编码成%2B很容易,但从服务器来看,就不太好处理,如果收到一个含有+号的URL,到底把这个URL看成编码前的还是编码后的呢? 个人感觉在这点上URL编码是有缺陷的,所以几款浏览器把URL中的空格编码成了%20,但是为什么不一鼓作气把+也编码成%2B? 这样服务器不就彻底解脱了。脑子里还是有点乱,先留个脚印,找时间再研究。
分享到:
相关推荐
5. **应用实例**:在HTML表单提交中,表单数据自动进行URL编码,而在服务器端接收时,通常会自动解码。此外,在构建RESTful API或处理查询参数时,也需要理解并使用URL编码。 6. **安全性考量**:虽然URL编码主要...
URL编码是互联网上的一种标准编码方式,用于将特殊字符转换为可安全传递的ASCII字符串,以便在URL(统一资源定位符)中使用。这个“URL编码转换工具”就是专门为了帮助开发者解决这个问题而设计的。它能够将URL中的...
在处理网页表单提交或构建动态链接时,URL编码尤其重要。当用户输入的数据包含特殊字符时,为了防止数据丢失或误解,这些字符需要在传输前进行编码。同样,服务器在接收到这些数据后,需要解码以便正确解析和处理。 ...
本文主要探讨了一个XSS三重URL编码绕过的实例,揭示了在某些情况下,简单的防御措施可能不足以阻止攻击。 首先,我们要理解XSS的基本概念。XSS攻击通常发生在Web应用程序未能正确过滤或转义用户输入的情况下。当...
在IT行业中,URL编码(又称为百分号编码)是一种用于在网络应用中表示非ASCII字符或特殊字符的标准。这种编码方式是HTTP协议的一部分,确保数据可以在URL中安全传输。本话题将详细探讨“url编码解码源代码”,以及...
在实际应用中,URL编码常见于网页表单提交、查询参数传递、API调用等场景。例如,当你在浏览器的地址栏输入包含空格的网址并回车时,浏览器会自动对空格进行编码。同样,在发送GET请求时,查询字符串中的每个参数也...
URL编码,全称为统一资源定位符(Uniform Resource Locator)编码,是互联网上数据通信的一种标准格式,用于将非ASCII字符或者其他特殊字符转换成可以在HTTP请求中传输的形式。在C++中实现URL编码涉及到字符串处理、...
在网页表单提交、链接重定向或数据查询字符串中,URL编码是至关重要的。例如,如果你在一个搜索框输入包含空格的关键词,浏览器会自动将空格转换为"%20",这样搜索引擎就能理解并正确处理这个请求。 此外,URL编码...
本文将深入探讨URL编码的原理、用途以及如何使用相关工具进行编码和解码。 首先,URL(Uniform Resource Locator)即统一资源定位符,是互联网上资源的唯一地址。由于URL可能包含各种字符,如空格、特殊字符等,而...
UrlEncodeUrlDecodeUrl解码Url编码工具正是为了解决这一问题而设计的。它是一个实用的小工具,能够帮助用户对URL进行编码和解码,确保数据在通过网络传递时保持完整性和可读性。 URL(统一资源定位符)是互联网上的...
通过URL打开表单时,可以传递参数给表单。这通过在URL中添加参数键值对的形式实现。例如,在form_params参数中可以设置特定的键值对来传递表单需要的配置或数据。 知识点七:链接点击登录后打开特定表单的场景 在...
在网页开发中,URL编码常用于表单提交,防止数据中的特殊字符干扰请求的解析。同时,它也用于构建动态链接,确保链接的可读性和正确性。 在压缩包文件中,`code.exe`很可能是该URL编码转换工具的可执行程序,用户...
1. **表单提交**:当用户在HTML表单中输入数据并提交时,浏览器会自动对非ASCII字符和特殊字符进行URL编码。 2. **查询字符串**:在URL的查询部分,如果包含空格或其他特殊字符,这些字符需要编码以防止解析错误。 3...
URL编码,全称为统一资源定位符(Uniform Resource Locator)编码,是互联网上数据通信的一种标准格式,用于将非ASCII字符转换为可以在Web上安全传输的形式。URL编码的主要目的是确保URL中的特殊字符不会被误解析,...
URL编码遵循一个简单的规则:对URL中的每个非字母数字字符(除ASCII字符集中A-Z、a-z、0-9、'-'、'.'、'_'、'~'外的字符),使用%加上该字符的ASCII值的十六进制表示。例如,空格字符 ' ' 的ASCII值为32,编码后的...
本工具旨在提供一个方便、高效的解决方案,支持URL编码和解码的双向操作。 URL编码,也称为Percent-encoding,是URI(统一资源标识符)的一部分,用于在不安全或非ASCII字符出现在URL中时进行转换。这是因为URL格式...
在实际应用中,URL编码通常与HTTP请求相关,比如在发送GET请求时处理查询参数,或者在POST请求中编码表单数据。此外,它也在构建RESTful API和处理JSON数据时起到关键作用,确保数据能够正确地在网络上传输和解析。 ...
URL编码是互联网应用中常见的一种技术,它允许非ASCII字符在URL(统一资源定位符)中传输。PHP作为一种广泛用于Web开发的语言,提供了内置函数来支持这种编码转换。 【描述】:“基于PHP的URL编码转换工具.zip” ...
3. **应用场景**:URL编码常用于提交表单数据,特别是GET请求时,当数据包含在URL中;在构建动态链接时,确保链接的可读性和正确性;以及在处理查询字符串时,确保特殊字符不会干扰解析。 4. **版本升级的意义**:...