iOS网络基础

iOS网络编程中会涉及一些协议(HTTP/HTTPS)和计算机网络相关概念,只有了解它们的相关机制和概念才能在实际的编程中解决一些出现的问题。本文主要会讲解HTTP、HTTPS、Cookie、Session等概念。

HTTP

HTTP是超文本传输协议,是用于从服务器传输超文本到本地浏览器的传送协议,它是基于TCP实现的,由于TCP是一个端到端的可靠的面向连接的协议,所以HTTP基于传输层TCP协议不用担心数据的传输的各种问题。移动端可通过HTTP向服务端请求数据(JSON/XML)或者下载上传二进制数据等,那么HTTP是如何工作的?

HTTP的工作流程

一次HTTP操作称为一个事务,其工作过程可分为四步:

  • 首先客户端与服务器需要建立连接。只要出发一个HTTP请求,HTTP的工作开始。
  • 建立连接(建立连接的过程涉及到TCP的三次握手操作)后,客户端发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和其他的内容。
  • 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
  • 客户端接收服务器所返回的信息进行解析操作,然后客户机与服务器断开连接。
HTTP请求报文和响应报文的格式
  • 起始行:如 GET / HTTP/1.0 (请求的方法 请求的URL 请求所使用的协议)
  • 头部信息:User-Agent Host等成对出现的值
  • 主体

GET 请求报文

 GET /books/?sex=man&name=Professional HTTP/1.1
 Host: www.example.com
 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
 Gecko/20050225 Firefox/1.0.1
 Connection: Keep-Alive

POST 请求报文

  POST / HTTP/1.1
  Host: www.example.com
  User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
  Gecko/20050225 Firefox/1.0.1
  Content-Type: application/x-www-form-urlencoded
  Content-Length: 40
  Connection: Keep-Alive  

  sex=man&name=Professional      

响应报文

 HTTP/1.1 200 OK
 Server:Apache Tomcat/5.0.12
 Date:Mon,6Oct2003 13:23:42 GMT
 Content-Length:112

 <html>...  
GET 与 POST 的区别

GET提交的数据会受到长度限制,GET和POST提交的数据存放位置一个在URL中一个在HTTP Body中;

HTTP 请求的错误码
  • 2xx : 成功状态码
  • 3xx : 重定向
  • 4xx : 客户端状态错误码
  • 5xx : 服务端错误状态吗
  • 500 : 服务器内部错误
  • 502 : 代理服务器连接不到后端的服务器
  • 504 : 后端服务器给代理服务器的响应超时
HTTP Header
  • Accept 就是告诉服务器端,我接受那些MIME类型
  • Accept-Encoding 这个看起来是接受那些压缩方式的文件
  • Accept-Lanague 告诉服务器能够发送哪些语言
  • Connection 告诉服务器支持keep-alive特性
  • Cookie 每次请求时都会携带上Cookie以方便服务器端识别是否是同一个客户端
  • Host 用来标识请求服务器上的那个虚拟主机,比如Nginx里面可以定义很多个虚拟主机,那这里就是用来标识要访问那个虚拟主机。
  • User-Agent 用户代理,一般情况是浏览器,也有其他类型,如:wget curl 搜索引擎的蜘蛛等

会话跟踪

  • 什么是会话: 客户端打开与服务器的连接发出请求到服务器响应客户端请求的全过程称之为会话;
  • 什么是会话跟踪: 会话跟踪指的是对同一个用户对服务器的连续的请求和接受响应的监视。
    -为什么需要会话跟踪: 浏览器与服务器之间的通信是通过HTTP协议进行通信的,而HTTP协议是”无状态”的协议,它不能保存客户的信息,即一次响应完成之后连接就断开了,下一次的请求需要重新连接,这样就需要判断是否是同一个用户,所以才有会话跟踪技术来实现这种要求。
cookie
  • 什么是cookie: cookie 实际上是包含用户信息的一小段文本信息
  • 为什么会使用cookie: HTTP的无状态性,服务端想记住某一个访问者只能通过某中标识来判断,cookie就作为服务端颁发给客户端的证书,作为继续请求的凭证
  • cookie的局限性: cookie保存在本地,存储信息不能超过3K,易于被伪造造成安全问题;所以敏感信息不能存储
Session
  • 什么是Session: Session是服务端记录用户信息的一种机制;Session相当于在服务器上建立了一个客户档案,通过SessionID来确定用户的信息
  • Session的有效期和过期时间: Session清理掉;一般被服务端放在内存中,但是大量访问会可能造成内存溢出的情况,所以超过设定时间的session会被清理掉!

密文处理

由于目前的app绝大多数已经切换到HTTPS协议,也就是传输的报文都是经过加密的,这其中包含一些相关概念需要讲述。

  • 公钥密码机制: 该机制包含公钥、私钥、加密算法;并且最重要的是只有私钥才能解析出密文的信息;
  • 对称与非对称加密算法: 公钥和私钥相同的机密算法叫对称加密算法(例如DES/AES等),公钥和私钥不相同的算法叫做非对称加密算法
  • 签名
    在传输的信息后面加上一段传输信息的hash后的内容,这样能够保证信息的完整和安全性;
  • 数字证书
    CA机构颁发的一个凭证,包含颁发机构、有效期、公钥、加密算法;

HTTPS

HTTPS被称为安全的HTTP原因在与它被SSL/TSL包裹了一层,客户端与服务端进行通讯是两者之间共同商议的加密机制对传输报文进行加密操作;

发起一个HTTPS请求,客户端和服务端进行了哪些沟通
HTTPS请求客户端和服务端之间的交互
HTTPS请求客户端和服务端之间的交互
  • client发送'我是客户端'的请求给server端,server接到请求返回自己的数字证书(CA机构颁发的);
  • client验证数字证书的真伪(由客户端的TSL完成),client生成一个随机数(使用证书的公钥加密)发给服务端;
  • server接收到请求后使用私钥解密随机数,sever将随机数hash计算用私钥加密后传给客户端
  • client使用公钥解密和本身的随机数hash值做比较,确定是server的身份;client此时用公钥加密一套对称加密算法和密钥给server用于以后的数据传输;
  • server和client就能进行正常的数据传输了

TCP协议和UDP协议

计算机网络层级
TCP协议

TCP协议是面向连接、保证高可靠性(数据无丢失、数据无失序、数据无错误、数据无重复到达)传输层协议。

UDP协议

UDP协议也是传输层协议,它是无连接,不保证可靠的传输层协议

IP协议

I P是T C P / I P协议族中最为核心的协议。所有的T C P、U D P、I C M P及I G M P数据都以I P数据
报格式传输。它的特点不可靠无连接;

TCP的三次握手操作

SYN(synchronous)是TCP/IP建立连接时使用的握手信号。在客户机和服务器之间建立正常的TCP网络连接时,客户机首先发出一个SYN消息

TCP的三次握手操作

  • 客户端发送syn报文并将序列号X放在Sequence Number字段中 ;
  • 服务端接收到请求,发送确认报文(Acknowledgement Number)X+1,将序列号Y放在Sequence Number字段中,SYN标志位仍旧为1;
  • 客户端收到响应再次发送确认报文Y+1,将序列号Z放在Sequence Number字段中;三次握手完成
TCP的四次挥手操作
TCP的四次挥手操作
客户端基于Token的身份验证
  • 客户端使用用户名跟密码请求登录
  • 服务端收到请求,去验证用户名与密码
  • 验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端
  • 客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里
  • 客户端每次向服务端请求资源的时候需要带着服务端签发的 Token
  • 服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据

文章参照

HTTP协议详解
TCP三次握手和四次挥手
TCP与UDP详解
HTTP
基于 Token 的身份验证

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容