get.post

一、原理区别

一般我们在浏览器输入一个网址访问网站都是GET请求;再FORM表单中,可以通过设置Method指定提交方式为GET或者POST提交方式,默认为GET提交方式。

HTTP定义了与服务器交互的不同方法,其中最基本的四种:GET,POST,PUT,DELETE,HEAD,其中GET和HEAD被称为安全方法,因为使用GET和HEAD的HTTP请求不会产生什么动作。不会产生动作意味着GET和HEAD的HTTP请求不会在服务器上产生任何结果。但是安全方法并不是什么动作都不产生,这里的安全方法仅仅指不会修改信息。

根据HTTP规范,POST可能会修改服务器上的资源的请求。比如知乎编写文章,用户提交一篇文章或者一个读者提交评论是通过POST请求来实现的,因为再提交文章或者评论提交后资源(即某个页面)不同了,或者说资源被修改了,这些便是“不安全方法”。

二、为什么get比post更快

1.post请求包含更多的请求头


因为post需要在请求的body部分包含数据,所以会多了几个数据描述部分的首部字段(如:content-type),这其实是微乎其微的。

2.最重要的一条,post在真正接收数据之前会先将请求头发送给服务器进行确认,然后才真正发送数据


post请求的过程:
(1)浏览器请求tcp连接(第一次握手)
(2)服务器答应进行tcp连接(第二次握手)
(3)浏览器确认,并发送post请求头(第三次握手,这个报文比较小,所以http会在此时进行第一次数据发送)
(4)服务器返回100 Continue响应
(5)浏览器发送数据
(6)服务器返回200 OK响应
get请求的过程:
(1)浏览器请求tcp连接(第一次握手)
(2)服务器答应进行tcp连接(第二次握手)
(3)浏览器确认,并发送get请求头和数据(第三次握手,这个报文比较小,所以http会在此时进行第一次数据发送)
(4)服务器返回200 OK响应
也就是说,目测get的总耗是post的2/3左右,这个口说无凭,网上已经有网友进行过测试。

3.get会将数据缓存起来,而post不会


可以做个简短的测试,使用ajax采用get方式请求静态数据(比如html页面,图片)的时候,如果两次传输的数据相同,第二次以后消耗的时间将会在10ms以内(chrome测试),而post每次消耗的时间都差不多。经测试,chrome和firefox下如果检测到get请求的是静态资源,则会缓存,如果是数据,则不会缓存,但是IE什么都会缓存起来,当然,应该没有人用post去获取静态数据吧,反正我是没见过。

`requests.get` 和 `requests.post` 都是 `requests` 库中用于发送 HTTP 请求的方法,它们之间的主要区别在于请求的方法和传递参数的方式。 1. 请求方法: - `get` 方法用于发送 GET 请求,用于从服务器获取数据。 - `post` 方法用于发送 POST 请求,用于向服务器提交数据。 2. 参数传递: - `get` 方法将参数作为 URL 的一部分,可以使用查询字符串(query string)或路径参数(path parameter)来传递参数。例如,`requests.get('https://example.com/api?param1=value1&param2=value2')`。 - `post` 方法将参数作为请求的正文(body)进行传递,常用于提交表单数据或发送 JSON 数据。例如,`requests.post('https://example.com/api', data={'param1': 'value1', 'param2': 'value2'})`。 具体使用哪种方法取决于你与服务器之间的交互需求。一般来说: - 当你需要从服务器获取数据时,使用 `get` 方法。 - 当你需要向服务器提交数据时,使用 `post` 方法。 除了请求方法和参数传递方式之外,这两个方法还有其他相似的特性,如可以指定请求头部信息、设置超时时间、处理响应等。 下面是一个简单的示例,演示了如何使用 `requests.get` 和 `requests.post` 方法: ```python import requests # 发送 GET 请求 response_get = requests.get('https://api.example.com/data') if response_get.status_code == 200: data = response_get.json() # 处理返回的数据 print(data) else: print('请求失败') # 发送 POST 请求 payload = {'param1': 'value1', 'param2': 'value2'} response_post = requests.post('https://api.example.com/submit', data=payload) if response_post.status_code == 200: result = response_post.json() # 处理返回的结果 print(result) else: print('请求失败') ``` 在上述示例中,我们使用 `requests.get` 方法向 `https://api.example.com/data` 发送了一个 GET 请求,并使用 `requests.post` 方法向 `https://api.example.com/submit` 发送了一个 POST 请求。根据返回的状态码来判断请求是否成功,并根据需要处理返回的数据或结果。 请注意,这只是一个简单示例,实际使用时可能需要根据具体的 API 和需求进行适当的参数设置和错误处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值