http协议(Hypertext transfer protocol)超文本传输协议。
通常来说http请求包含四部分:请求行,请求报头,空行,请求数据(消息主体)。
请求行由请求方法,url,版本号组成
http的请求方法有多种,我们常用就是get和post方法。其余还有put,delete,head,trace,connect,options。
get和post的区别:
1:get的把参数加在请求行(url)中,而post (请求头+请求体)request body中。
2:get的请求有大小限制(1024字节) ,理论上post没有限制。
3:安全性考虑post的安全性更高,
4:get是向服务器发索取数据的请求,post是提交数据,当然不能简单地理解为一个取,一个发。因为post也同样索取数据。
请求行简单的举个例子:
get http://www.baidu.com http1.1
tcp/ip模型:应用层,传输层,网际层,网络接口层,硬件层。
iso模型:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层。
tcp协议(传输层)/ ip协议(网络层/网际层)
tcp三次握手:
1:建立连接后,客户端发送a包到服务端,等待确认。
2:服务端接收,并发送b包到客户端,(a+b)。
3:客户端接收,发送确认包,连接成功。
tcp/udp区别:
tcp协议是面向连接,安全的,传输可靠(保证传输顺序,完整),传输大量数据,传输慢。
udp协议面向非连接,不安全,用于传输少量数据,传输速度快。
http1.0的时候是不支持长连接的,http1.1开始,支持长连接,默认请求就是长连接,connection是keep-alive。
多个http请求公用一个tcp连接。
http协议说到底是应用层协议,而tcp是传输层协议
我们平时的网络请求用到的就是长连接,当然connection设置keep-alive,需要客户端和服务端同时设置才行。
长连接并不是永久连接。我们可以设置连接超时时间来控制断掉请求。
http/2底层使用二进制传输,帧是最小的传输数据单位。
特性:
多路复用:多个HTTP请求可以放在同一个连接中进行,自有数据流能并行传输。
head压缩:HTTP1中每次HTTP请求,都是必须要带上HTTP头的.而HTTP/2则在建立连接后,把头字段作为键值对,在两边维护一份字典,相同的就不用再传了,如有新增或变更,则再在传输时带上。
WebSocket:在单个tcp连接上的全双工协议。使得客户端和服务端数据交互变得更简单,支持服务端向客户端发送数据。
最开始的即时通信通常使用轮询技术,也就是客户端不间断的,定时向服务端请求数据,缺点就是浪费资源,会有大量不需要的请求。WebSocket在经过浏览器、服务器建立TCP连接,三次握手后就会建立持久化的连接,并且进行双向数据传输。属于应用层协议。
Socket:便于使用Tcp/Udp的接口规范(封装)。(传输层接口)
https是基于安全套接字的http协议。
具体的加密过程是怎样的呢?
1:客户端请求服务端->服务端返回ca证书
2:客户端校验ca证书,客户端生成随机字符串发给服务端,服务端私钥加密返回给客户端,客户端公钥解密,判断跟原字符串是否相等,ok是服务端。
3:客户端生成对称加密算法和密钥,用公钥加密,服务端拿到用私钥解密,以后通信使用对称算法加密通信。
上述第二步会有问题:如果黑客模拟发送一串有规律的字符串,服务端加密后返回,就有可能被推算出私钥,所以后端这里并不是直接用私钥加密的原字符串,而是先计算原字符串的hash值,然后对hash进行加密,从而降低被破解的机率。