HTTP中的请求:
GET和POST区别:
• GET在浏览器回退时是无害的,而POST会再次提交请求。
• GET产生的URL地址可以被Bookmark,而POST不可以。
• GET请求会被浏览器主动cache,而POST不会,除非手动设置。
• GET请求只能进行url编码,而POST支持多种编码方式。
• GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
• GET请求在URL中传送的参数是有长度限制的,而POST么有。
• 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
• GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
• GET参数通过URL传递,POST放在Request body中。
• GET产生一个TCP数据包;POST产生两个TCP数据包。
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
注:post请求只是看似比get请求更加安全,但其实都不安全,因为是http协议,第三方可以对请求进行抓包,下分析安全协议https。
HTTPS加密:
http不安全是因为协议的本质中没有加入安全的算法,即未能对通信的双方进行身份识别,故加入加密算法。而密钥分为:对称秘钥和非对称密钥
对称密钥:
公钥和私钥是相同的,即加密与解密用同一套算法。优点:解密简单,传输速度快。缺点:公钥以明文传输,被获取后,等于没加密。
非对称密钥:
公钥和私钥相反,通过其中一个加密,只能通过另一个解密。优点:绝对的安全。缺点:通信速率底下,因为加解密过程十分复杂。
故https需要在不影响高效通信的条件下,保证绝对的安全,采用混合加密算法:
构想:
通信开始前,服务端有非对称密钥k1、k2,浏览器端有对称密钥k,目的是为了让浏览器端把k传且仅传给服务端。这之后的通信可以用对称密钥,即保证通信效率,又保证安全性。
不难发现,这里会有个问题,如果中间还是有人而已截取会不会有安全隐患?答案是有的——MITM(中间人攻击):