请求
telnet测试:
telnet localhost 8080
# 请求组成
请求行
请求方式,URL,协议版本;
请求头
格式:头名:头值;
请求体
# 请求方式
# get
GET /test2?name=%E5%BC%A0&age=20 HTTP/1.1
Host: localhost
1
2
2
%E5%BC%A0 是【张】经过 URL 编码后的结果
# post
POST /test2 HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded
Content-Length: 21
name=%E5%BC%A0&age=18
1
2
3
4
5
6
2
3
4
5
6
application/x-www-form-urlencoed 格式细节:
- 参数分成名字和值,中间用 = 分隔;
- 多个参数使用 & 进行分隔;
张
等特殊字符需要用 encodeURIComponent() 编码为%E5%BC%A0
后才能发送;
# json
POST /test3 HTTP/1.1
Host: localhost
Content-Type: application/json
Content-Length: 25
{"name":"zhang","age":18}
1
2
3
4
5
6
2
3
4
5
6
后端接受json数据,请求参数需要加@RequestBody注解
json 对象格式
{"属性名":属性值}
1
json 数组格式
[元素1, 元素2, ...]
1
# multipart
POST /test2 HTTP/1.1
Host: localhost
Content-Type: multipart/form-data; boundary=123
Content-Length: 125
--123
Content-Disposition: form-data; name="name"
lisi
--123
Content-Disposition: form-data; name="age"
30
--123--
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
- boundary=123 用来定义分隔符
- 起始分隔符是
--分隔符
- 结束分隔符是
--分隔符--
后端接口:
@RequestMapping("/test2")
@ResponseBody
public Sting test2(String name,Integer age){//或者用一个包含name与age的对象接受
...
}
1
2
3
4
5
2
3
4
5
# 数据格式
客户端发送:
- 编码
- application/x-www-form-urlencoded :url 编码;
- application/json:utf-8 编码;
- multipart/form-data:每部分编码可以不同;
- 表单只支持以 application/x-www-form-urlencoded 和 multipart/form-data 格式发送数据;
- 文件上传需要用 multipart/form-data 格式;
- js 代码可以支持任意格式发送数据 ;
服务端接收:
- 对 application/x-www-form-urlencoded 和 multipart/form-data 格式的数据,Spring 接收方式是统一的,只需要用 java bean 的属性名对应请求参数名即可;
- 对于 applicaiton/json 格式的数据,Spring 接收需要使用 @RequestBody 注解 + java bean 的方式;