优秀的编程知识分享平台

网站首页 > 技术文章 正文

Python 闲谈 16——http中 GET 和 POST到底有什么区别?

nanyue 2024-11-06 11:17:31 技术文章 3 ℃

http中 GET 和 POST到底有什么区别?

记得 Python大星早年面试的时候,会碰到面试官抛出这种问题。那么,为什么面试官会问这种看似很简单的问题呢?现在不知道还有没有面试官问这种问题,如果碰到了,评论下欢迎你的留言。

先讲一个故事:

这是发生在前后端联调的真实故事(情节“美化”,自行脑补)。

前端索隆:喂,你这接口返回没数据?坑货。。。

后端山治:绿藻头,我这 postman 返回数据没问题,你用你眼珠子看下截图。

前端索隆:臭厨师,你看我这截图?请求参数和你这一样,就是没有数据。

后端山治:这个接口需要登录才能调用,你 header 里传 token 了没有?

前端索隆:文档也不写清楚,谁知道啊!!!

... 5 分钟过去了

前端索隆:我去,你这白痴卷眉,获取分页 list ,你用啥 POST 干毛线!GET 请求啊!

后端山治:你个路痴,GET 调不通,你不会改用 POST 啊,你用 POST 会死啊!

...


聊聊 http 中 GET 和 POST 到底有什么区别?

先谈下两者的共同点,GET、POST请求都是 http 请求方式,用户通过不同的 http 的请求方式完成对资源(url)的操作。

GET、POST、PUT 和 DELETE 就对应着对这个资源的查,改,增,删 4个操作。具体来说,GET 一般用于获取/查询资源信息,而 POST 一般用于更新资源信息。


① GET 请求提交的数据会在地址栏显示出来,而 POST 请求不会在地址栏显示出来。

GET 提交:

请求的数据会附在 url 之后(就是把数据放在 HTTP 协议头中),以 ?分割 url 和 传输数据,多个参数用 & 连接;

POST 提交:

把提交的数据放置在是 HTTP 包的包体中。

因此,GET 提交的数据会在地址栏中显示出来,而 POST 提交,地址栏不会改变。

② 传输数据

GET 请求:

浏览器对于地址长度的限制会导致传输的数据有限制,只允许 ASCII 字符,如果请求参数不是 ASCII 字符,会先转化。

POST 请求:

请求不会因为地址长度限制而导致传输数据限制。限制它的是服务器的处理能力、存储大小和 Web 容器的限制,比 如 Tomcat 默认是 2 MB。没有限制。也允许二进制数据。

③ 安全性

POST 的安全性要比 GET 的安全性高。

GET 请求返回的内容可以被浏览器缓存起来。而每次提交的 POST,浏览器不会缓存 POST 请求返回的内容。


比如说 GET http://localhost/api.do


当你再次发送该请求的时候,浏览器并不真的再发送这条请求,而是从历史记录里把这个数据读取取出来,这叫做缓存。这是浏览器自己的决策,后端并不知道也没有收到任何请求。

防止缓存,我们可以看到一些前端人员通常在请求时要加一个时间戳


GET http://localhost/api.do?_t=时间戳


添加一个后端直接忽略的参数,然后每次都不一样,这样浏览器就认为每次都是不同的请求,就不会从历史记录里读取数据了。

Python 中如何使用 requests 发起 GET 和 POST 请求?

可以看 Python 大星历史文章

>>>趣说Python爬虫02--requests库基本使用


关于“http中 GET 和 POST到底有什么区别?”

如果你还有其他观点,欢迎评论下留言分享。@Python大星

>>>Python 闲谈 15——用Python生成属于自己的头条二维码

最近发表
标签列表