一些刚入门的小伙伴可能会用 Socket,也会用 OkHttp 或者 HttpUrlConnection 等一些 HTTP 客户端工具,这两个东西看着有点像但是又不太同样,究竟是哪里不同呢?程序员
咱们先来看一张图:网络
HTTP(HyperText Transfer Protocol) 即超文本传输协议,它是基于 TCP/IP 协议之上的应用层协议,TCP/IP 属于传输层协议,主要用来解决数据如何在网络中进行传输,而 HTTP 属于应用层协议,主要用来解决数据如何包装,在实际开发中,有的公司会在 C/S 结构的项目中使用自定义协议,通常自定义协议就是指自定义应用层协议。就像我从深圳向广州寄一件快递,HTTP 协议负责物品如何包装以及到达目的地以后如何拆箱,而 TCP/IP 协议就是快递公司,负责将东西从深圳运送到广州,可能中途还会通过 N 个中转站,这些都由 TCP/IP 协议去负责。socket
咱们在作数据传输的时候,甚至能够只使用 TCP/IP 协议,可是这样会没有应用层,没有应用层,咱们就不能有效识别出数据内容,因此咱们仍是须要应用层协议,根据实际需求,咱们能够选择不一样的应用层协议,好比 HTTP、FTP 等。工具
Socket 则是对 TCP/IP 协议的封装,它就是一个调用接口,经过调用 Socket,咱们就可使用 TCP/IP 协议,TCP/IP 协议只是一个协议栈,想要让程序员可以使用它,就必须提供能够供程序员使用的接口,这个接口就是 Socket ,在咱们充分了解了 HTTP 协议的数据格式以后,咱们也能够利用 Socket 来模拟 HTTP 请求。blog
网上有一个形象的描述,说 HTTP 就是一部轿车,提供了数据的封装形式,Socket 则是发动机,提供了基本的网络通讯能力。接口
HTTP 的请求信息由四部分组成,分别是请求行、请求头、空行和请求数据,以下:
开发
HTTP 响应报文也由四部分组成,分别是状态行、响应头、空行以及响应正文,以下:
io
请求方法除了常见的 GET、POST 以外,在移动互联网时代,PUT、DELETE 等方法也得以大展拳脚,HTTP 中的主要方法以下:入门
不管是请求报文仍是响应报文,都涉及到 HTTP 头,HTTP 头信息通常来讲能够分为四大类,分别是通用头、请求头、响应头和实体头,以下:互联网
OK,搞清楚了HTTP的数据格式,接下来咱们就能够用Socket模拟一个HTTP请求了