http和https
- URL全称是Uniform Resource Locator(统一资源定位符)通过1个URL,能找到互联网上唯一的1个资源
- URL就是资源的地址,位置,互联网上的每个资源都有一个唯一的URL
- URL的基本格式= 协议://主机地址/路径
- 协议:不同的协议,代表着不同的资源查找方式,资源传输方式{ftp://(文件传输协议), http://(超文本传输协议), https://(安全超文本传输协议), file:// (本地文件协议) }
- 主机地址:存放资源的主机的IP地址(地域)
- 路径:资源在主机的位置
HTTP协议, Hyper Transfer Protocol (超文本传输协议) 是用于万维网(WWW)服务器传送超文本到本地浏览器的传输协议,HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型.
工作原理: HTTP协议采用请求/响应模型. 客户端向服务器发送一个请求报文,服务器以一个状态作为响应.
HTTPS: 安全超文本传输协议 它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息.它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版. HTTPS协议使用SSL在发送方和接受方通过交换共知的秘钥来实现.因此,传送的数据不容易被网络黑客截取和解密.
SSL是Netscape公司所提出的安全保密协议,在浏览器和web服务器之间构造安全通道来进行数据传输,SSL运行TCP/IP 层值上,应用层之下,为应用程序提供加密数据通道.
- https协议需要到ca申请证书,一般免费证书很少,需要交费
- http是超文本传输协议,信息是明文传输,https则是具有安全性的加密传输协议
- http和https是用的是完全不同的链接方式,用的端口也不一样,前者是后者是443
- http的链接很简单,是无状态的
- https是协议是由SSL + HTTP 协议构建的可进行加密传输,身份认证的网络协议 要比http安全
请求方式: GET 和 POST ;
连接方式:
- 同步连接:程序容易出现卡死现象
- 异步链接:等待数据返回
异步连接有两种实现方式:
- 设置代理,接收数据
- 实现block
NSAppTransportSecurity 类型 Dictionary
下添加
NSAllowsArbitraryLoads
类型
Boolean ,
值设为
YES
同步GET :
- 创建一个地址字符串,注意: 不要有空格
- 创建一个统一资源定位符(URL)
- 创建一个NSURLRequest,并配置缓存策略和超时时间
- 通过一个NSData对象获取网络请求的数据
同步POST:
- 创建一个地址字符串,注意: 不要有空格
- 创建一个统一资源定位符
- 使用NSMutableURLRequest. 因为之后要对request做更改
- 创建一个上传数据的字符串,并且转成NSData对象
- 设置请求方式 (setHTTPMethod)
- 设置上传的Data(setHTTPBody)
- 通过一个NSData对象获取网络请求的数据
POST和GET的区别:
- POST设置请求方式
- GET设置Body
同步GET和POST的缺点: 会造成程序的卡顿,所以在开发中不推荐使用
//get同步
- (
IBAction
)getT:(
id
)sender {
//
地址字符串
NSString
*urlString =
@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx?date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213"
;
//统一资源定位符 (URL)
NSURL
*url = [
NSURL
URLWithString
:urlString];
//
创建网络请求 (通过URL)
//
参数
1:
统一资源定位符
//参数 2: 缓存协议(策略)
//
参数
3:
有效时间
(
超出时间
)
NSURLRequest
*request = [
NSURLRequest
requestWithURL
:url
cachePolicy
:(
NSURLRequestReloadIgnoringLocalCacheData
)
timeoutInterval
:60.0f];
//连接服务器,接收数据
//NSURLConnection
在
9.0
之后不推荐使用
//
参数
1 : NSURLRequest
类型的对象
//
参数
2 :
存储的是一些网络请求的信息
,
一般为
nil
//参数 3 : 错误信息
NSData
*data = [
NSURLConnection
sendSynchronousRequest
:request
returningResponse
:
nil
error
:
nil
];
NSLog
(
@"%@"
,data);
//
解析数据
NSDictionary
*dict = [
NSJSONSerialization
JSONObjectWithData
:data
options
:(
NSJSONReadingAllowFragments
)
error
:
nil
];
NSLog
(
@"%@"
,dict);
}
//post同步
- (
IBAction
)postT:(
id
)sender {
//创建URL
NSString
*string =
@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx"
;
NSURL
*url = [
NSURL
URLWithString
:string];
//创建请求
NSMutableURLRequest
*request = [
NSMutableURLRequest
requestWithURL
:url];
NSString
*dataString =
@"date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213"
;
//
把这个字符串转成
NSData
类型的对象
NSData
*postData = [dataString
dataUsingEncoding
:
NSUTF8StringEncoding
];
//设置请求方式 (大写) 如: POST(必须要设置) GET(可以不设置,因为默认是GET)
[request
setHTTPMethod
:
@"POST"
];
//
需要把上传的
data
放进
request
里面
[request
setHTTPBody
:postData];
//连接服务器
NSData
*data = [
NSURLConnection
sendSynchronousRequest
:request
returningResponse
:
nil
error
:
nil
];
//
解析数据
NSDictionary
*dict = [
NSJSONSerialization
JSONObjectWithData
:data
options
:(
NSJSONReadingAllowFragments
)
error
:
nil
];
NSLog
(
@"%@"
,dict);
}
异步
#import
"ViewController.h"
@interface
ViewController
()<</span>NSURLConnectionDataDelegate>//遵循代理
@property
(
nonatomic
,
strong
)
NSMutableData
*resultData;
@end
//get异步
- (
IBAction
)getY:(
id
)sender {
//
通过地址字符串
,
创建
url
NSString
*urlString =
@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx?date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213"
;
NSURL
*url = [
NSURL
URLWithString
:urlString];
//
通过
url,
创建请求
NSURLRequest *request = [NSURLRequest requestWithURL:url];
#pragma mark -----block
//
调用带有
block
回调的方法
,
执行网络请求
//
参数
1: NSURLRequest
//
参数
2: block
块里面的代码在哪个线程执行
[
NSURLConnection
sendAsynchronousRequest
:request
queue
:[
NSOperationQueue
mainQueue
]
completionHandler
:^(
NSURLResponse
*
_Nullable
response,
NSData
*
_Nullable
data,
NSError
*
_Nullable
connectionError) {
//respone
携带的是借口的一些信息
//data
请求下来的数据信息
(
需要使用的
)
//connectionError
错误信息
if
(connectionError ==
nil
) {
NSDictionary
*dict = [
NSJSONSerialization
JSONObjectWithData
:data
options
:(
NSJSONReadingAllowFragments
)
error
:
nil
];
NSLog
(
@"%@"
,dict);
//
这里应该刷新
UI
了
//1 :
给数据源数组赋值
//2 :
赋值结束之后
,
刷新
UI ([[self.tableView reloadData])
//原则 : 主线程只负责更新UI
}
}];
#pragma mark -----代理
//
代理的异步网络请求
(GET)
//
参数
1: NSURLRequest
//
参数
2:
代理
[
NSURLConnection
connectionWithRequest
:request
delegate
:
self
];
}
//post异步
- (IBAction)postY:(id)sender {
//
通过地址字符串
,
创建
url
NSString
*urlString =
@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx"
;
NSURL
*url = [
NSURL
URLWithString
:urlString];
//
通过
url,
创建请求
NSMutableURLRequest
*request = [
NSMutableURLRequest
requestWithURL
:url];
//
因为
POST
通过
data
给服务器传输数据
,
所有通过
string
创建
data
NSString
*dataString =
@"date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213"
;
NSData
*postData = [dataString
dataUsingEncoding
:
NSUTF8StringEncoding
];
//
设置请求方式
[request
setHTTPMethod
:
@"POST"
];
//
设置
body,
[request
setHTTPBody
:postData];
#pragma mark ----block
[
NSURLConnection
sendAsynchronousRequest
:request
queue
:[
NSOperationQueue
mainQueue
]
completionHandler
:^(
NSURLResponse
*
_Nullable
response,
NSData
*
_Nullable
data,
NSError
*
_Nullable
connectionError) {
NSDictionary
*dict = [
NSJSONSerialization
JSONObjectWithData
:data
options
:(
NSJSONReadingAllowFragments
)
error
:
nil
];
NSLog
(
@"%@"
,dict);
}];
#pragma mark ----代理
[
NSURLConnection
connectionWithRequest
:request
delegate
:
self
];
}
#pragma mark -----NSURLConnectionDataDelegate协议方法
//开始响应
- (
void
)connection:(
NSURLConnection
*)connection didReceiveResponse:(
NSURLResponse
*)response{
//
初始化保存结果的
data
self
.
resultData
= [
NSMutableData
data
];
}
//
接收到数据
//
这个方法会重复的执行
,
所以可能拿到一段一段的数据
.
这就是需要我们把这些数据拼接起来
- (
void
)connection:(
NSURLConnection
*)connection didReceiveData:(
NSData
*)data{
//
为了防止
拿到的数据不全
,
所以把拿到的数据拼接到保存结果的
data
中
.
[
self
.
resultData
appendData
:data];
}
//
结束响应
- (
void
)connectionDidFinishLoading:(
NSURLConnection
*)connection{
//
NSDictionary
*dict = [
NSJSONSerialization
JSONObjectWithData
:
self
.
resultData
options
:(
NSJSONReadingAllowFragments
)
error
:
nil
];
NSLog
(
@"
异步代理
---> %@"
,dict);
//
更新数据源数组
//
刷新
UI
}
@end
Policy n. 政策,方针;保险单
Interval n. 间隔;间距;
Synchronous adj. 同步的;同时的
Fragments n. 碎片(fragment的复数);片断;[计] 分段
Method n. 方法;条理
Asynchronous adj. [电] 异步的;不同时的
Operation n. 操作;经营;[外科] 手术;[数][计] 运算
Queue n. 队列;长队;辫子