在前后端交互中,GET
和POST
是两种最常见的HTTP请求方法,它们有许多不同之处也有相同之处。
它们只是 HTTP 协议为了不同分工而规定的两种请求方式,所以它们的底层都是基于TCP/IP协议实现的,它们都可以实现前后端的双向交互。
GET多用于从后端获取资源,并且不会改变后端的资源数据,比如用搜索引擎搜索。而POST多用于向后端发送数据,以创建/更新资源,比如前端的注册/登录。
区别一:参数传递
这是最直观的区别,GET请求传递的参数会通过URL传递,参数就用?
接在URL后面,有多个参数就用&
连接,比如http://abcd.com/resource?id=123
,且这个参数的长度通常也是有限制的,通常限制为2k,当然不同的浏览器、不同的版本限制的长度可能会不同,但是一定会有限制。而POST的参数一般是包含在请求体request body
中的,所以它对参数的长度没有限制。
tips
:当然,使用HTTP发接口请求不管是GET还是POST都是不安全的,因为HTTP在网络上是明文传输,所以要安全性的话可以使用HTTPS。
区别二:安全
上面说到GET请求传递的参数会通过URL传递,参数会直接暴露在URL上,所以它的安全性较差。而POST会更安全一点,因为它请求的参数不会被保存在浏览器历史或 web 服务器日志中:浏览器历史记录主要存储访问过的URL,对于GET请求,查询字符串(如果有的话)会被包含在URL中,因此可能会被浏览器历史记录。然而,对于POST请求,参数是在请求体中发送的,所以这些参数不会被浏览器历史记录。
区别三:缓存
GET请求一般都会被浏览器缓存,而POST请求如果不设置的话是不会被缓存的。
区别四:回退和刷新
GET 请求可以直接进行回退或刷新,并不会对用户和程序产生任何影响,这个操作是无害的。而 POST 请求的数据则会被重新提交。
区别五:书签
GET请求的URL可以被收藏为书签,而POST请求的地址不可以被收藏为书签。
讲到GET和POST请求,就不得不讲一讲现在Web设计的主流风格 --- RESTful API
。
RESTful API提倡使用HTTP的标准方法GET,POST,PUT等操作资源,通过这些方法来描述操作:
GET
:检索获取资源。POST
:新增资源。PUT
:更新整个资源。PATCH
:更新指定资源。DELETE
:删除资源。
比如:
GET /users
是获取所有用户的信息,而GET /users/{userId}
则是获取指定用户的信息。
HTTP状态码
RESTful API设计鼓励使用HTTP状态码来表明请求的结果,这些状态码能告知用户端请求处理的结果。这些状态码总共分成五类:分别是1xx,2xx, 3xx, 4xx, 5xx。因为1开头的状态码几乎遇不到,所以这里先不讲,这里主要讲讲常用的状态码:
2xx: 表示请求成功并且已被后端接收
-
200 OK
,最常见,表示请求成功,数据可以正常返回。 201 Created
表示请求成功,通常用于POST请求,表示已经创建了一个新的资源。204 No Content
表示请求成功,但后端返回的响应中没有内容。
4xx: 表示请求有错误,后端无法正确处理
400 Bad Request
表示请求失败,可能是语法错误。401 Unauthorized
表示请求失败,可能是用户认证没通过。403 Forbidden
表示后端收到请求,但是前端没有权限。404 Not Found
表示后端收到请求,但是前端要的数据后端没有。
5xx: 表示后端在处理请求的时候出现了错误
500 Internal Server Error
请求失败,后端内部出现错误。
GET和POST是两种最常见的HTTP请求,GET 适合用于数据查询和检索,而 POST 更适合用于数据的创建或更新。它们最明显的区别就是 GET 请求的参数要放在 URL 上,而 POST 请求的参数要放在请求体中。