前言

一些刚入门的小伙伴可能会用 Socket,也会用 OkHttp 或者 HttpUrlConnection 等一些 HTTP 客户端工具,这两个东西看着有点像可是又不太一样,到底是哪里不一样呢?

Http 与 Socket

我们先来看一张图:

HTTP(HyperText Transfer Protocol) 即超文本传输协议,它是基于 TCP/IP 协议之上的应用层协议,TCP/IP 属于传输层协议,主要用来解决数据如何在网络中进行传输,而 HTTP 属于应用层协议,主要用来解决数据如何包装,在实际开发中,有的公司会在 C/S 结构的项目中使用自定义协议,一般自定义协议就是指自定义应用层协议。就像我从深圳向广州寄一件快递,HTTP 协议负责物品如何包装以及到达目的地之后如何拆箱,而 TCP/IP 协议就是快递公司,负责将东西从深圳运送到广州,可能中途还会经过 N 个中转站,这些都由 TCP/IP 协议去负责。

我们在做数据传输的时候,甚至可以只使用 TCP/IP 协议,但是这样会没有应用层,没有应用层,我们就不能有效识别出数据内容,所以我们还是需要应用层协议,根据实际需求,我们可以选择不同的应用层协议,比如 HTTP、FTP 等。

Socket 则是对 TCP/IP 协议的封装,它就是一个调用接口,通过调用 Socket,我们就可以使用 TCP/IP 协议,TCP/IP 协议只是一个协议栈,想要让程序员能够使用它,就必须提供可以供程序员使用的接口,这个接口就是 Socket ,在我们充分了解了 HTTP 协议的数据格式之后,我们也可以利用 Socket 来模拟 HTTP 请求。

网上有一个形象的描述,说 HTTP 就是一部轿车,提供了数据的封装形式,Socket 则是发动机,提供了基本的网络通信能力。

Http 报文

请求报文

HTTP 的请求信息由四部分组成,分别是请求行、请求头、空行和请求数据,如下:

  1. 请求行主要包含了三部分信息,请求方法、请求 URI 以及 HTTP 的版本
  2. 请求头中主要包含了请求的各种条件
  3. 空行 CR+LF
  4. 请求数据

响应报文

HTTP 响应报文也由四部分组成,分别是状态行、响应头、空行以及响应正文,如下:

  1. 状态行包含三部分内容,分别是 HTTP 版本、状态码和原因短语
  2. 响应头信息
  3. 空行
  4. 响应数据

HTTP 请求方法

请求方法除了常见的 GET、POST 之外,在移动互联网时代,PUT、DELETE 等方法也得以大展拳脚,HTTP 中的主要方法如下:

HTTP 头信息

无论是请求报文还是响应报文,都涉及到 HTTP 头,HTTP 头信息一般来说可以分为四大类,分别是通用头、请求头、响应头和实体头,如下:

OK,搞清楚了HTTP的数据格式,接下来我们就可以用Socket模拟一个HTTP请求了

最新文章

  1. Dockerfile初探
  2. POJ 1149 PIGS
  3. Feathers UI 性能优化
  4. RabbitMQ 实现RPC
  5. _crol_和_cror_函数
  6. Latex 数学符号
  7. java基础3_流程控制语句
  8. 访问https链接方法
  9. 序列化和反序列化的几种方式(DataContractSerializer)(二)
  10. 探索react native首屏渲染最佳实践
  11. CString 转 char*; wstring 转 string
  12. Windows 10 响应式设计和设备友好的开发
  13. spring mvc 常用注解
  14. 1287. Mars Canals(DP)
  15. Linux shell 脚本攻略之批量重命名
  16. 一个奇怪的编码 big5-hkscs
  17. 使用dojo的tree
  18. ubuntu部署mipsel64交叉编译环境
  19. easyui Datagrid 表格高度计算及自适应页面的实现
  20. 《DOM Scripting》学习笔记-——第七章 动态创建html内容

热门文章

  1. supervisord守护进程的使用
  2. Flutter Offstage、Visibility隐藏/可见
  3. 为什么static成员必须在类外初始化,而不能在类的头文件中初始化
  4. zookeeper使用过程的错误
  5. windows驱动程序中的预处理含义
  6. Glide升级到4.x版本遇到的问题
  7. Redis应用场景大全
  8. DevOps - 配置管理工具Ansible
  9. 详解consul的安装和配置
  10. 如何优雅的处理 async/await 异常