以下是GET和POST在server端的抓包情况,省去前面的三次握手。首先是GET的:
不出所料,在实际请求时参数也是放在URL中。一个包搞定。
再来看POST:
从上图可以看出,POST是先发送请求头,再发送请求体,也就是即使参数再少再短,也会被分成两个包来发送(相对于GET)
POST请求比GET请求多了一个发包,确认包的过程。
从网上goole到一些使用规则:
1、Use GET for safe actions and POST for unsafe actions.
一般来说,对数据的提交有安全性要求,就应该用POST而不是用GET,那是因为GET有以下几个特点:
一、GET请求能够被cache。
二、GET请求能够被保存在浏览器的浏览历史里面。(如果把用户的密码GET提交,那么别人查看他的历史记录,就可以直接看到密码)
三、GET请求能够
2、Use POST when dealing with sensitive data
这是因为,GET参数是带在URL中的,因而一些与用户隐私相关的页面参数,就不宜用GET提交。
3、Use POST when dealing with long requests
RFC规定一个URL的最大长度为2048字符
4、Use GET in AJAX environments
因为POST比GET多一个发包,确认收包的过程,因此,大部分AJAX请求,其实更适合用GET来提交,而不是一味地用POST。更何况异步提交的AJAX请求,用户不会在URL中看到的。
抓包的话,POST啥的,也都看得到。
因此,需要区分实际场景判断是用GET还是POST,而不是单纯地以为POST请求会安全很多,而全部请求都用POST。
不过,其实POST请求浏览器应该也能一次请求搞定,为什么要先发包头,再等server请求后,再发剩余的包体。这点还没找到对应有说服力的资料,或是想出其必要性。mark,再好好思考思考。