网络总结1

原创 2015年11月18日 10:47:16

一、一个HTTP请求的基本要素

1.请求URL:客户端通过哪个路径找到服务器


2.请求参数:客户端发送给服务器的数据

* 比如登录时需要发送的用户名和密码


3.返回结果:服务器返回给客户端的数据

* 一般是JSON数据或者XML数据


二、基本的HTTP请求的步骤(移动客户端)

1.拼接"请求URL" + "?" + "请求参数"

* 请求参数的格式:参数名=参数值

* 多个请求参数之间用&隔开:参数名1=参数值1&参数名2=参数值2

* 比如:http://localhost:8080/MJServer/login?username=123&pwd=456


2.发送请求


3.解析服务器返回的数据


三、JSON解析

1.利用NSJSONSerialization类解析

* JSON数据(NSData --> Foundation-OC对象(NSDictionaryNSArrayNSStringNSNumber

+ (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;


2.JSON解析规律

* { } --> NSDictionary @{ }

* [ ] --> NSArray @[ ]

* " " --> NSString @" "

* 10 --> NSNumber @10


四、NSURLConnection

1.发布异步请求01--block回调

+ (void)sendAsynchronousRequest:(NSURLRequest*) request

    queue:(NSOperationQueue*) queue

    completionHandler:(void (^)(NSURLResponse* response, NSData* data, NSError* connectionError)) handler

* request : 需要发送的请求

* queue : 一般用主队列,存放handler这个任务

* handler : 当请求完毕后,会自动调用这个block


2.利用NSURLConnection发送请求的基本步骤

1> 创建URL

NSURL *url = [NSURL URLWithString:@"http://4234324/5345345"];


2> 创建request

NSURLRequest *request = [NSURLRequest requestWithURL:url];


3> 发送请求

[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:

 ^(NSURLResponse *response, NSData *data, NSError *connectionError) {

     4> 处理服务器返回的数据

 }];


五、XML

1.语法

1> 文档声明

<?xml version="1.0" encoding="UTF-8" ?>


2> 元素

3> 属性

<videos>

    <video name="小黄人 01" length="10"/>

    <video name="小黄人 01" length="10"/>

</videos>

* videosvideo是元素(节点)

* namelength叫做元素的属性

* video元素是videos元素的子元素


2.解析

1> SAX解析:逐个元素往下解析,适合大文件

* NSXMLParser


2> DOM解析:一口气将整个XML文档加载进内存,适合小文件,使用最简单

* GDataXML


六、HTTP的通信过程

1.请求

1> 请求行 : 请求方法、请求路径、HTTP协议的版本

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


2> 请求头 : 客户端的一些描述信息

* User-Agent : 客户端的环境(软件环境)


3> 请求体 : POST请求才有这个东西

* 请求参数,发给服务器的数据


2.响应

1> 状态行(响应行): HTTP协议的版本、响应状态码、响应状态描述

HTTP/1.1 200 OK


2> 响应头:服务器的一些描述信息

* Content-Type : 服务器返回给客户端的内容类型

* Content-Length : 服务器返回给客户端的内容的长度(比如文件的大小)


3> 实体内容(响应体)

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


七、HTTP的请求方法

1.GET

1> 特点

* 所有请求参数都拼接在url后面


2> 缺点

* url中暴露了所有的请求数据,不太安全

* url的长度有限制,不能发送太多的参数


3> 使用场合

* 如果仅仅是向服务器索要数据,一般用GET请求


4> 如何发送一个GET请求

* 默认就是GET请求

// 1.URL

NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];

// 2.请求

NSURLRequest *request = [NSURLRequest requestWithURL:url];

// 3.发送请求

[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {

}];


2.POST

1> 特点

* 把所有请求参数放在请求体(HTTPBody)中

* 理论上讲,发给服务器的数据的大小是没有限制


2> 使用场合

* 除开向服务器索要数据以外的请求,都可以用POST请求

* 如果发给服务器的数据是一些隐私、敏感的数据,绝对要用POST请求


3> 如何发送一个POST请求

// 1.创建一个URL 请求路径

NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/login"];


// 2.创建一个请求

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

// 设置请求方法

request.HTTPMethod = @"POST";

// 设置请求体 : 请求参数

NSString *param = [NSString stringWithFormat:@"username=%@&pwd=%@", usernameText, pwdText];

// NSString --> NSData

request.HTTPBody = [param dataUsingEncoding:NSUTF8StringEncoding];


八、NSMutableURLRequest的常用方法

1.设置超时

request.timeoutInterval = 5;

// NSURLRequest是不能设置超时的,因为这个对象是不可变的


九、URL转码

1.URL中不能包含中文,得对中文进行转码(加上一堆的%)

NSString *urlStr = [NSString stringWithFormat:@"http://localhost/login?username=喝喝&pwd=123"];

urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

// urlStr == @"http://localhost/login?username=%E5%96%9D%E5%96%9D&pwd=123"


十、数据安全

1.网络数据加密

1> 加密对象:隐私数据,比如密码、银行信息

2> 加密方案

* 提交隐私数据,必须用POST请求

* 使用加密算法对隐私数据进行加密,比如MD5

3> 加密增强:为了加大破解的难度

* 对明文进行2MD5 MD5(MD5($pass))

* 先对明文撒盐,再进行MD5 MD5($pass.$salt)


2.本地存储加密

1> 加密对象:重要的数据,比如游戏数据


3.代码安全问题

1> 现在已经有工具和技术能反编译出源代码:逆向工程

* 反编译出来的都是纯C语言的,可读性不高

* 最起码能知道源代码里面用的是哪些框架


2> 参考书籍:《iOS逆向工程》


3> 解决方案:发布之前对代码进行混淆

* 混淆之前

@interface HMPerson :NSObject

- (void)run;

- (void)eat;

@end


* 混淆之后

@interface A :NSObject

- (void)a;

- (void)b;

@end


十一、监测网络状态

1.主动监测监测网络状态

// 是否WIFI

+ (BOOL)isEnableWIFI {

    return ([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable);

}


// 是否3G

+ (BOOL)isEnable3G {

    return ([[Reachability reachabilityForInternetConnection] currentReachabilityStatus] != NotReachable);

}


2.监控网络状态

1> 监听通知

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkStateChange) name:kReachabilityChangedNotification object:nil];


2> 开始监听网络状态

// 获得Reachability对象

self.reachability = [Reachability reachabilityForInternetConnection];

// 开始监控网络

[self.reachability startNotifier];


3> 移除监听

[self.reachability stopNotifier];

[[NSNotificationCenter defaultCenter] removeObserver:self];

相关文章推荐

网络知识总结1

  • 2017年08月10日 06:38
  • 69MB
  • 下载

雅礼联考Day1总结(《论机房网络好坏对于选手比赛成绩的消极影响》)

听老师说是联赛组的题目,但是因为是雅礼出的,所以觉得即使联赛组也会出现一些SA,分块之类的题,没想到即使没有出那些题,我也挂的很惨,理由有很多。。 8:00-9:00 最近由于状态时好时坏所以昨天...

《计算机网络》知识总结-1.互联网是怎么通过网线连接起来的?电路交换,报文交换,分组交换这三个尤物究竟是何方神圣?

重读谢希仁的《计算机网络》时隔2年我有拿起了这本书,以前读的时候感觉这本书文绉绉的,该是无用的概念(事实上是当年比较浮躁)。这本书的第一种主要是导论。 看完后,有2个比较值得我记下来的。互联网是怎么...

牛客网 8-1 网络基础 操作系统 编译与体系结构 30题知识点总结

1、  系统内可以有无父进程的进程。  init进程没有父进程     2、死锁 定义 :在一个进程集合中,所有的进程都在等待只能由该进程集合中的其它进程才能引发的事件,这就是死锁 解释 :...

安卓中进行基于Http协议的网络访问基础总结-1

Http:超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。HTTP是一个客户端和服务器端...

《计算机网络第六版》部分知识点总结:1-2章

本科非计算机专业,《计算机网络》这门课没学过,正在看《计算机网络第六版》谢希仁。试着总结一些自己觉得重要的内容。如图所示这本书 计算机网络向用户提供的功能主要有两个:1.连通性   ...

计算机网络术语总结1

英文 中文 缩写 stub network 桩网络 multi-homed stub network 多宿桩网络 broadcast routing 广播路由...

《网络科学-原理与应用》要点总结1——图论

由于毕设的需要,寒假一直在看《网络科学-原理与应用》这本书,到现在为止粗粗的看了一遍,现在把一些要点都记录一下,当然里面好多数学推算都没懂,o(╯□╰)o 图是一个3元组:G=(N,L,f),N为节...

网络编程总结 1

一:确认网络环境3G/WIFI        1. 添加源文件和framework            开发Web等网络应用程序的时候,需要确认网络环境,连接情况等信息。如果没有处理它们,是...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:网络总结1
举报原因:
原因补充:

(最多只允许输入30个字)