1. HTTP协议
HTTP 协议, 是应用最广泛的一种网络协议,是无状态协议,是基于 TCP/IP 通信协议来传输数据。 客户机可以通过URL向HTTP服务端(服务器)发送请求,然后服务端响应该请求,之后关闭这个连接。
- 支持客户/服务器模式
- 简单快速
- 灵活
- 无连接
- 无状态
无连接?
-> 含义是限制每次连接只处理一次请求。服务器处理完客户端请求,并收到客户端的应答之后,立即断开连接。以此可以节省传输时间
无状态?
-> HTTP协议即无状态协议,即协议对事务处理没有记忆能力,服务器无法区别是否已响应过用户的请求。 而++每次发送http请求时,客户端都要发起一个到服务端的TCP连接++,TCP的建立又涉及“三次握手”的过程。对于大流量的服务器来说这个过程的开销是十分大的。因此出现了“++短连接++”、“++长连接++” 的设计。
HTTP工作过程 ?
- 地址解析:浏览器从URL中解析出协议吗,主机名,端口,对象路径等,域名系统DNS解析域名得到主机IP地址
- 封装HTTP请求数据包:将以上部分结合本机自己的信息,打包成一个HTTP请求包
- 封装TCP包,建立TCP连接:发送HTTP请求数据包前,客户端需要通过网络与服务器建立连接,该连接是通过TCP来完成的,而TCP需要和IP来共同构建Internet(TCP/IP网络),即TCP/IP协议。构建成功之后才可以发起HTTP协议
- 建立连接后,客户机向服务端发起一个请求,格式为:URL,协议版本号,MIME信息,客户机信息等
- 服务器响应:响应信息包括,状态行,信息协议版本号,成功、错误的代码,MIME信息,服务器信息,实体信息等
- 服务器关闭TCP连接:通常,当服务器响应客户端返回数据时,它就要关闭TCP连接了
TCP 长短连接?
短连接(Persistent Connection):客户机发送一个HTTP请求,会先发起一个TCP连接,待服务端响应请求之后,立即关闭TCP链接
长连接(Keep-Alive) :客户机发送一个HTTP请求,发起一个TCP连接,服务端响应之后,保持TCP连接打开,在相同的客户机和服务器之间的后续请求和响应报文则通过相同的TCP连接来通信,不需要再次建立TCP
2. TCP/IP
- 四层协议
C | T |
---|---|
应用层 | TELNET FTP HTTP SMTP DNS等 |
传输层 | TCP UDP |
网络层 | IP ICMP ARP RARP |
网络接口层 | 物理通信接口 |
一个TCP的连接,需要经过“三次握手”才能建立起来。
-> 主机A向主机B发送请求数据包(ACK=0,SYN=1,seq=x),主机B向主机A发送同意连接和要求同步(SYN=1,ACK=1,seq=x,ack=x+1),主机A在向主机B发送一个数据包确认B主机的同步要求(ACK=1,seq=x+1,ack=y+1)A为什么会再确认一次呢,主要是为了防止已失效的连接请求报文段又突然传送给B,从而产生了错误
为什么建立连接是三次握手,断开连接是四次握手? 因为当Server收到Client的SYN连接请求后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。 而断开连接时,当Server端收到FIN请求报文时,很可能不会立即关闭SOCKET,所以只能先回复一个ACK报文告诉Client已经收到了FIN报文,只有等Server端所有的数据都发送完了之后,才能发送FIN报文,因此需要四次握手
3. HTTPS
HTTPS = SSL/TLS + HTTP; 安全的一种HTTP传输协议。
- Client 发起HTTPS请求时,在TCP连接建立的过程中,Server返回非对称加密公钥(证书)给Client,Client生成对称加密秘钥,并使用公钥进行加密,然后将加密的对称秘钥发送给Server。开始进行密文传输