参考答案
HTTP GET和POST的区别:
详解:
1. 一般来说,GET是获取数据,POST是提交数据的。但是因为GET和POST都是HTTP的方法,HTTP又是基于TCP/IP的关于数据在万维网中如何让通讯的协议,所以从本质上来说两者没有区别,GET和POST请求都是TCP链接,他们能做的事情是一样的。HTTP协议的这两个方法,是为了在特定的情况下区分应用,GET获取数据,POST提交数据。
2. GET传输数据时是在URL地址中的,对所有人都可见,有浏览器缓存记录,因此GET是不安全的,发送密码等数据时,不要用GET传输。GET只能传输ASCLL字符,不能进行编码。POST传输时是放在HTTP的请求体之中的,且经过了urlencode编码,因此相对安全。POST没有对数据类型的限制,二进制数据也可以。
3. HTTP协议并没有对GET和POST的长度做限制,其实是浏览器限制了他们传输大小。URL地址有长度限制,浏览器不同长度限制的具体数值不一样。例如,IE是2083字节,需要注意的是这些仅仅是URL地址栏的长度限制。理论上来说,POST的长度没有限制,但受服务器的配置限制或者内存大小的限制,造成了实际开发中POST有数据长度的限制。可以在PHP下,修改php.conf中的postmaxsize值来设置POST的大小。
4. 为什么说GET比POST更快?
- 原因一:POST需要在请求的body部分包含数据,所以会多了几个描述部分的首部字段比如:content-type,但这是微乎其微的,可以忽略不计。
- 原因二:POST和GET请求的过程是不一样的,POST请求的过程:先进行3次握手,然后服务器返回100continue响应,浏览器再次发送数据,服务器返回200成功响应。
GET请求的过程:也是先进性3次握手,然后服务器返回成功响应。但是POST比GET多进行了一次数据传输,所以GET请求就比POST请求更快。现在服务器配置较高和网速较快的情况下,这多出来的一次数据传输,在实际中的影响并不大。
5. 因为GET是获取数据,所以GET请求是安全且幂等的,是无害的,这个安全指得是对数据不会造成影响。幂等简单的来说就是无论获取多少次数据得到的资源都是一样的。POST是向服务器传输数据,数据会被重新提交,所以就会有对原有的数据造成伤害。
以上,是Java面试题【HTTP GET和POST的区别】的参考答案。
输出,是最好的学习方法。
欢迎在评论区留下你的问题、笔记或知识点补充~
—end—