HTTP中的get和post的区别?Get提交数据的长度限制是多少?
一般来说GET是获取数据,POST是提交数据的,并且GET和POST都是HTTP方法,HTTP有事基于TCP/IP的关于数据再万维网中通信的协议。从本质上讲,GET和POST都是HTTP请求,TCP连接
一. 区别
- GET是 获取数据,POST是用来提交数据的
GET方法通常用于请求服务器发送某个资源,应该是安全和幂等的。(什么是幂等)
仅仅获取资源信息,就像数据库查询一样,不会修改和增加数据,不会影响资源的状态。
安全和幂等:
- 安全是指GET操作只是用来获取信息而非修改信息。
- 幂等表示对同一个URL资源的请求应该返回同样的结果。
POST方法向服务器提交数据,将数据提交给服务器处理。POST是向服务器传输数据,数据会被重新提交,所以就会对原有的数据造成伤害,向指定资源提交数据进行处理(例如提交表单或是上传文件)数据包含在请求体中,POST请求可能导致新的资源的建立或者是对已有资源的修改。
- 参数的位置: GET请求的参数位于URL中,而POST请求的参数位于request body (请求体)中
GET请求的安全性不如POST请求
GET请求的参数有长度限制,而POST请求没有
GET参数只允许ASCII字符,POST则没有限制
- GET方式通过在URL上提交数据,数据在URL中可以看到;POST方式数据放置在请求体中提交。使用GET时,参数会显示在地址栏上,而POST不会。因此如果这些数据是中文数据并且非敏感,那么使用GET;如果用户输入的数据不是中文字符而且包含敏感数据,使用POST为好
- HTTP协议没有对GET和POST的长度做限制,GET的最大长度限制是因为浏览器和Web服务器限制了URL的长度,不同的浏览器的限制长度也是不同的,比如IE是2083字节。
- 理论上来说POST的长度是没有限制的,但是受服务器的配置限制或者内存大小的限制,造成实际开发中POST也是有数据长度限制的
- 为什么GET请求比POST请求更快
1.POST请求包含更多的请求头
因为POST需要在请求的body部分包含数据,所以会多了几个数据描述部分的首部字段(如:content-type),这其实是微乎其微的。
2.最重要的一条,POST在真正接收数据之前会先将请求头发送给服务器进行确认,然后才真正发送数据
POST请求的过程:
(1)浏览器请求tcp连接(第一次握手)
(2)服务器答应进行tcp连接(第二次握手)
(3)浏览器确认,并发送post请求头(第三次握手)
(4)服务器返回100 Continue响应
(5)浏览器发送数据
(6)服务器返回200 OK响应
GET请求的过程:
(1)浏览器请求tcp连接(第一次握手)
(2)服务器答应进行tcp连接(第二次握手)
(3)浏览器确认,并发送get请求头和数据(第三次握手)
(4)服务器返回200 OK响应
3. GET会将数据缓存起来,而POST不会 (GET在浏览器回退时是无害的,而POST会再次提交请求。GET会将请求参数放在请求的url中,回退操作实际上浏览器会从之前的缓存中拿结果;POST每次调用都会创建新的资源。)
4. POST不能进行管道化传输