协议 HTTP与HTTPS补充及相关问题

一、HTTPS过程

1.客户端发送HTTPS请求给服务器端;

2.服务器端发送CA证书和公钥PublicKey给客户端,注意这个公钥用的是非对称密钥,只有服务器端才有PublicKey对应的PrivateKey;

3.客户端生成一个会话的密钥SessionKey,注意这个SessionKey是对称密钥,加密解密都是同一个秘钥;

4.客户端用公钥PublicKey来对会话秘钥SessionKey进行加密生成EncryptKey传递给服务器;

4.1服务器端收到这个加密后的EncryptKey后用PrivateKey解密就可以得到这个SessionKey了;

4.2服务器端收到这个加密后的EncryptKey需要回复一个确认消息给客户端;

5.客户端用这个SessionKey来对后续需要发送的Message来进行加密,就是EncryptMessage,然后发送给服务器端;

5.1服务器端收到这个EncryptMessage后就需要拿刚才解密的SessionKey来进行解密;就可以得到Message了;

5.2服务器端根据客户端的请求来进行返回一系列的Response响应;

看起来是不是很复杂?这里面涉及到了CA证书、对称密钥、非对称密钥;

反正记住CA和非对称密钥是服务器端所持有的,对称密钥是客户端随机生成的,用于建立会话用;

二、HTTP过程

相比较而言,HTTP过程就简单多了

三、几个问题的回答

第一个问题:怎么理解HTTP是无状态无连接的?

无连接可以理解为非持久连接,即完成一次客户端的请求Request和相应Response之后,即断开连接;与TCP的面向连接无关;

但是可能一直有请求,然后不停的建立连接不停的断开连接,因此在后期的实现中加入了Keep-Alive来保证在Alive期间连接仍然有效;

无状态是指对事务没有记忆能力,即可以理解为每次请求都可以看成是相互独立的,各次请求之间并不保持相关的状态信息,一旦一次请求完毕那么就算这次请求结束了,这和状态码中的状态无关;

第二个问题:HTTP到底使用TCP还是UDP传输的?

HTTP是使用TCP进行传输的,因此需要三次握手;

第三个问题:Session和Cookie有什么区别?

最基本的区别时Session放在服务器端存缓存

第四个问题:GET和POST有什么区别?

1.GET是向服务器发索取数据的一种请求,而POST是向服务器提交数据的一种请求;

2.GET传输的数据量较小(协议本身并不限制,而是浏览器实现协议的时候限制URL长度而引起最大2K),而POST传输的数据量较大(理论上协议也并不限制,但是视服务器处理数据的能力而定,一般情况下会是80K以上);

3.GET不安全(并不是说协议不安全,协议指定是安全和幂等的,是指不会被修改)此处的安全是容易将私密信息暴露在URL中,POST更安全,这里的安全也是指不容易暴露在URL中而已

4.GET快(GET是附着在URL后面进行传递,可以进行地位),POST慢(POST放在Content里面来传递,但是传递流文件等,比如文件上传,默认情况都必须使用POST)

 

posted @ 2015-10-04 20:33  √珞珈搬砖工√  阅读(134)  评论(0)    收藏  举报