最近在对一个url执行签名验证的时候,发现这个签名验证偶尔成功偶尔失败。我始终相信一句话“程序是科学的”,所以带着这想法一直在找为什么这个概率性的事件会发生,之前一直以为是签名验证的地方有问题,经过多方核查这个确保是正常的。后来开始分析成功失败的url有什么规律,仔细看发现失败的url里有个加号(+),而成功的里面没有,当然2个url还有很多字符都不一样,按照大的字符集来看,差别在于几个特殊字符,例如+,/之类的,然后发现只要是有加号的必然验证失败。放狗之发现众人都遇到过此问题,后来用URLEncode一把尽然好了。到此才发现如此简单的问题,其实只需要encode一把就好了。但是原因呢。为什么我这里encode了,别人没有调用对应的decode也能正常了。那这个肯定是一种潜规则了。带着这个疑问。我go之http rfc 后来找寻到了html spec。好吧,原来恶果竟由此产生。找寻恶果之书,书中自有一番陈论如下:
application/x-www-form-urlencoded
This is the default content type. Forms submitted with this content type must be encoded as follows:
1. Control names and values are escaped. Space characters are replaced by `+', and then reserved characters are escaped as described in [RFC1738], section 2.2: Non-alphanumeric characters are replaced by `%HH', a percent sign and two hexadecimal digits representing the ASCII code of the character. Line breaks are represented as "CR LF" pairs (i.e., `%0D%0A').
2. The control names/values are listed in the order they appear in the document. The name is separated from the value by `=' and name/value pairs are separated from each other by `&'.
找寻HTML: The Definitive Guide 对于encode描述如下:
The application/x-www-form-urlencoded encoding
The standard encoding-- application/x-www-form-urlencoded--converts any spaces in the form values to a plus sign (+), nonalphanumeric characters into a percent sign (%) followed by two hexadecimal digits that are the ASCII code of the character, and the line breaks in multiline form data into %0D%0A.
The standard encoding also includes a name for each field in the form. (A "field" is a discrete element in the form, whose value can be nearly anything, from a single number to several lines of text--the user's address, for example.) If there is more than one value in the field, the values are separated by ampersands.
For example, here's what the browser sends to the server after the user fills out a form with two input fields labeled name and address; the former field has just one line of text, while the latter field has several lines of input:
name=O'Reilly+and+Associates&address=103+Morris+Street%0D%0A
Sebastopol,%0D%0ACA+95472
We've broken the value into two lines for clarity in this book, but in reality, the browser sends the data in an unbroken string. The name field is "O'Reilly and Associates" and the value of the address field, complete with embedded newline characters, is:
103 Morris Street
Sebastopol,
CA 95472
空格会被编码为 + ,那相反 + 也会被译码为 空格
参考自:
1:http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1
2:http://docstore.mik.ua/orelly/web/html/ch10_01.html
分享到:
相关推荐
关于application/x-www-form-urlencoded等字符编码的解释说明 application/x-www-form-urlencoded是HTML表单提交时使用的最常见的编码格式,它将窗体数据编码为名称/值对。这种编码格式是标准的编码格式,广泛应用...
1.SendNotification.jsp:发送通知页面,表单提交数据的类型为multipart/x-www-form-urlencoded 2.RecvNotification.jsp:接收通知页面 3.页面简单使用了Bootstrap样式 4.开发工具使用IDEA
Java 编码互转(application/x-www-form-urlencoded)知识点 本文将详细讲解 Java 编码互转的相关知识点,包括 URL 编码、URL 解码、application/x-www-form-urlencoded MIME 格式、UTF-8 编码机制、HTML 格式编码...
x-www-form-urlencoded符合Serde这个箱子是一个Rust库,用于序列化到application / x-www-form-urlencoded格式和从中反序列化。 x-www-form-urlencoded符合Serde这个箱子是一个Rust库,用于序列化到application / x-...
在Web开发中,当涉及到通过HTTP协议向服务器发送POST请求时,我们经常需要选择不同的数据编码类型,主要是`application/x-www-form-urlencoded`和`multipart/form-data`。这两种编码方式各有其适用场景,主要取决于...
title: x-www-form-urlencoded与form-data区别date: 2016-1-21 00:00:00 #发表日期,一般不改动cate
表单数据到对象将application / x-www-form-urlencoded数据结构转换为纯JS对象原料药formData.toObj() -将对象上x-www-form-urlencoded格式的键转换为普通对象formData.fromObj() -将普通对象转换为带有x-...
返回“ x-www-form-urlencoded”字符串数据,这时经常使用的编码。 表单数据以序列化并发送到服务器。 import formurlencoded from 'form-urlencoded' ; // or: // var formurlencoded = require('form-urlencoded...
一个简单插件,它为内容类型application/x-www-form-urlencoded添加了一个内容类型解析器。 该分支针对 Fastify v3。 Fastify ^2.0.0兼容性请参考及相关版本。 例子 鉴于以下代码: const fastify = require ( '...
通常前端通过POST请求向服务器端提交数据格式有4中,分别是”application/x-www-form-urlencoded”格式、” multipart/form-data”格式、”application/json”格式和”text/xml”格式。通常最常见的是”application/...
在发送HTTP请求时,尤其是POST请求,表单数据通常需要被序列化成URL编码格式(application/x-www-form-urlencoded)。URL编码是一种标准的编码方式,将非ASCII字符转换为ASCII字符,并在每个字符前加上百分号%以表示...
**ContentType使用**:将ContentType设置为`application/x-www-form-urlencoded`,这是为了确保URL中的参数能够正确地编码并被解析。 2. **Adapter-Specific Message Attributes配置**:在这一部分,需要选中以下...
Power Builder 12.5,使用ole MSXML2.ServerXMLHTTP方式,对接WEB API,以选用JSON和x-www-form-urlencoded方式提交数据,POST/GET方式均可。
Content-Type: application/x-www-form-urlencoded Content-Length: length ll_a=string&ll_b=string*/ /*获取结果 HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 Content-Length: length ...
具有字段值数据对的查询字符串是在URI或具有默认application/x-www-form-urlencoded内容类型的请求正文中传输消息的标准形式。当在URI或请求正文中使用查询字符串数据源时,最新的Web API 2和ASP.NET MVC 5仅支持...
互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术...
为此,我们需要在发送请求前设置`Content-Type`头部,例如设置为`"application/x-www-form-urlencoded; charset=utf-8"`,确保数据以正确的编码发送。在JavaScript中,可以这样做: ```javascript var xhr = new ...
该工具使用 C# 多线程开发,可以很方便的模拟Http的get及post、application/x-www-form-urlencoded 二进制请求,或者其他方式的请求来调试接口。 可对以提交的数据参数进行保存,便于下次使用。
Go JSON处理程序FormJSON是一个net / http处理程序,实现发布数据的内容协商,以便透明地公开发布的JSON,就好像它是application / x-www-form-urlencoded一样。 然后可以使用Goi JSON处理程序使用发布的数据Form...