IOS —— 网络那些事(上) - http协议

作为一名并不太合格的程序员,今天要分享学习的成果,竟然讲的是网络相关HTTP协议的事情。(也算是复习了)

乍看HTTP协议的内容着实是十分复杂的,涉及到十分多互联网"底层"框架的东西。今天就先撇开这部分详细内容。

简单的来说说HTTP协议,以及连接的事项。

HTTP协议发展至今也有二十多年历史,版本也从原来的1.0 进化到了2.0

那么还是一如既往,图文理解比较简单。

以下图片以"下单"表示客户端向服务器端发送数据

以"发货"表示服务器端对客户端的回应

"商家"表示服务器端(server) , "买家"表示客户端(user)


HTTP协议1.0版

 

在解释这张图的含义之前,引用百度百科的一段话解释下 HTTP协议 究竟是什么?

HTTP协议:

HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传输协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。
HTTP是客户端浏览器或其他程序与Web服务器之间的应用层通信协议。在Internet上的Web服务器上存放的都是超文本信息,客户机需要通过HTTP协议传输所要访问的超文本信息。HTTP包含命令和传输信息,不仅可用于Web访问,也可以用于其他因特网/内联网应用系统之间的通信,从而实现各类应用资源超媒体访问的集成。

仔细阅读完会发现,HTTP协议的作用和开篇时,我所描述的一样。

你可以将买外卖的这件事情代入进来,传输协议实际上也可以当做是"下单"的过程。

在1996年的第一版HTTP协议中(以下统称http1.0),可以看到的整个"外卖"系统已经成型。

已经具备"下单"以及"发货"的能力,但是有所不足的是用户并不能同一时间,点复数的餐。

http1.0是无法复用连接的。一次传输对应的是一次返回,并且直接关闭这个传输链。

你只能下一张单了,商家回应并且发一份货物了。这次买卖就结束了!

你并不同时在一次购买中同时和商家说我这次要买三份外卖!

那么这样方便吗?我要买三份外卖还必须拨打三次电话下三次单才能完成呢

很遗憾的是http1.0中,只能够这么处理事情。

于是乎这些问题就留到了第二版HTTP协议中解决,他也就这么诞生了(以下统称http1.1


HTTP协议1.1版

在http1.1中加入了俩个新指令

1. Connection :keep-ALive :让客户端和服务器之间的联系保持一段时间。(再也不需要重新拨打电话才能下第二张单了)

2. HttpPipelining:同时建立多个连接。(并且不用以一张一张订单的形式告诉商家,直接说我要买三份青菜!)

可以看到的是http1.1中,1.0所遇到的问题已经基本上解决了。

这么仔细一想,问题都解决了。为什么还有2.0版本的出现呢

因为http1.1中只有单一线程处理工作,任务耗时较重的情况下,当前线程会堵塞其中。并且使得后续线程也只能跟着堵塞。

遇到服务器未响应的情况下,线程将会直接卡死在那造成 "线头阻塞"

意思就是商家只有一个厨子,厨子炒菜炒不过来的情况下。后续订单出货量就慢了。但是!虽然炒菜慢但是还是能发货

当厨子突然消失的情况下,订单就出不了货了。这个发货流程就直接卡死了。

回过头来,当问题出现的时候。首先就得寻求解决方法。

那么http协议的第三版就出现了。


 

HTTP协议2.0版

乍看之下,好像还真的有点不一样啊。相比起第二版HTTP协议来说

感觉第三版HTTP(以下统称http2.0)像似"暴富"一般,手头阔了,人也多了。

是的没错,http2.0连接中线程可以并发的执行任务了。并不会像前者http1.1一样遇到单一线程堵塞或未响应时的延缓或者卡死整条连接链路,先执行便回应。

结合http1.1举得例子来说

厨子多了,并且不用对应用户1的三份外卖,同时做好同时发。在同一个订单里,先做好哪份就发哪份

如果遇到某客户的订单中的某一份外卖要求比较多(加葱加辣加泡菜等等等)延缓出单的情况,也只是该订单出单慢。影响不了其他俩单的出货。

所以也就就把HTTP协议中大部位问题给解决了。

 

文章总结:

HTTP协议可以引用这么一句话 "一就是全,全就是一"。

当一卡住了,全也就卡住了。当全部东西解决完了,一条协议连接也就完成了。~


 

读这篇文章的时候估计很多人也有很多疑惑吧

还有很多谜团没揭晓呢,连接又是啥,网络请求这么复杂的吗?

是的,网络这块特别复杂,今天说的这三个版本连冰山一角上的冰块都没摸着。

接下来我还要继续对连接这块,以自己的理解解刨一下。

下期讲的是TCP协议~~

end

转载于:https://www.cnblogs.com/UUUUgua/p/9910503.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/450795.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

老派程序员——徒手实现伟大成就

摘要:本文介绍了三位非常著名的程序员:Ken Thompson,Joe Armstrong 和 Jamie Zawinski,他们是如何发明一门新语言,他们开发软件时会像我们一样使用当今流行的开发工具吗?当读Peter Seibel的精彩著作《编程人生:15位软件…

互联网大厂项目研发流程

文章目录阶段一:阶段二:阶段三:阶段四:阶段五:开发人员:测试人员:设计师:阶段六:阶段七:总结:本文章学习自:https://www.bilibili.com…

解决 java.lang.IllegalArgumentException: Repository interface must not be null on initialization!

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 报错:Caused by: java.lang.IllegalArgumentException: Repository interface must not be null on initialization! Cause…

【狂神说】JVM

文章目录1.JVM的位置2.JVM的体系结构3.类加载器4.双亲委派机制(重要)5.沙箱安全机制(了解)6.native(核心)7.PC寄存器(了解)8.方法区9.栈10.三种JVM11.堆(Heap)12.新生区、老年区13.永…

我们真的需要统一的编程规范?

摘要:仁者见仁智者见智,编码风格的不同,对项目也会有不同的影响,统一的编码规范有益于项目的维护。俗话说,没有规矩不成方圆,在2004年,UNIX创始人之一的Ken Arnold就发表了一篇很幽默文章&#…

百度云重磅发布ABC 3.0 尹世明如何诠释百度云的“新”打法

雷锋网9月4日消息,2018百度云智峰会正式召开,百度总裁张亚勤发表题为《新技术驱动,全面进入Cloud2.0》的演讲并表示,经历了PCClient/Server到MobileCloud 1.0,再到如今的AICloud 2.0过程,新技术推动云计算产…

开发人员眼中最好的代码编辑器是谁?

摘要:对开发人员来讲,开发工具就好比战场上的“兵器”,不同领域的开发人员他们所使用的“兵器”也不完全相同,本文从友好性、功能性、扩展等多方面总结了最受开发人员欢迎的“兵器”。你最爱的那个在这里吗? 如果我们把…

【老杜】MySQL—day01

文章目录day01课堂笔记1、数据库概述及数据准备1.1、什么是数据库1.2、什么是数据库管理系统1.3、SQL概述1.4、安装MySQL数据库管理系统。1.4、MySQL数据库的完美卸载!1.5、MySQL的服务1.6、用命令来启动和关闭mysql服务1.7、登录mysql数据库2、MySQL常用命令&#…

【转载】DRuid 大数据分析之查询

转载自http://yangyangmyself.iteye.com/blog/23217591、Druid 查询概述上一节完成数据导入后,接下来讲讲Druid如何查询及统计分析导入的数据。Druid的查询是使用REST风格的HTTP请求查询服务节点(Broker、Historical、Realtime),这…

记录 Parameter with that position [1] did not exist; nested exception is java.lang.IllegalArgumentExce

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 报错如题: Parameter with that position [1] did not exist; nested exception is java.lang.IllegalArgumentException: Pa…

Springsecurity之AuthenticationProvider

2019独角兽企业重金招聘Python工程师标准>>> 注意:AuthenticationProvider与Authentication紧密联系,关于Authentication,看我的这篇博客。 先上一张图,如下图1 图1 AuthenticationProvider的类图 AuthenticationProvi…

Postman使用入门

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 Postman测试管理的单位是测试集(Collections),测试集内可以创建文件夹(Folder)和具体的请求(Requests…

编程需要知道多少数学知识?

摘要:许多人认为在开始学习编程之前必须对数学很在行或者数学分数很高。但一个人为了编程的话,需要学习多少数学呢? 实际上不需要很多 。这篇文章中我会深入探讨编程中所需要的数学知识。 下面是我在reddit的子论坛 r/learnprogramming 看到的…

vue弹窗插件实战

vue做移动端经常碰到弹窗的需求, 这里写一个功能简单的vue弹窗 popup.vue <template><div class"popup-wrapper" v-show"visible" click"hide"><div class"popup-text">{{text}}</div></div> </temp…

【狂神说】Redis笔记

文章目录1、Nosql概述1.1 为什么要用Nosql1.2 什么是NoSQL1.3 阿里巴巴演进分析2、NoSQL的四大分类3、Redis入门3.1 概述3.2 Windows安装3.3 Linux安装3.4 测试性能3.5 基础的知识4、五大数据类型4.1 Redis-Key4.2 String&#xff08;字符串&#xff09;4.3 List&#xff08;列…

Postman用法说明

见&#xff1a;http://blog.csdn.net/flowerspring/article/details/52774399 Postman用法简介-Http请求模拟工具 在我们平时开发中&#xff0c;特别是需要与接口打交道时&#xff0c;无论是写接口还是用接口&#xff0c;拿到接口后肯定都得提前测试一下&#xff0c;这样的话就…

Linux核心总结

文章目录1.首先了解一下linux的目录结构2.linux的基本命令之使用命令开关机3.linux的基本命令之目录管理1.ls—列出目录命令2.cd—切换目录命令3.pwd—查看当前所在目录命令4.mkdir—创建文件夹命令5.rmdir—删除文件夹命令6.cp—复制文件命令7.rm—传说中的删库跑路命令8.mv—…

Java多线程系列---“JUC锁”01之 框架

本章&#xff0c;我们介绍锁的架构&#xff1b;后面的章节将会对它们逐个进行分析介绍。目录如下&#xff1a; 01. Java多线程系列--“JUC锁”01之 框架02. Java多线程系列--“JUC锁”02之 互斥锁ReentrantLock06. Java多线程系列--“JUC锁”03之 Condition条件07. Java多线程系…

IDEA配置jdk (SDK)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 提前安装jdk&#xff0c;配置环境变量 一、配置jdk 1、依次点开File -->Project Structure&#xff0c;点击左侧标签页&#xff0c…

Spring Data JPA入门

见&#xff1a;http://sishuok.com/forum/blogPost/list/7000.html Spring Data是什么 Spring Data是一个用于简化数据库访问&#xff0c;并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快捷&#xff0c;并支持map-reduce框架和云计算数据服务。 Spring Data…