HTTP(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式,HTTP1.1版本中给出一种持续连接的机制,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。
对于IOS开发者来说,了解一些http请求的相关知识还是很有必要的。
请求报文
1)用httpwatch查看访问一个网站的响应情况,敲入一个网址后,浏览器向服务器发出请求。
页面中的html、图片、js、css在单独的请求中。网页加载时是一一响应的。
2)get .....aspx http1.1表示向服务器用get方式请求首页,使用http1.1协议。
3)Accept-Encoding gzip,deflate表示浏览器支持gzip,deflate两种压缩算法。
4)Accept-Language zh-cn表示浏览器支持的语言,很多进入后自动就是中文界面的国际网站就是通过读取这个头的值实现的。
5)Connection keep-Alive(长连接 服务器响应之后 等待很短的时间,当很短的时间内没有人连接才断开) 一般情况下,一旦web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了Connection keep-Alive,则TCP连接在发送后将任然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了每个请求建立新连接所需的时间,还节约了网络带宽。(短连接 服务器响应之后 立即断开连接)
6)Cookie是浏览器向服务器发送和当前网站关联的Cookie,这样在服务端也能读取浏览的Cookie了,一般可以把sessionId放在其中传递给服务器,从而取到对应session值。
7)User-Agent为浏览器的版本信息。通过这个信息可以读取浏览器是IE还是FireFox、支持的插件、Net版本等。
结构图如下:
响应报文
1)Server:Cassini/3.5.0.5表示服务器的类型
2)Content-Type:text/html;charset=utf-8表示返回数据的类型
3)服务器是通过Content-Type告诉客户端响应的数据的类型,这样浏览器就根据返回数据的类型来进行不同的处理,如果是图片类型就显示图片,如果是文本类型就直接显示内容,如果用html类型就用浏览器显示内容,如果是下载类型就弹出下载工具等。常用Content-Type:text/HTML,image/JPEG,text/plain,text/javascript,application/x-excel,application/octet-stream(二进制文件)
4)Content-Length表示后续数据消息体的长度,报文头只是描述,返回的具体数据(比如HTML文本、图片数据等)在两个回车之后的内容。
结构图如下:
响应数据
对于Response回来的数据,主要分为XML和JSON两种形式。
1. XML解析
I. 在IOS中,系统已经提供了NSXMLParser 解析器,这种解析器是SAX解析(逐个遍历节点解析,不能倒退)。
II. 我们也可以使用第三方插件GDataXML进行解析,它是DOM解析(一次性下载整个DOM文档)。
2. JSON解析
I. 在IOS中,系统已经提供了NSJSONSerialization解析,返回的结果为字典数组。
II. 在这里,我还是推荐使用MJExtension(可以参考我以前写的一篇文章,想了解的话,点击这里)进行数据解析,因为它可以直接返回对象数组。