-
2014-08-12 11:23:58
特殊字符
有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了。编码的格式为:%加字符的ASCII码,即一个百分号%,后面跟对应字符的ASCII(16进制)码值。例如 空格的编码值是"%20"。
下表中列出了一些URL特殊符号及编码
:替换为%3A十六进制值
1. + URL 中+号表示空格 %2B
2. 空格 URL中的空格可以用+号或者编码 %20
3. / 分隔目录和子目录 %2F
4. ? 分隔实际的 URL 和参数 %3F
5. % 指定特殊字符 %25
6. # 表示书签 %23
7. & URL 中指定的参数间的分隔符 %26
8. = URL 中指定参数的值 %3D例:要传递字符串“this%is#te=st&o k?+/”作为参数t传给te.asp,则URL可以是:
te.asp?t=this%25is%23te%3Dst%26o%20k%3F%2B%2F 或者
te.asp?t=this%25is%23te%3Dst%26o+k%3F%2B%2F (空格可以用%20或+代替)java中URL 的编码和解码函数
java.net.URLEncoder.encode(String s)和java.net.URLDecoder.decode(String s);在javascript 中URL 的编码和解码函数
escape(String s)和unescape(String s) ;
点的转义:. ==> u002E
美元符号的转义:$ ==> u0024
乘方符号的转义:^ ==> u005E
左大括号的转义:{ ==> u007B
左方括号的转义:[ ==> u005B
左圆括号的转义:( ==> u0028
竖线的转义:| ==> u007C
右圆括号的转义:) ==> u0029
星号的转义:* ==> u002A
加号的转义:+ ==> u002B
问号的转义:? ==> u003F
反斜杠的转义: ==> u005C
更多相关内容 -
HTTP 参数类型简介
2019-07-25 11:17:34HTTP 参数类型简介请求头参数 (head)路径参数 (path)查询参数 (query)请求体参数 (body) http协议 传参类型 根据参数所在协议位置可分为 四大类 请求头参数 (head) 请求头参数顾名思义,是存放在请求头...HTTP 参数类型简介
http协议 传参类型 根据参数所在协议位置可分为 四大类
请求头参数 (head)
请求头参数顾名思义,是存放在请求头中发送给服务器的参数,服务器通过解析请求头获取参数内容。通常会存放本次请求的基本设置,以帮助服务器理解并解析本次请求的body体。
参数形式如:Accept-Language : zh-CN,zh;q=0.8,zh-TW;q=0.5,en-US;q=0.3,en;q=0.2
其中
Accept-Language
为参数名称:
号后面紧跟请求的值。ps:如上则表示本次请求的语言为中文和英文。 q用来标识语种权重 值在 0-1之间
服务器根据会这个请求头选择返回的语言其他http协议中规定的参数及含义请参考 http请求头规范
当然我们也可以自定义请求头内容,参数名称和参数意义必须事先和服务器约定好否则没服务器无法理解你传输请求头的意义会忽略自定义参数。
其中 jQuery 添加请求头方式如下:$.ajax({ headers: { 'Access-Token':$.cookie('access_token') } })
ps:
cookies
是存放在每一条请求中的请求头上的特殊存储体 由于每次请求都会将全部cookies
发送给服务器 所以不建议在cookies
存储大量数据 ,也因此产生了session
技术,不过这是题外话了。路径参数 (path)
路径参数顾名思义,本次请求的资源路径,紧跟请求域名的后面,服务器通过解析路径参数获取资源位置。路径参数是用
/
分隔的一系列字符串,其意义在于对服务器资源进行统一定位,如:http://www.madmk.com/office/zhangsan
其中
/office/zhangsan
便是路径参数,其含义可解释为 找办公室里的张三,大多数情况下路径参数会代表服务器真实的文件路径。REST API的兴起赋予了路径参数更为广阔的含义,有兴趣的朋友可以找一下有关 REST API 设计的文章。
ps:其中参数如有中文 或特殊符号如
/
,:
,?
,#
,+
,=
等需要进行转义处理。查询参数 (query)
查询参数,是房放在请求地址后面的参数同样以键值对进行标识形如:
userId=1
其中
userId
表示参数名称1
表示参数的值。参数名称为可重复的。
请求地址与参数之间用?
进行分隔 多个参数之间用&
进行分隔,完整请求如下:http://www.madmk.com/a/b/c?userId=1&userId=1&age=18&sex=男
大多数情况下使用 查询参数 进行传值的是
GET
请求,所有用表单提交的GET
请求都会使用 查询参数 进行传参。ps:其中参数如有中文 或特殊符号如
/
,:
,?
,#
,+
,=
等需要进行转义处理。请求体参数 (body)
请求体参数顾名思义,是存放在请求体中发送给服务器的参数。请求体参数格式复杂多变,服务器会先根据请求头中的
Content-Type
获取其格式,然后再根据其格式进行解析,常见的格式如下:Content-Type值 内容格式 消息示例 application/from 表单传值,也是默认的解析形式,服务器会对表单进行解析 userId=1&userId=1&age=18&sex=男 text/plain 文本值,服务器会将本次请求的请求体当作普通字符串看待 Hello world application/json json,服务器会将请求体进行json解析,获取参数 {“userId”:1,“sex”:“男”} application/xml xml,服务器会将请求体进行xml解析,获取参数 参见 xml 标准格式 text/html html,服务器会将请求体进行html解析,获取参数 参见 html 标准格式 ps:其中
application/from
类型如有中文 或特殊符号如/
,:
,?
,#
,+
,=
等需要进行转义处理。类似的还有很多这里不一一列举。有兴趣可以翻一下,Content-Type介绍
-
HTTP参数污染(HPP)漏洞
2019-06-26 19:28:00HPP(HTTP参数污染) HPP是HTTP Parameter Pollution的缩写,意为HTTP参数污染。原理:浏览器在跟服务器进行交互的过程中,浏览器往往会在GET/POST请求里面带上参数,这些参数会以 名称-值 对的形势出现,通常在一个...HPP(HTTP参数污染)
HPP是HTTP Parameter Pollution的缩写,意为HTTP参数污染。
原理:浏览器在跟服务器进行交互的过程中,浏览器往往会在GET/POST请求里面带上参数,这些参数会以 名称-值 对的形势出现,通常在一个请求中,同样名称的参数只会出现一次。但是在HTTP协议中是允许同样名称的参数出现多次的。比如下面这个链接:http://www.baidu.com?name=aa&name=bb ,针对同样名称的参数出现多次的情况,不同的服务器的处理方式会不一样。有的服务器是取第一个参数,也就是name=aa。有的服务器是取第二个参数,也就是name=bb。有的服务器两个参数都取,也就是name=aa,bb 。这种特性在绕过一些服务器端的逻辑判断时,非常有用。HPP漏洞,与Web服务器环境、服务端使用的脚本有关。如下是不同Web服务器对于出现多个参数时的选择:
当网站开发者不熟悉Web服务器对于多参数时如何选择,将给攻击者可乘之机。HPP能针对客户端和服务端进行攻击。
HPP参数污染还可以用于绕过某些防火墙对于 SQL注入的检测,例如当Web服务器对多参数都同时选择时,
-
golang:解析HTTP请求参数
2020-04-15 13:38:40此案例将HTTP请求参数解析成对应的匿名结构体,并使用反射来获取字段标签。 params 解析函数 package params import ( "fmt" "net/http" "reflect" "strconv" "strings" ) // Unpack 从 HTTP 请求 req 的...《GO程序设计语言》设计中案例,仅作为笔记进行收藏。此案例将HTTP请求参数解析成对应的匿名结构体,并使用反射来获取字段标签。
- params 解析函数
package params import ( "fmt" "net/http" "reflect" "strconv" "strings" ) // Unpack 从 HTTP 请求 req 的参数中提取数据填充到 ptr 指向结构体的各个字段 func Unpack(req *http.Request, ptr interface{}) error { if err := req.ParseForm(); err != nil { return err } // 创建字段映射表,键为有效名称 fields := make(map[string]reflect.Value) v := reflect.ValueOf(ptr).Elem() for i := 0; i < v.NumField(); i++ { fieldInfo := v.Type().Field(i) tag := fieldInfo.Tag name := tag.Get("http") if name == "" { name = strings.ToLower(fieldInfo.Name) } fields[name] = v.Field(i) } // 对请求中的每个参数更新结构体中对应的字段 for name, values := range req.Form { f := fields[name] if !f.IsValid() { continue // 忽略不能识别的 HTTP 参数 } for _, value := range values { if f.Kind() == reflect.Slice { elem := reflect.New(f.Type().Elem()).Elem() if err := populate(elem, value); err != nil { return fmt.Errorf("%s: %v", name, err) } f.Set(reflect.Append(f, elem)) } else { if err := populate(f, value); err != nil { return fmt.Errorf("%s: %v", name, err) } } } } return nil } func populate(v reflect.Value, value string) error { switch v.Kind() { case reflect.String: v.SetString(value) case reflect.Int: i, err := strconv.ParseInt(value, 10, 64) if err != nil { return err } v.SetInt(i) case reflect.Bool: b, err := strconv.ParseBool(value) if err != nil { return err } v.SetBool(b) default: return fmt.Errorf("unsupported kind %s", v.Type()) } return nil }
- search 请求
package main import ( "fmt" "log" "net/http" "main/params" ) func search(resp http.ResponseWriter, req *http.Request) { var data struct { Labels []string `http:"l"` MaxResults int `http:"max"` Exact bool `http:"x"` } // 设置默认值 data.MaxResults = 10 if err := params.Unpack(req, &data); err != nil { http.Error(resp, err.Error(), http.StatusBadRequest) return } fmt.Fprintf(resp, "Search:%+v\n", data) } func main() { http.HandleFunc("/search", search) log.Fatal(http.ListenAndServe(":8080", nil)) }
-
HTTP请求各参数详解
2018-09-18 23:14:40HTTP Request的Header信息 1、HTTP请求方式 如下表: GET 向Web服务器请求一个文件 POST 向Web服务器发送数据让Web服务器进行处理 PUT 向Web服务器... -
http请求参数有中文请求报错
2020-06-09 09:50:21请求会拦截参数带有中文及特殊符号的url 需要使用encodeURIComponent来将中文及特殊符号转换为对应的码才能发送 -
HTTP GET请求方式传递数组参数
2020-08-04 20:28:15http GET请求方式如何传递数组参数?一起来看看。 先在本地服务器上来一个controller方法,我们把接收到的参数打印在控制台上,顺便多此一举地返回一下响应结果 用postman请求一下: 再来看看控制台的打印结果 ... -
Http- Post/Get请求参数值最大限制问题
2019-11-02 19:59:40Http- Post/Get请求参数值最大限制问题 网络编程都离不开Http的get/post请求。 get请求没有协议体,只有协议头,请求的参数是直接拼接在url的后面。 post有协议体也有协议头,参数值被解析成碎片存储在协议体中,... -
java http请求参数为list对象
2020-05-07 13:26:32} public static void main(String[] args) { //参数对应想要保存的实体类 下文的HttpEntity JSONObject jsonb= new JSONObject(); jsonb.put("name", "赵子龙"); jsonb.put("age", "18"); //相当于... -
JMeter实现HTTP接口请求参数化
2019-07-19 09:31:23JMeter实现HTTP接口请求参数化 HTTP请求参数化,方法有多种,这里介绍两种方法: 方法一:添加用户自定义变量 ①、选中线程组,鼠标右键选择“添加(Add)—>配置元件(Config Element)—>用户定义的变量... -
golang语言http协议get拼接参数
2020-06-20 23:52:46// Manage the HTTP GET request parameters type GetRequest struct { urls url.Values } // Initializer func (p *GetRequest) Init() *GetRequest { p.urls = url.Values{} return p } // Initialized from ... -
Web Hacking 101 中文版 六、HTTP 参数污染
2017-03-18 16:51:42六、HTTP 参数污染 作者:Peter Yaworski 译者:飞龙 协议:CC BY-NC-SA 4.0 描述HTTP 参数污染,或者 HPP,在网站接受用户输入,将其用于生成发往其它系统的 HTTP 请求,并且不校验用户输出的时候发生。它以... -
http的post请求获取不到参数的问题
2020-06-24 00:21:11http请求,spring mvc自动解析参数,需要根据header中的context-type进行解析的。 在没有指定请求的时候,将参数放到了请求体中,以form表单的形式请求到接口,接口就无法正常解析数据。 问题解决 不改变接口的情况... -
http get请求参数放在url中和放在 header中有什么区别
2021-01-19 08:45:27常见的get请求就是把参数拼接在url后面,就想了一下这两种方式有什么不一样 网上的相关信息较少(还没时间去看英文文档,,),想了一下,放在header里面和拼接在url后面都是明文,都能看到参数名以及参数值 如果... -
Web应用里的HTTP参数污染(HPP)漏洞
2011-09-08 19:24:11这也是一种注入型的漏洞,攻击者通过在HTTP请求中插入特定的参数来发起攻击。如果Web应用中存在这样的漏洞,可以被攻击者利用来进行客户端或者服务器端的攻击。下面对这个漏洞的原理做一下详细解释。 首先讲下... -
this.$http.get/post参数
2020-07-22 10:50:02传的参数是直接可以用对应类型来接收 如这里后台用(String hrpEmployeeId) this.$http.get(contextPath + '/api/hrpEmployeeInfo/printInfo', {params:{hrpEmployeeId:addView.employee.id}}).then(res=>{ this... -
关于http的refer参数
2018-10-10 15:01:26HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。比如从我主页上链接到一个朋友那里,他的服务器... -
HTTP接口的请求参数类型有哪些
2019-11-14 17:14:32一、区别于http请求的类型 get post put delete 二、类型: (1)查询字符串参数(Query String Parameters参数) 一般用于GET请求,会以url string的形式进行传递 (2)请求体参数(Request Body) 一般... -
HTTP请求中三种参数类型
2018-09-14 20:17:001.URL参数:这是一种比较简单的URL参数,参数可以直接拼接在URL后面,问好前面是接口请求的地址,后面是传递的参数,可以是多个,用&连接, 优点:简单,页面跳转比较快 缺点:get方法 的拼接长度有可能很... -
Springboot Http请求参数绑定下划线转驼峰命名
2019-07-05 16:10:381. 自定义一个ModelAttributeMethodProcessor public class CustomServletModelAttributeMethodProcessor extends ServletModelAttributeMethodProcessor { public CustomServletModelAttributeMethodProcessor... -
http GET请求方式传递数组参数
2019-03-10 14:24:21异常:java.lang.IllegalArgumentException: Invalid character found in the request target.The valid characters are defined in ...原因:get请求方式传参时,需要传递数组参数,http://localhost:8080/test?st... -
http的url参数讲解
2017-06-06 16:47:02http://localhost/1.html?id=1&page=2#section=3js代码window.location.href 获取到: http://localhost/1.html?id=1&page=2#section=3location.search ?id=1&page=2location.hash #section=3共同点 -
常见的http请求参数和响应参数,前后端交互参数说明
2022-05-01 22:25:14前后端交互请求头响应头和提交和回执参数说明。 -
Http请求带有特殊字符的参数处理
2020-02-27 18:46:15Http请求带有特殊字符的参数处理 https://blog.csdn.net/u012999796/article/details/65443934 -
http 传参数出现400错误
2018-06-21 10:44:37最近在做项目中的一个模块,一直卡在一块bug一直...**看这个解释,那应该是参数的问题,但是参数检查了一下怎么也没发现到底哪里少参数了下面这个是前端发送的参数: 下面是后端controller中的接受方法的部分: @R... -
关于HTTP GET请求的url中文参数编码
2018-12-06 21:07:03java.io.IOException: Server returned HTTP response code: 400 for URL: http://api.sms.cn/sms/?ac=send&uid=用户名&pwd=密码&mobile=手机号&template=模板编号 &... -
对于携带请求参数的HttpGet与的HttpPost两种请求方式,代码段分析
2016-12-30 15:12:00HttpGet和HttpPost两种Http请求方式,两者都可以携带参数去请求服务器。 1. 实现方式: (1) HttpGet 将参数直接填在URL后面,以“?”隔开;参数的键和值之间用“=”隔开;不同参数的之间用“&”隔开。这样... -
HTTP请求参数中特殊字符的转义
2018-01-31 10:14:00& URL中指定的参数间的分隔符 %26 = URL中指定参数的值 %3D java中URL 的编码和解码函数 java.net.URLEncoder.encode(String s)和java.net.URLDecoder.decode(String s); 在javascript 中URL 的编码和... -
从http请求中获取参数
2018-01-19 17:22:02springmvc, servlet 和 http 日后认真研究, 先记录下常用获取方式 post请求有请求体, get请求只有请求行和请求头,没有请求体 1. 直接从HttpServletRequest获取信息, 多在springmvc的拦截器中获取请求头... -
$http请求,data多参数传递的写法
2018-05-28 10:33:12data: "resourceId=" + $stateParams.resourceId + "...,这里是两个参数resourceId 和 code ,中间用 + 和 & 符号拼接 ,注意参数用双引号""引起来,参数后面带 = 号。...