这里大致上只阐述三者之间的关系

先来讲下http和socket分别与tcp的关系
首先,http协议作为应用层协议,是基于传输层的tcp协议的,这点毋庸置疑,但是,socket本身不是协议,它可以看作是tcp协议的一种实现api(java环境中socket一般是指tcp协议的实现,其实socket所支持的协议种类也不光TCP/IP一种也可以支持udp)

最重要的几点:

1 http和socket是什么关系?

http是网络上层协议。底层还是socket短连接是发送数据时进行联接。发送完关闭这里,http利用socket tcp进行传输,打个比方:Socket是车,而HTTP是坐在车里的人

2 http的长连接短连接概念?

虽然TCP是支持长连接的,但是HTTP并不强制要求长连接短连接不总是好的,同样长连接也不总是好的.HTTP是一种以短连接为主,长连接keep-alive为辅被广泛使用的协议短连接指的就是客户端发起一个Http请求,服务端进行响应,然后连接关闭,下次请求需要重新进行三次握手。长连接概念如下:HTTP 1.1中对连接状态默认使用keep-alive方式。这样,在客户端多次请求服务端时,可以复用一个TCP连接,避免频繁建立和断开连接,导致服务端一直等待读取下一个请求而不释放连接。 但同样在我们的服务场景(小米网抢购系统)中不存在TCP连接复用的需求。当一个用户完成一个请求后,希望能够尽快关闭连接。 keep-alive方式导致已完成处理的用户连接不能尽快关闭,连接无法释放,导致连接数不断增加,对服务端的内存和带宽都有影响。”

3 http连接和socket的连接有什么关系?

上面已经讲过http连接的概念,这里说下socket连接的概念
socket连接一般为长连接(比如我们进行QQ聊天时的连接)。socket连接就可以维持很久,几天、数月都有可能,只要网络不断、程序不结束,而且是可以编程灵活控制的。
那么,两者之间是什么关系呢?
HTTP连接是建立在Socket连接之上。在实际的网络栈中,Socket连接的确是HTTP连接的一部分。但是从HTTP协议看,它的连接一般是指它本身的那部分。所以,两者之间其实是没啥卵关系的,至于工作时是怎么协调的,目前我也搞不清楚。