iOS开发网络-HTTP协议

2023-11-03

一、URL

1.基本介绍

URL的全称是Uniform Resource Locator(统一资源定位符)

通过1个URL,能找到互联网上唯一的1个资源

URL就是资源的地址、位置,互联网上的每个资源都有一个唯一的URL


2.URL中常见的协议

(1)HTTP

超文本传输协议,访问的是远程的网络资源,格式是http://

http协议是在网络开发中最常用的协议

(2)file

访问的是本地计算机上的资源,格式是file://(不用加主机地址)

(3)mailto

访问的是电子邮件地址,格式是mailto:

(4)FTP

访问的是共享主机的文件资源,格式是ftp://

 
二、HTTP协议

1.HTTP协议简介

不管是移动客户端还是PC端,访问远程的网络资源经常使用HTTP协议

访问百度主页: http://www.baidu.com

获得网易的新闻数据

获得优酷的视频数据

 
2.HTTP协议的作用

HTTP的全称是Hypertext Transfer Protocol,超文本传输协议

(1)规定 客户端服务器之间的数据传输格式

(2)让 客户端服务器能有效地进行数据沟通

 


3.为什么选择使用HTTP?

(1)简单快速  因为HTTP协议简单,所以HTTP服务器的程序规模小,因而通信速度很快

(2)灵活  HTTP允许传输任意类型的数据

(3)HTTP 0.9和1.0使用非持续连接  限制每次连接只处理一个请求,服务器对客户端的请求做出响应后,马上断开连接,这种方式可以节省传输时间

 
4.HTTP的通信过程

要想使用HTTP协议向服务器索取数据,得先了解HTTP通信的完整过程

完整的http通信可以分为2大步骤

(1) 请求客户端服务器索要数据

(2) 响应服务器返回 客户端相应的数据



 三、HTTP通信过程 - 请求和响应

1.HTTP通信过程 - 请求

HTTP协议规定:1个完整的由 客户端发给 服务器的HTTP请求中包含以下内容

请求行:包含了 请求方法请求资源路径HTTP协议版本

GET /LYServer/resources/images/1.jpg HTTP/1.1

请求头包含了对客户端的环境描述、客户端请求的主机地址等信息

Host: 192.168.1.103:8080 // 客户端想访问的服务器主机地址

User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10) Firefox/30.0 // 客户端的类型,客户端的软件环境

Accept: text/html, */* // 客户端所能接收的数据类型

Accept-Language: zh-cn // 客户端的语言环境

Accept-Encoding: gzip // 客户端支持的数据压缩格式

请求体客户端发给 服务器的具体数据,比如文件数据(POST请求才会有)

 
 2.HTTP通信过程 - 响应

客户端服务器发送请求, 服务器应当做出响应,即返回数据给 客户端

HTTP协议规定:1个完整的HTTP响应中包含以下内容:

状态行:包含了HTTP协议版本、状态码、状态英文名称

HTTP/1.1 200 OK

响应头:包含了 对服务器的描述对返回数据的描述

Server: Apache-Coyote/1.1 // 服务器的类型

Content-Type: image/jpeg // 返回数据的类型

Content-Length: 56811 // 返回数据的长度

Date: Mon, 23 Jun 2015 12:54:52 GMT // 响应的时间

响应体服务器返回给 客户端的具体数据,比如文件数据       

            

3.补充:推荐工具firebug-1.12.5-fx.xpi   

虫子的作用:拦截所有的http请求。

 4.常见的响应状态码

 
四、发送HTTP请求的方法

1.简单说明

在HTTP/1.1协议中,定义了8种发送http请求的方法

GETPOST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT、PATCH

根据HTTP协议的设计初衷,不同的方法对资源有不同的操作方式

PUT :增

DELETE :删

POST:改

GET:查

提示:最常用的是 GETPOST(实际上 GETPOST都能办到增删改查)

 2. GETPOST请求                   

要想使用 GETPOST请求跟服务器进行交互,得先了解一个概念:参数就是传递给服务器的具体数据,比如登录时的帐号、密码

GET和POST对比: GET和POST的主要区别表现在数据传递上

GET

在请求URL后面以?的形式跟上发给服务器的参数,多个参数之间用&隔开,比如http://ww.test.com/login?username=123&pwd=234&type=JSON

注意:由于浏览器和服务器对URL长度有限制,因此在URL后面附带的参数是有限制的,通常不能超过1KB

POST

发给服务器的参数全部放在 请求体

理论上, POST传递的数据量没有限制(具体还得看服务器的处理能力)

                    
3. GETPOST的选择

选择 GETPOST的建议

(1)如果要传递大量数据,比如文件上传,只能用 POST请求

(2) GET的安全性比 POST要差些,如果包含机密\敏感信息,建议用 POST

(3)如果仅仅是索取数据(数据查询),建议使用 GET

(4)如果是增加、修改、删除数据,建议使用 POST    

                    
4.iOS中发送HTTP请求的方案

在iOS中,常见的发送HTTP请求(GET和POST)的解决方案有

(1)苹果原生(自带)

NSURLConnection:用法简单,最古老最经典最直接的一种方案【 坑比较多

NSURLSession:功能比 NSURLConnection更加强大,苹果目前比较推荐这种技术【2013推出,iOS7开始出的技术】

CFNetwork:NSURL*的底层,纯C语言

(2)第三方框架

ASIHttpRequest:外号“HTTP终结者”,功能极其强大,可惜早已停止更新

AFNetworking:简单易用,提供了基本够用的常用功能,维护和使用者多

MKNetworkKit 简单易用,产自三哥的故乡印度,维护和使用者少

建议:

为了提高开发效率,企业开发用的基本是第三方框架

5.ASI和AFN架构对比

说明:AFN基于NSURL,ASI基于CFHTTP,ASI的性能更好一些。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS开发网络-HTTP协议 的相关文章

随机推荐

  • 较好用的html5编译器

    一 BlueGriffon 基于 Firefox 渲染引擎的下一代 Web 和 EPUB 编辑器 链接 BlueGriffon 二 Aloha Editor 基于 所见即所得 的原则 HTML5 编辑器可以直接在门户网站上编辑网站 快速 简
  • 计算方法--解线性方程组的直接法

    文章目录 一 Gauss 消元法 1 顺序高斯消元法 总计算量 2 主元素高斯消元法 列主元素高斯消元法 3 高斯 约当 Gauss Jordan 消去法 总计算量 二 矩阵三角分解法 1 直接三角分解法 LU分解 Doolittle分解
  • WIN10安装后必做的优化,解决卡顿问题

    WIN10安装后必做的优化 解决卡顿问题
  • 储存过程之拉链表

    很多做数仓的朋友在面试的时候都会被问到 你写过的最难的存储过程是什么 这时候我们都会想到拉链表 拉链表真的那么难吗 下面我简单介绍一下拉链表作用 以及制作思路 希望可以帮到你 拉链表的作用 数据进行增量或者全量同步时 我们希望保留少数字段历
  • ELF文件格式的详解

    1 说明 2 elf文件的基本格式 3 elf文件的头部信息 4 elf文件的节区 Section 4 1 节区的作用 4 2 节区的组成 5 elf文件的段 Segment 6 用python解析elf文件 7 总结 1 说明 ELF的英
  • 设计模式之中介者模式

    中介者模式包装了一系列对象相互作用的方式 使得这些对象1不必相互明显作用 从而使它们可以松散耦合 当某些对象之间的作用发生改变时 不会立即影响到其他的一些对象之间的作用 保证这些作用可以彼此独立变化 中介者模式将多对多的相互作用转化为一对多
  • C语言函数程序实例(超全)

    目录 1 编写函数fun 功能是 计算n门课程的平均值 计算结果作为函数值返回 例如 若有5门课程的成绩是 92 76 69 58 88 则函数的值为76 599998 2 用函数将一个N阶方阵进行转置 输入输出在主函数中实现 使用for循
  • [QT编程系列-7]:C++图形用户界面编程,QT框架快速入门培训 - 3- QT窗体设计 - 自定义工具栏、状态栏、快捷键、图标

    目录 3 QT窗体设计 3 2 自定义工具栏 3 2 1 目标 3 2 2 实现过程 3 2 自定义状态栏 3 2 1 目标 3 2 2 过程 3 3 自定义动作快捷键 3 4 自定义图标 3 QT窗体设计 3 2 自定义工具栏 在Qt中
  • idea2023搜不到中文插件问题

    idea2023搜不到中文插件 可以考虑下载插件后本地安装 注意先看idea版本号 然后从官网下载离线汉化包 选择的版本等于或者低于idea版本号 1 离线汉化包下载地址 Chinese Simplified Language Pack 中
  • python操作excel(xlrd、xlwt、xlwings、pandas、openpyxl)

    文章目录 一 xlrd库 1 工作簿 book 1 创建工作簿对象 2 工作表 sheet 1 创建工作表对象 3 单元格 range 1 获取单个单元格的值 两种方法 2 获取单行或单列的值 4 获取工作表中的总行列数 二 xlwt库 1
  • JAVA多线程--信号量(Semaphore)

    简介 信号量 Semaphore 有时被称为信号灯 是在多线程环境下使用的一种设施 它负责协调各个线程 以保证它们能够正确 合理的使用公共资源 一个计数信号量 从概念上讲 信号量维护了一个许可集 如有必要 在许可可用前会阻塞每一个 acqu
  • VUE + 微信分享

    cnpm i weixin js sdk save 在需要分享的页面引入 import wx from weixin js sdk import shares from api index 在methods写调用的方法 vue调用微信的自定
  • Idea 代码存在报找不到符号

    前言 话说IDEA这个开发工具已经用了好几个春秋了 没想到最近很是淘气呢 打算撂挑子了 来咱们来整顿一下这淘气的货 问题 Error 191 80 java 找不到符号 符号 方法 getListByParamWithoutPage jav
  • 国家发改委发布《“互联网+”高效物流实施意见》

    国家发展改革委关于印发 互联网 高效物流实施意见 的通知 发改经贸 2016 1647号 国务院有关部委 直属单位 各省 自治区 直辖市及计划单列市人民政府 为贯彻落实 国务院关于积极推进 互联网 行动的指导意见 国发 2015 40号 发
  • #ifdef,#ifndef,#define,#endif解析(原)

    我们在看一些开源的源代码的时候 经常会看到如下情景 if defined PTHREADS defined NOTHREADS define STL PTHREADS endif if defined UITHREADS defined P
  • github上的adminlte下载太慢,下载失败解决办法

    不知道为什么github上的AdminLTE下载特别慢 一直失败 可以到码云上的镜像仓库去下载 码云急速下载
  • USB/UART/I2C/SPI等接口传输速率

    USB UART I2C SPI等接口传输速率 目录 USB总线 UART I2C总线 SPI总线 GPIO RK3399 FMC 参考 USB总线 USB1 1 低速模式 low speed 1 5Mbps 全速模式 full speed
  • CompletableFuture使用(五)

    异步任务交互方法applyToEither acceptEither和runAfterEither的使用介绍 1 applyToEither两个异步任务哪个先返回就处理哪个异步任务结果并返回CompletableFuture Complet
  • Flexera 2023 云状态报告解读

    导读 根据 Flexera 2023 云状态报告显示 经济问题不会减缓公有云市场的增长 FinOps 仍然处于应用多云战略的企业首要关注的问题 AWS 和 Azure 在全球市场仍处于领导地位 Flexera 根据对全球 750 位云决策者
  • iOS开发网络-HTTP协议

    一 URL 1 基本介绍 URL的全称是Uniform Resource Locator 统一资源定位符 通过1个URL 能找到互联网上唯一的1个资源 URL就是资源的地址 位置 互联网上的每个资源都有一个唯一的URL 2 URL中常见的协