HTTP
请求由三部分构成,分别为:
- 请求行
- 首部
- 实体
请求行大概长这样
GET /images/logo.gif HTTP/1.1
,基本由请求方法、URL
、协议版本组成,这其中值得一说的就是请求方法了。
请求方法分为很多种,最常用的也就是
Get
和Post
了。虽然请求方法有很多,但是更多的是传达一个语义,而不是说Post
能做的事情Get
就不能做了。如果你愿意,都使用Get
请求或者Post
请求都是可以的
常考面试题:
Post
和Get
的区别?
- 首先先引入副作用和幂等的概念
- 副作用指对服务器上的资源做改变,搜索是无副作用的,注册是副作用的。
- 幂等指发送
M
和N
次请求(两者不相同且都大于 1),服务器上资源的状态一致,比如注册 10 个和 11 个帐号是不幂等的,对文章进行更改 10 次和 11 次是幂等的。因为前者是多了一个账号(资源),后者只是更新同一个资源。 - 在规范的应用场景上说,
Get
多用于无副作用,幂等的场景,例如搜索关键字。Post
多用于副作用,不幂等的场景,例如注册。 Get
请求能缓存,Post
不能Post
相对Get
安全一点点,因为Get
请求都包含在URL
里(当然你想写到body
里也是可以的),且会被浏览器保存历史纪录。Post
不会,但是在抓包的情况下都是一样的。URL
有长度限制,会影响Get
请求,但是这个长度限制是浏览器规定的,不是RFC
规定的Post
支持更多的编码类型且不对数据类型限制