GET和POST区别
- 浏览器的GET和POST(原则上)
get:读取一个资源(页面、css、js、图片),具有幂等性,适合做缓存(浏览器缓存、nginx等服务器缓存),请求参数只能通过url,不同浏览器长度有限制
post:提交一个表单,返回一个页面,不幂等,不适合缓存,请求参数放在HTTP的body里,有两种格式application/x-www-form-urlencoded(key=value格式,可以嵌套)、multipart/form-data(文件类型)
get参数可以放在body里,post参数也可以放在url里,只是在浏览器请求中适用
- 接口中的GET和POST
没有浏览器请求的限制,get参数可以放在body里,post参数也可以放在url里
elasticsearch中的部分GET请求就有body
太自由也会有麻烦,所以有了接口规范/风格,比如RESTFUL,约定GET、POST、PUT和DELET分别表示获取、创建、替换和删除“资源”
- 安全性
GET和POST都不够安全,因为两种请求在网络上都是http明文传输数据的,
可以使用https,TSL(握手协议)/SSL(加密解密协议)
- 编码
url的编码是ASCII,body体的编码是binary
在url的中文,不同浏览器会按不同的编码集编码(现在大多数是utf8),所以尽量不要用中文
body体里的编码会在Content-Type里定义,比如
Content-Type: application/x-www-form-urlencoded ; charset=UTF-8
- POST会发两次请求吗
客户端会根据一定的策略,根据请求数据的大小,决定请求头和请求体一起发送到服务器,还是先发送请求头,在发送请求体
- URL长度是由不同浏览器决定的,HTTP协议没有规定,但是当URL请求长度比较长时,可以放到请求体中
网友评论