ios开发网络篇—HTTP协议 - 转

一.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协议

 

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 
/MJServer/resources/images/1.jpg 
HTTP/1.1 

请求头:包含了对客户端的环境描述,客服端请求的主机地址等信息 
Host:192.168.1.105:8080 //客户端想访问的服务器主机地址 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9) Firefox/30.0// 客户端的类型,客户端的软件环境 
Accept: text/html, /// 客户端所能接收的数据类型 
Accept-Language: zh-cn // 客户端的语言环境 
Accept-Encoding: gzip // 客户端支持的数据压缩格式 
请求体:客户端发给服务器的具体数据,比如文件数据

 

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 2014 12:54:52 GMT // 响应的时间 

实体内容:服务器返回给客户端的具体数据,比如文件数据 
这里写图片描述


3.补充:推荐工具firebug-1.12.5-fx.xpi   虫子的作用:拦截所有的http请求


4.常见的响应状态码 
这里写图片描述


四.发送HTTP请求的方法 

1.简单说明 : 在HTTP/1.1协议中,定义了8种发送http请求的方法 
Get,Post,Options,Head,Put,Delete,Trace,Connect,Patch 

2.get和post请求 ,要想使用Get和Post请求跟服务器进行交互,得先了解一个概念:参数就是传递给服务器的具体数据,比如登录时的账号,密码 ,Get和Post对比: 

Get :在请求URL后面以?的形式跟上发给服务器的参数,多个参数之间用&隔开。 注意:由于浏览器和服务器对URL长度有限,因此在URL后面附带的参数是有限期的,通常不能超过1KB 
Post :发给服务器的参数全部放在请求体中 ,理论上,Post传递的数据量没有限制(具体还得看服务器的处理能力)

 

3.Get和Post的选择  选择Get和Post的建议 
  (1)如果要传递大量数据,比如文件上传,只能用Post请求 
  (2)Get的安全性比Post要差些,如果包含机密/敏感信息,建议用Post 
  (3)如果仅仅要索取数据(数据查询),建议使用Get 
  (4)如果是增加,修改,删除数据,建议使用Post

 

4.ios中发送HTTP请求的方案  在iOS中,常见的发送HTTP请求(Get和Post)的解决方案有 

(1)苹果原声(自带) 
NSURLConnection:用法简单,最古老最经典最直接的一种方案 
NSURLSession:ios7新出的技术,功能比NSURLConnection更加强大 
CFNetwork:NSURL*的底层,纯C语言 

(2)第三方框架 
ASIHttpRequest:外号”HTTP终结者”,功能及其强大,可惜早已停止更新 
AFNetworking:简单易用,提供了基本够用的常用功能

 

5.ASI和AFN架构对比 
这里写图片描述 
说明:AFN基于NSURL,ASI基于CFHTTP,ASI的性能更好一些。

转载于:https://www.cnblogs.com/jiuyi/p/10112243.html

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

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

相关文章

总结的一些内存问题

前言之前在实习时,听了 OOM 的分享之后,就对 Linux 内核内存管理充满兴趣,但是这块知识非常庞大,没有一定积累,不敢写下,担心误人子弟,所以经过一个一段时间的积累,对内核内存有一定…

云计算-从基础到应用架构系列-云计算的演进

为什么80%的码农都做不了架构师?>>> 开篇 本篇是主要讲述云计算的发展历程,由于云计算本身提出来也不是太久,并且其实云计算也是经过前人的一些经验总结提出,所以我们对之前的一 些计算机的发展史有个一定的了解&…

Linux下的基本常用命令解析

1.查进程ps命令查找与进程相关的PID号:ps a 显示现行终端机下的所有程序,包括其他用户的程序。ps -A 显示所有程序。ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。ps -e 此参数的效…

常用数据库脚本

SqlServer:1、修改数据库排序规则,改成中文方式(如果是英文方式的话,直接写insert插入中文会有问题的,需要使用insert into Table_1 values(N中文)的方式)Alter database master COLLATE Chinese_PRC_CI_AS;修改之后对于这个库中的…

这样理解mmap,挺有意思!

大概雍正皇帝怎么也不会想到,自己在西历2022年的男生和女生眼里,会是截然不同的两种形象。1以我对身边同学朋友的观察,男生们大多爱看《雍正王朝》,他们眼中的雍正,大约是个推行了“火耗归公”、“摊丁入亩”等遏制贪腐…

软件开发中的11个系统思维定律

为什么80%的码农都做不了架构师?>>> http://sd.csdn.net/a/20101217/284119.html?1292550154 彼得圣吉在其著作《第五项修炼》中提到的系统思维定律同样适用于软件开发。 1. 今日的问题源于昨日的解决方案(Today’s problems come from yes…

boost.asio防止恶意空连接的方法

转载:http://blog.csdn.net/educast/article/details/13167847 网络服务器通常要应对一些意外情况,如空连接行为,指在遇到客户端连接后不进行任何操作,并很可能在大量空连接情况下导致服务器资源耗尽而无法工作。以下代码主要工作…

赢在中国 (2008-3-19)

赢在中国又换在10点,前面几分钟没有看到。虽然我一直不看好32号老董,但是我还是很好奇看看他是怎么样让自己又一次成为众人的对立面的。 我觉得32号和04号都不是心胸宽广之辈,但至少04号比32号真诚,只是他还没有修炼到32号的厚厚的…

为什么我对流程情有独钟?

写这个标题的原因是我有一个同事兼朋友,他的名字刚好和流程谐音,最近他刚离职回苏州工作,在球场下,他是我的良师益友,在球场上,他是我们可以信任的队友,我们不仅一次把比我们高大、速度比我们快…

UVa-401-Palindromes(回文)

这一题的话我们可以把映像字符的内容给放入一个字符串常量里面,然后开辟一个二维的字符串常量数组,里面放置答案。 对于回文实际上是很好求的,对于镜像的话,我们写一个返回char的函数,让它接收一个char。 接收之后进行…

C#中获取当前时间:System.DateTime.Now.ToString()用法

//2008年4月24日System.DateTime.Now.ToString("D");//2008-4-24System.DateTime.Now.ToString("d"); //2008年4月24日 16:30:15System.DateTime.Now.ToString("F");//2008年4月24日 16:30System.DateTime.Now.ToString("f"); //2008-…

基于boost asio实现的支持ssl的通用socket框架

情景分析现已存在一个可用稳定的异步客户端类http_client_base,该类基于boost asio实现了连接服务器,发送请求,获取响应和解析http数据等操作,该类的大致实现框架如下1classhttp_client_base 2{ 3public: 4 http_client_ba…

C#创建简单的验证码

首先&#xff0c;创建一个CLASS类&#xff0c;然后需要add Reference的方式添加 System.Drawing&#xff08;画画的类&#xff09; 方法代码如下&#xff1a; 1/**//**//**//// <summary> 2 /// 定义显示的随机字符 3 /// </summary> 4 /// &…

昨天的事情想说一下

发那篇文章的目的昨天发文章之后&#xff0c;我的一个好朋友微信找我&#xff0c;跟我说了很多关于文章的事情&#xff0c;所以&#xff0c;我自己也思考了许多。关于泄愤这个事情&#xff0c;我还是挺想说的。可能很多人看到了一个不好的东西&#xff0c;然后网上发发这个&…

Multidimensional Queries(二进制枚举+线段树+Educational Codeforces Round 56 (Rated for Div. 2))...

题目链接&#xff1a; https://codeforces.com/contest/1093/problem/G 题目&#xff1a; 题意&#xff1a; 在k维空间中有n个点&#xff0c;每次给你两种操作&#xff0c;一种是将某一个点的坐标改为另一个坐标&#xff0c;一种操作是查询[l,r]中曼哈顿距离最大的两个点的最大…

poj 3342

概率dp&#xff0c;不解释。 View Code #include<iostream>#include<map>#include<cstdio>#include<vector>using namespace std;const int maxn201;int dp[210][2];vector<int>edge[maxn];void dfs(int u,int p){int i,j; dp[u][1]1;dp[u][…

最全是一次I2C总结

博主将 I2C spec 文章总结为一篇&#xff0c;目录如下I2C Introduction I2C Architecture I2C Transfer I2C Synchronization And Arbitration I2C Hs-mode1、I2C Introduction1、I2C 历史I2C&#xff1a;Inter-Integrated Circuit&#xff0c;集成电路总线。I2C 是 Philips 公…

Interesting Finds: 2008.03.24

.NET: C#正则表达式整理备忘 谈谈volatile变量 Other: PTOM: The Open Closed Principle Calculating pi with C# - Calculate PI using C# Regular Expression Workbench - a free and opensource option for RegexBuddy 转载于:https://www.cnblogs.com/gOODiDEA/archive/2…

如何利用openSsl来计算一个文件的md5值?

openssl环境的配置&#xff0c; 我就不再说了。在本文中&#xff0c; 我们来讨论一个文件的md5值&#xff0c; 废话少说&#xff0c; 直接给大家代码&#xff0c; 上点干货&#xff1a; [cpp] view plaincopy #include <iostream> #include <openssl/md5.h> // 如…

qs文档翻译

安装&#xff1a; npm install qs --save-dev 基本用法&#xff1a; 1 let qs require(qs);2 let assert require(assert);3 4 5 //qs.parse(ac)将字符串等式转换为对象6 let obj qs.parse(ac);7 console.log(obj)//{a:c}8 9 //qs.stringify(obj)将对象转化为字符串等式 10 …