其实二者都是在向服务器提交请求,如果非要说get是获取数据,post是提交数据的话,你可以从二者的区别理解:
-
GET请求和POST请求有什么区别?
-
get请求发送数据的时候,数据会挂在URI的后面,并且在URI后面添加一个“?”,"?"后面是数据。这样会导致发送的数据回显在浏览器的地址栏上。(get请求在“请求行”上发送数据)
-
post请求发送数据的时候,在请求体当中发送。不会回显到浏览器的地址栏上。也就是说post发送的数据,在浏览器地址栏上看不到。(post在“请求体”当中发送数据)
-
get请求只能发送普通的字符串。并且发送的字符串长度有限制,不同的浏览器限制不同。这个没有明确的规范。
-
get请求无法发送大数据量。
-
post请求可以发送任何类型的数据,包括普通字符串,流媒体等信息:视频、声音、图片。
-
post请求可以发送大数据量,理论上没有长度限制。
-
get请求在W3C中是这样说的:get请求比较适合从服务器端获取数据。
-
post请求在W3C中是这样说的:post请求比较适合向服务器端传送数据。
-
get请求是安全的。get请求是绝对安全的。为什么?因为get请求只是为了从服务器上获取数据。不会对服务器造成威胁。(get本身是安全的,你不要用错了。用错了之后又冤枉人家get不安全,你这样不好(太坏了),那是你自己的问题,不是get请求的问题。)
-
post请求是危险的。为什么?因为post请求是向服务器提交数据,如果这些数据通过后门的方式进入到服务器当中,服务器是很危险的。另外post是为了提交数据,所以一般情况下拦截请求的时候,大部分会选择拦截(监听)post请求。
-
get请求支持缓存。
-
https://n.sinaimg.cn/finance/590/w240h350/20211101/b40c-b425eb67cabc342ff5b9dc018b4b00cc.jpg
-
任何一个get请求最终的“响应结果”都会被浏览器缓存起来。在浏览器缓存当中:
-
一个get请求的路径a 对应 一个资源。
-
一个get请求的路径b 对应 一个资源。
-
一个get请求的路径c 对应 一个资源。
-
......
-
-
实际上,你只要发送get请求,浏览器做的第一件事都是先从本地浏览器缓存中找,找不到的时候才会去服务器上获取。这种缓存机制目的是为了提高用户的体验。
-
有没有这样一个需求:我们不希望get请求走缓存,怎么办?怎么避免走缓存?我希望每一次这个get请求都去服务器上找资源,我不想从本地浏览器的缓存中取。
-
只要每一次get请求的请求路径不同即可。
-
https://n.sinaimg.cn/finance/590/w240h350/20211101/7cabc342ff5b9dc018b4b00cc.jpg?t=789789787897898
-
https://n.sinaimg.cn/finance/590/w240h350/20211101/7cabc342ff5b9dc018b4b00cc.jpg?t=789789787897899
-
https://n.sinaimg.cn/finance/590/w240h350/20211101/7cabc342ff5b9dc018b4b00cc.jpg?t=系统毫秒数
-
怎么解决?可以在路径的后面添加一个每时每刻都在变化的“时间戳”,这样,每一次的请求路径都不一样,浏览器就不走缓存了。
-
-
-
post请求不支持缓存。(POST是用来修改服务器端的资源的。)
-
post请求之后,服务器“响应的结果”不会被浏览器缓存起来。因为这个缓存没有意义。
-
-
-
GET请求和POST请求如何选择,什么时候使用GET请求,什么时候使用POST请求?
-
怎么选择GET请求和POST请求呢?衡量标准是什么呢?你这个请求是想获取服务器端的数据,还是想向服务器发送数据。如果你是想从服务器上获取资源,建议使用GET请求,如果你这个请求是为了向服务器提交数据,建议使用POST请求。
-
大部分的form表单提交,都是post方式,因为form表单中要填写大量的数据,这些数据是收集用户的信息,一般是需要传给服务器,服务器将这些数据保存/修改等。
-
如果表单中有敏感信息,还是建议适用post请求,因为get请求会回显敏感信息到浏览器地址栏上。(例如:密码信息)
-
做文件上传,一定是post请求。要传的数据不是普通文本。
-
其他情况都可以使用get请求。
-
-
不管你是get请求还是post请求,发送的请求数据格式是完全相同的,只不过位置不同,格式都是统一的:
-
name=value&name=value&name=value&name=value
-
name是什么?
-
以form表单为例:form表单中input标签的name。
-
-
value是什么?
-
以form表单为例:form表单中input标签的value。
-
-
数据量限制:get有数据量限制,而post没有
等幂性:get请求的数据不会修改服务器的状态,如读取静态文件(图片、html文件等),所以这里你可以理解为是获取数据,而post一般会改变服务器的状态.比方说添加某一条数据(你所说的提交数据),那么此数据将会更改数据库的记录 ,所以,你可以理解post是向服务器提交数据
get是向服务器获取数据,而post是向服务器传递数据 其实是英文文档翻译的时候断章取义了,文档中可出这点(HTML规范在技术上定义了“GET”和“POST”之间的区别,前者意味着表单数据将(通过浏览器)编码成URL,而后者意味着表单数据将出现在消息正文中。但是规范也给出了使用建议,当表单处理是“幂等”时,应该使用“GET”方法,并且仅在那些情况下。作为一种简化,我们可以说“GET”基本上是为了获取(检索)数据,而“POST”可能涉及到存储或更新数据、订购产品或发送电子邮件等任何事情。)
The HTML specifications technically define the difference between "GET" and "POST" so that former means that form data is to be encoded (by a browser) into a URL while the latter means that the form data is to appear within a message body. But the specifications also give the usage recommendation that the "GET" method should be used when the form processing is "idempotent", and in those cases only. As a simplification, we might say that "GET" is basically for just getting (retrieving) data whereas "POST" may involve anything, like storing or updating data, or ordering a product, or sending E-mail.
所以一般GET使用传个ID值给服务器,让服务器通过ID取出数据,返回给客户端。
用户填写的数据,都用POST方法上传
但是实际开发中 不用这么细化.因为get不安全,大多都用post