Http 和 Socket 之间的恩爱情仇
前言
一些刚入门的小伙伴可能会用 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 的请求信息由四部分组成,分别是请求行、请求头、空行和请求数据,如下:
- 请求行主要包含了三部分信息,请求方法、请求 URI 以及 HTTP 的版本
- 请求头中主要包含了请求的各种条件
- 空行 CR+LF
- 请求数据
响应报文
HTTP 响应报文也由四部分组成,分别是状态行、响应头、空行以及响应正文,如下:
- 状态行包含三部分内容,分别是 HTTP 版本、状态码和原因短语
- 响应头信息
- 空行
- 响应数据
HTTP 请求方法
请求方法除了常见的 GET、POST 之外,在移动互联网时代,PUT、DELETE 等方法也得以大展拳脚,HTTP 中的主要方法如下:
HTTP 头信息
无论是请求报文还是响应报文,都涉及到 HTTP 头,HTTP 头信息一般来说可以分为四大类,分别是通用头、请求头、响应头和实体头,如下:
OK,搞清楚了HTTP的数据格式,接下来我们就可以用Socket模拟一个HTTP请求了
Http 和 Socket 之间的恩爱情仇的更多相关文章
- http、TCP/IP协议与socket之间的区别
http.TCP/IP协议与socket之间的区别 网络由下往上分为: www.2cto.com 物理层-- 数据链路层-- 网络层-- ...
- TCP/IP Http 和Https socket之间的区别
TCP/IP Http 和Https socket之间的区别 TCP/IP是个协议组,它分为网络层,传输层和应用层, 在网络层有IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议. ...
- http、TCP/IP协议与socket之间的区别(转载)
http.TCP/IP协议与socket之间的区别 https://www.cnblogs.com/iOS-mt/p/4264675.html http.TCP/IP协议与socket之间的区别 ...
- HTTP、TCP、UDP以及SOCKET之间的区别/联系
一.TCP/IP代表传输控制协议/网际协议,指的是一系列协组. 可分为四个层次:数据链路层.网络层.传输层和应用层. 在网络层:有IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议. 在 ...
- TCP、UDP、HTTP、SOCKET之间的区别
IP:网络层协议: TCP和UDP:传输层协议: HTTP:应用层协议: SOCKET:TCP/IP网络的API. TCP/IP代表传输控制协议/网际协议,指的是一系列协议. TCP和UDP使用IP协 ...
- Http TCP/IP协议和socket之间的区别和联系
总结,TCP/IP是传输层协议,主要解决数据如何在网路中传输,socket是TCP/IP协议的具体实现,是对TCP/IP协议的封装和应用,属于程序员层面,HTTP是应用层协议,应用层协议很多,类似的像 ...
- TCP、UDP、HTTP、SOCKET之间的区别与联系
IP:网络层协议: TCP和UDP:传输层协议: HTTP:应用层协议: SOCKET:TCP/IP网络的API. TCP/IP代表传输控制协议/网际协议,指的是一系列协议. TCP和UDP使用IP协 ...
- TCP、UDP、HTTP、SOCKET之间的区别与联系-乾颐堂CCIE
IP:网络层协议: TCP和UDP:传输层协议: HTTP:应用层协议: SOCKET:TCP/IP网络的API. TCP/IP代表传输控制协议/网际协议,指的是一系列协议. TCP和UDP使用IP协 ...
- TCP HTTP SOCKET之间的有什么关系
网络由下往上分为 物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 通过初步的了解,我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层, 三者从本质上来说没有可 ...
随机推荐
- Visual Studio 2019更新到16.1.4
Visual Studio 2019更新到16.1.4 此次更新仍然是修复bug为主,涉及到Xcode 11无法启动模拟器.Xamarin.Android SDK 9.3.0.23的调试bug.
- setInterval调用ajax回调函数不执行的问题
setInterval调用ajax回调函数不执行 1.首先检查你的setInterval()函数写法是否正确 参考写法 // 检查是否支付成功 var isPayRequest=false; var ...
- mybatis 级联
级联是一个数据库实体的概念.一对多的级联,一对多的级联,在MyBatis中还有一种被称为鉴别器的级联,它是一种可以选择具体实现类的级联. 级联不是必须的,级联的好处是获取关联数据十分便捷,但是级联过多 ...
- CentOS7使用yum安装RabbitMQ
转自:https://jingyan.baidu.com/article/456c463b16f3820a583144a1.html 登录名:admin 密码:admin 1. 如果安装后web界 ...
- Gitlab提交时间错误问题修复
gitlab-ctl status gitlab提交时间显示错误,明明是近期修改提交的代码在页面显示的时间是19年前 查看配置文件 /etc/gitlab/gitlab.rb 时区设置正确,再说就算是 ...
- 初步了解 Netty
精通并发与 Netty (一)如何使用 精通并发与 Netty Netty 是一个异步的,事件驱动的网络通信框架,用于高性能的基于协议的客户端和服务端的开发. 异步指的是会立即返回,并不知道到底发送过 ...
- pytorch1.0实现RNN-LSTM for Classification
import torch from torch import nn import torchvision.datasets as dsets import torchvision.transforms ...
- 030 Android 第三方开源下拉框:NiceSpinner的使用+自定义Button样式+shape绘制控件背景图+图片选择器(selector)
1.NiceSpinner下拉框控件介绍 Android原生的下拉框Spinner基本上可以满足Android开发对于下拉选项的设计需求,但现在越来越流行的下拉框不满足于Android原生提供的下拉框 ...
- 循环(数组循环、获取json数据循环)、each()循环详解
return; // 退出循环(不满足,退出此次循环.下次满足条件,依然会走此循环)return false; //退出函数(退出所有) 一. 数组循环: html: <div class=&q ...
- [.Net Core] - 当 .Net Core 版本由 1.x 升级至 2.x 后,Cookie 使用方式变更
背景 Asp.Net Core 项目升级至 2.x 版本后,Cookie 验证方式需要进行更新. 升级前:.Net Core 1.x Startup.cs public void Configure( ...