get请求和post请求的区别
GET 用于从指定资源请求数据
POST 用于将数据发送到服务器来创建/更新资源
先简单做个铺垫
- 什么是通信协议?
通信协议是对计算机必须遵守的规则的描述,只有遵守这些规则,计算机之间才能进行通信。TCP/IP 是不同的通信协议的大集合。HTTP协议只是其中一种。 - 什么是 HTTP?
超文本传输协议(Hypertext Transfer Protocol,缩写 HTTP)旨在启用客户端和服务器之间的通信。 - HTTP 用于从 web 客户端(浏览器)向 web 服务器发送请求,并从 web 服务器向 web 客户端返回内容(网页)。
1、请求过程
- GET 请求过程:
浏览器发起请求 TCP 连接(第一次握手)
服务器响应进行 TCP 连接(第二次握手)
浏览器确认,并发送 GET 请求头和数据(第三次握手)
服务器返回 200 OK响应
- POST 请求过程:
浏览器发起请求 TCP 连接(第一次握手)
服务器响应进行 TCP 连接(第二次握手)
浏览器确认,并发送 POST 请求头(第三次握手)
服务器返回100 Continue响应
浏览器发送数据
服务器返回 200 OK响应
2、安全性数据长度等对比
get | post | |
---|---|---|
安全 | 安全性较差 | 更安全 |
缓存 | 能 | 不能 |
历史 | 参数保留在浏览器历史中 | 参数不会被保存在浏览器历史中 |
地址栏是否可见 | 可 | 不可 |
数据长度 | 受限制,最大长度为2048个字节 | 无限制 |
书签 | 可 | 不可 |
后退按钮/刷新 | 无害 | 数据会被重新提交 |
编码类型 | application/x-www-urlencoded | application/x-www-urlencoded或multipart/form-data。为二进制数据使用多重编码 |
这里扩展一下几种编码格式
POST请求的两种编码格式:application/x-www-urlencoded是浏览器默认的编码格式,用于键值对参数,参数之间用&间隔;multipart/form-data常用于文件等二进制,也可用于键值对参数,最后连接成一串字符传输
3报文上的区别
报文格式上,不带参数时,区别是第一行方法名不同,一个是GET,一个是POST
带参数时报文的区别是,GET 方法的参数放在 url中,POST 方法参数放在 body 中
举个栗子,如果参数是 name=qiming.c, age=22。
GET 方法报文可能是这样的
GET /index.js?name=qiming.c&age=22
POST 方法报文可能是这样的
POST /index.js
Content-Type: application/x-www-form-urlencoded name=qiming. c&age=22
4
常见HTTP状态码
状态码 | 描述 |
---|---|
200 | 成功 |
201 | 请求成功并且服务器创建了新的资源 |
202 | 服务器已接受请求,但尚未处理 |
203 | 请求正在被执行,但还没有处理完 |
204 | 服务器成功处理了请求,但没有返回任何内容 |
301 | 永久重定向 |
302 | 临时重定向 |
303 | 表示请求的资源被分配了新的URL,应使用GET方法定向获取请求的资源 |
304 | 本地缓存 |
400 | 错误请求,服务器不理解请求的语法 |
401 | 未经许可,需要通过HTTP认证 |
403 | 服务器拒绝请求 |
404 | 服务器找不到请求的资源 |
500+ | 服务器原因 |