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

时间: 2024-11-06 18:19:54

IOS —— 网络那些事(上) - http协议的相关文章

iOS网络—文件的上传MIMEType

常见的MIME类型: 超文本标记语言文本 .html,.html                      text/html 普通文本 .txt                                                    text/plain RTF文本 .rtf                                                     application/rtf GIF图形 .gif                         

iOS网络编程开发—HTTP协议

iOS网络编程开发—HTTP协议 说明:apache tomcat服务器必须占用8080端口 一.URL 1.基本介绍 URL的全称是Uniform Resource Locator(统一资源定位符) 通过1个URL,能找到互联网上唯一的1个资源 URL就是资源的地址.位置,互联网上的每个资源都有一个唯一的URL 2.URL中常见的协议 (1)HTTP 超文本传输协议,访问的是远程的网络资源,格式是http:// http协议是在网络开发中最常用的协议 (2)file 访问的是本地计算机上的资源

ios网络学习------11 原生API文件上传之断点续传思路

#import "MainViewController.h" @interface MainViewController () @end @implementation MainViewController - (void)viewDidLoad { [super viewDidLoad]; //下载文件 [self download]; } -(void)download { //1. NSURL NSURL *url = [NSURL URLWithString:@"ht

造轮子 | 怎样设计一个面向协议的 iOS 网络请求库

近期开源了一个面向协议设计的网络请求库 MBNetwork,基于 Alamofire 和 ObjectMapper 实现,目的是简化业务层的网络请求操作. 须要干些啥 对于大部分 App 而言,业务层做一次网络请求通常关心的问题有例如以下几个: 怎样在任何位置发起网络请求. 表单创建. 包括请求地址.请求方式(GET/POST/--).请求头等-- 载入遮罩. 目的是堵塞 UI 交互,同一时候告知用户操作正在进行. 比方提交表单时在提交按钮上显示 "菊花",同一时候使其失效. 载入进度

造轮子 | 如何设计一个面向协议的 iOS 网络请求库

最近开源了一个面向协议设计的网络请求库 MBNetwork,基于 Alamofire 和 ObjectMapper 实现,目的是简化业务层的网络请求操作. 需要干些啥 对于大部分 App 而言,业务层做一次网络请求通常关心的问题有如下几个: 如何在任意位置发起网络请求. 表单创建.包含请求地址.请求方式(GET/POST/--).请求头等-- 加载遮罩.目的是阻塞 UI 交互,同时告知用户操作正在进行.比如提交表单时在提交按钮上显示 "菊花",同时使其失效. 加载进度展示.下载上传图片

嵌入式网络那些事LwIP协议深度剖析与实战演练pdf

下载地址:网盘下载 <嵌入式网络那些事:LwIP协议深度剖析与实战演练>面向网络TCP/IP协议初学者以及大量嵌入式网络开发人员,从当下流行的嵌入式网络协议栈LwIP的源代码入手,详细讲解TCP/IP协议的各层机制及其实现原理.同时,通过搭建简单的实验环境,还详细阐述LwIP在嵌入式设备组网过程中的移植过程.应用编程案例.编程框架.注意事项等. 下载地址:网盘下载 原文地址:https://www.cnblogs.com/cf3276625841/p/9310612.html

浅谈iOS网络编程之一入门

计算机网络,基本上可以抽象是端的通信.实际在通讯中会用到不同的设备,不同的硬件中,为了能友好的传输信息,那么建立一套规范就十分必要了.先来了解一些基本概念 了解网络中传输的都是二进制数据流.  2.了解网络编程概念. 认识网络: // 网络概念 <1> 经常见到的: 网卡/网线/IP地址/子网掩码/路由地址/DNS服务器地址 作用? // <2> 容易忽略的:MAC地址/数据/数据包 // <3> 网络编程的概念:客户端/服务器/请求/响应/数据流 // 网络是数据交互

iOS网络编程笔记——Socket编程

一.什么是Socket通信: Socket是网络上的两个程序,通过一个双向的通信连接,实现数据的交换.这个双向连路的一端称为socket.socket通常用来实现客户方和服务方的连接.socket是TCP/IP协议的一个十分流行的编程接口.一个socket由一个IP地址和一个端口号唯一确定.TCP/IP协议的传输层又有两种协议:TCP(传输控制协议)和UDP(用户数据报协议).TCP是基于连接的,而UDP是无连接的:TCP对系统资源的要求较多,而UDP少:TCP保证数据的正确性而UDP可能丢包:

iOS网络缓存扫盲篇--使用两行代码就能完成80%的缓存需求

iOS网络缓存扫盲篇 --使用两行代码就能完成80%的缓存需求 下篇预告:使用80%的代码来完成剩下的20%的缓存需求 .敬请 star (右上角)持续关注. 目录 当我们在谈论缓存的时候,我们在谈论什么? GET网络请求缓存 80%的缓存需求:两行代码就可满足 控制缓存的有效性 文件缓存:借助ETag或Last-Modified判断文件缓存是否有效 Last-Modified ETag 总结 一般数据类型借助 Last-Modified 与 ETag 进行缓存 剩下20%的网络缓存需求--真的