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协议对应于应用层, 三者从本质上来说没有可 ...
随机推荐
- PHPStorm提示:phpdoc comment doesn't contain all necessary @throw tag(s)
选择Settings => Editor => Inspection, 选择PHP => PHPDoc => Missing @throws tag(s) ,把后面的勾勾去掉就 ...
- 海思 Hi3516A Hi3518E V200 芯片介绍
海康是生产监控摄像头和硬盘录像机的,海思是提供机器里芯片的,海思属于华为的. http://www.hisilicon.com/en/Products/ProductList/Surveillance ...
- 【PHP】php7.2报错The each() function is deprecated. This message will be suppressed on furthe
php7.2以上 废除了 each()方法,项目中用到的地方会出现以下报错 The each() function is deprecated. This message will be suppre ...
- Glide图片加载过程(简)
iceIC 关注 2018.10.25 20:53* 字数 906 阅读 529评论 0喜欢 1 调研版本为4.7.1为了更加简单的理解,会将函数代码简化,详细代码请自行照源码对比 Glide用法 G ...
- boost写的异步客户端样例代码修改为支持断开重连的代码
考虑到boost的工业级强度,因此就直接用了,代码的官方示例地址:https://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/examples/ ...
- 利用SynchronizationContext.Current在线程间同步上下文(转)
https://blog.csdn.net/iloli/article/details/16859605 简而言之就是允许一个线程和另外一个线程进行通讯,SynchronizationContext在 ...
- k8s版jenkins--master/slave模式实现CI/CD---带solo开源博客项目--带maven、djk、git工具
k8s环境: 192.168.0.91 master 192.168.0.92 node 192.168.0.96 gitlab 192.168.0.98 harbor k8s集群安装请参照:http ...
- pipline中执行shell脚本推送镜像并且部署
实验架构: 192.168.0.96 gitlab 192.168.0.97 jenkins 192.168.0.98 harbor.docker集群 说明:下面代码编译镜像那一步的代码必须靠左,目的 ...
- 【Leetcode_easy】1021. Remove Outermost Parentheses
problem 1021. Remove Outermost Parentheses 参考 1. Leetcode_easy_1021. Remove Outermost Parentheses; 完
- 最新 迅游科技java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.迅游科技等10家互联网公司的校招Offer,因为某些自身原因最终选择了迅游科技.6.7月主要是做系统复习.项目复盘.Leet ...