HTTP协议
1.面试题:聊一下HTTP协议(协议的完整通信过程)
2.通信过程
1> 请求
- 客户端 -> 服务器
- 请求的内容
a. 请求行(请求方法,GET还是POST;/HTTP协议,版本号,1.1还是1.0;/请求资源路径,url)
b. 请求头(描述客户端的信息,客户端的操作系统,要请求数据的一些信息,等)
c. 请求体(POST请求才需要有,存放具体数据)
2> 响应
- 服务器 -> 客户端
- 响应的内容
a. 状态行(响应行,状态码)
b. 响应头(服务器的信息,返回数据的类型,返回数据的长度)
c. 实体内容(响应体,返回给客户的具体内容)
3.HTTP请求的方法
1> GET
- 参数都拼接在URL后面
- 参数有限制
2> POST
- 参数都在请求体
- 参数没有限制
4.iOS中发送GET/POST请求的手段
1> NSURLConnection
//发送一个同步请求
+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error;
//发送一个异步请求
+ (void)sendASynchronousRequest:(NSURLRequest *)request queue:(NSOperationQueue *)queue completionHandler:(void (^)NSURLResponse *response, NSData *data, NSError *connectionError)) handler;
//代理的方法(异步)
//有四种方法,实现的效果是一样的:
[NSURLConnection conectionWithRequest:request delegate:self];
[[NSURLConnection alloc] initWithRequest:request delegate:self];
[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
NSURLConnection *connection = [NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO];
/*这里可以做一些操作,然后再开始请求数据*/
[connection start];
NSURLConnection局部对象(例如上面的connection)不会被自动销毁,请求完成后才会被销毁;所以上面前三句代码没有创建对象也可以完成请求。