Appearance
HTTP和Socket区别
看在前面
Q
在网上看到说http连接是短连接而socket连接是长连接,但是http不是也有长连接吗?另外一个问题,socket既然是应用层和传输层之间的一层api,那么每一次建立http连接不是都会使用到socket吗?那socket连接不就是http连接的一部分?
P_Chou水冗
连接的长短跟Socket没有关系,Socket只是操作系统提供给应用程序的网络通信抽象API。但是需要理解的是Socket API大多数情况下工作在传输层(偶尔可以工作在数据链路层)。这意味着,你可以使用Socket开发基于TCP、UDP这类协议的应用。
HTTP是基于TCP的应用层协议。虽然TCP是支持长连接的,但是HTTP并不强制要求长连接。大部分情况下,一次HTTP请求的完成经过了下面这个过程。建立TCP链接->客户端发送报文->服务端返回报文->服务端或客户端关闭此连接。由于每次都要建立连接,并在完成一次请求响应后关闭连接,所以大家称为“短连接”。
HTTP的所谓Keep-Alive,是一种不可控的行为,是为了在一定程度上改善HTTP性能的。即服务端和客户端希望不立刻断开连接,这样下次发送数据时就不需要建立TCP连接了。但是服务端和客户端的任何一方都可以随时断开。
TIGERB
http协议:处于互联网协议的应用层,角色是规定数据传输的格式
socket: socket称之为套接字,这里的socket指的是http socket, 由主机+端口组成
主机:对应了网络层,涉及ip协议,通过ip确定主机所在位置,主机到主机
端口:涉及互联网协议的传输层,涉及TCP(带有确认机制的UDP协议)/UDP协议。通过端口确认对应的进程。端口就是进程使用网卡的编号,端口到端口
整个互联网协议从应用层到实体层,从上到下,越上越接近用户,越下越接近硬件;
所以,首先概念不能混淆,要区分http,socket的职责。http是建立在socket(这里的上下文指的是http socket)之上的。如果你明白了这个,你应该就不会提出来这个问题了。
补充:linux系统中还有一种socket称之为unix domain socket,是通过本地文件完成进程间通信的方式。不同于http socket,是建立在网络协议上的进程间通信方式。