HTTP协议是超文本传输协议,是一个应用层的协议,是客户端和服务器端之间进行通信的一个协议, 一种典型的“请求-响应”式工作模式,即:客户端发起请求,服务器端回送响应。
HTTP协议工作流程:
1.首先客户端与服务器端需要加建立连接(常用的是建立TCP连接,还有“三次握手”的内容在后面介绍)。只要单机超链接,HTTP便开始工作。
2.建立连接后,客户端发送一个请求给服务器。 (请求的报文格式在后面介绍)。
3.服务器接收到请求后,给予相应的响应信息。(响应的报文格式在后面介绍)。
4.客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户端和服务器端断开连接。
HTTP报文格式:
1>HTTP的请求报文格式:
打开 chrome浏览器,进入开发者模式,输入一个新浪网站的地址,打开Network,找到Request Headers,点开view source,就可以查看到浏览器发给新浪服务器的请求:
总结HTTP请求的报文格式:
下面,给出一个真正的HTTP请求报文,如下:
GET /xxx/page.html HTTP/1.1 方法字段可以取值GET、POST,GET仅请求资源,POST会附带用户数据
Host: www.xxx.com 区分浏览器请求的哪个网站
Connection: close 服务器发送完被请求的对象之后关闭链接
User-agent:Mozilla/4.0
Accept-language: fr
2>HTTP的响应报文格式:
在Network中继续往下找到Response Headers,点击view source,显示服务器返回的原始响应数据:
总结HTTP响应的报文格式:
下面,给出一个真正的HTTP请求报文,如下:
HTTP/1.1 200 OK 200表示一个成功的响应,OK是说明
Connection: close 服务器发送完被请求的对象之后关闭链接
Data: Thu, 03, Jul, 2013 00:00:00 GMT
Server: Apache/1.3.0 (Unix)
Last-Modified: Sun, 6, May 2007 09:23:24 GMT
Content-Type: text/html 表示HTML网页;浏览器就是依靠Content-Type来判断响应的内容是网页还是图片,是视频还是音乐。浏览器并不靠URL来判断响应的内容,所以,即使URL是http://example.com/abc.jpg,它也不一定就是图片。
(data ... data ...)
常见的响应状态码:
200 表示一个成功的响应
404 Not Found:网页不存在
500 Internal Server Error:服务器内部出错
TCP链接和“三次握手”
在此简单说一下,后面的博客会详细介绍:
HTTP是基于传输层的TCP协议,而TCP是一个端到端的面向连接的协议。所谓的端到端可以理解为进程到进程之间的通信。所以HTTP在开始传输之前,首先需要建立TCP连接,而TCP连接的过程需要所谓的“三次握手”。下图所示TCP连接的三次握手。
在TCP三次握手之后,建立了TCP连接,此时HTTP就可以进行传输了。一个重要的概念是面向连接,既HTTP在传输完成之间并不断开TCP连接。在HTTP1.1中(通过Connection头设置)这是默认行为。
备注:
未来是HTTP2.0的时代,从今年6月份起苹果公司要求开发者提交到APP store的产品必须兼容面向硬件识别和网络路由的最新互联网协议IPV6-only,就是基于对HTTP2.0的支持,这样会有更快更安全的进行网络传输。 苹果弃用NSURLConnection,转向支持最新的NSURLSession,在今后的代码中最好是用NSURLSession,因为它兼容IPV6-only,在最新的AFNetworking中也停止了对NSURLConnection的封装,只封装使用NSURLSession。但是经过检测在iOS9系统上NSURLConnection仍然还是兼容IPV6-only,但是趋势终究还是NSURLSession。