一、HTTP协议通过请求(request)和响应(response)完成通信
在之前的文章里(谈谈HTTP协议的流程)有介绍到http协议是浏览器和web浏览器之间的通信规范,那么浏览器和web浏览器之间究竟是如何完成通信的呢?
实际上,浏览器和服务器之间是通过请求和响应的交替来完成通信的如图一
图一
这么一个请求和响应的的交互就构成了客户端(浏览器)和服务器之间的通信。
下面如图二,给出一个实例
图二
图二中客户端发给服务器的请求报文内容为
GET /index.htm HTTP/1.1
Host: hacker.jp
1、GET是一个请求方法,表示请求服务器的类型(后面我会介绍其他的的方法)。
2、/index.htm是一个URI,表示要求访问的资源对象。
3、HTTP/1.1表示客户端使用的HTTP协议版本是1.1。
4、Host: http://hacker.jp表示请求的主机为http://hacker.jp。
整个请求报文的含义是 请求访问http://hacker.jp主机上的/index.htm的页面资源
图二中接收到请求报文服务器端发送给客户端的响应报文为
HTTP/1.1 200 ok
Date:Tue, 10 jul 2017 10:50:15 GMT
Content-Length: 362
Content-Type: text/html
<html>
……
1、HTTP/1.1代表服务器对应的HTTP版本
2、200 ok 代表处理结果的状态码和原因短语 表示:
3、Date:Tue, 10 jul 2017 10:50:15 GMT表示创建响应的时间
4、下面空一行之后的内容为资源实体的主体,也就是服务器返回给客户端(浏览器)要现实的东西。
二、HTTP报文
之前一直在讲请求报文、响应报文,那么到底什么是报文呢?
1、HTTP报文:用于http协议交互的信息叫做http报文。报文本身是由多行数据构成的字符串文字。http报文通常由报文首部和报文主体两部分组成,两者之间由最初出现的空行划分。结构如图三所示:
图三
(1)报文首部:客户端或服务器端发送的请求或响应报文的内容及属性。
(2)空行(回车+换行):用来区分报文首部和报文主体。
(3)报文主体:应该要送的数据
2、请求报文:客户端发出的报文叫做请求报文。结构如图四所示:
图四
(1)请求行:包括了客户端的请求方法,URI、HTTP版本。
(2)请求首部字段:包括了请求的附加信息如客户端的信息,响应的优先级。
(3)通用首部字段:请求报文和响应报文都会使用的报文。
(4)实体首部字段:补充了与实体有关的资源信息,如实体更新的时间。
(5)报文主体:一般来说请求报文在使用GET方法的时候没有报文主体,在使用post方法的时候才有。(方法我会在下面详细介绍)
3、响应报文:服务器端发出的报文叫做响应报文。结构如图五所示:
图五
(1)响应报文状态行:包括HTTP版本、状态码。
(2)响应报文首部字段:服务器端向客户端发送响应报文使用的首部包括相应的附加内容,要求客户端补充的消息等。
(3)通用首部字段:请求报文和响应报文都会使用的报文。
(4)实体首部字段:补充了与实体有关的资源信息,如实体更新的时间。
(5)报文主体:对于响应报文来说报文体一般是传给客户端的数据。
接下来给一张帮大家更好地理解
三、客户端向服务器请求的HTTP方法
1、 GET:获取资源 如图七
图七
2、POST:传输实体主体 如图八
图八
3、PUT:传输文件 如图九
图九
4、HEAD:获得报文首部 如图十
HEAD方法和GET方法一样都是从服务器端获取资源,只是HEAD方法获取的是报文首部,用来确定客户端输入的URI的有效性和资源更新的日期时间。
图十
5、DELETE:删除文件 如图十一
图十一
6:、OPTIONS:询问支持的方法 如图十二
客户端用来询问服务器端支持哪一些方法
五、HTTP是无状态(stateless)协议
http协议是无状态协议即不保存状态。大家看下图片感受下
无状态协议的优点:
由于不需要保存记录,所以减少服务器的CPU和内存的资源的消耗。毕竟客户端一多起来保存记录的话对于服务器端来说是一个巨大的消耗。
无状态协议的缺点:比如当用户登录到淘宝,他转跳到淘宝的其他页面后,也需要保持登录状态。针对这种情况,web为了能够掌握是谁发送出的请求,需要保存用户的状态。如何保存呢?那就是cookie技术
六、Cookie技术
针对http协议的无状态特性带来的弊端:无法保存用户的状态。cookie技术应运而生。
cookie技术通过在请求和响应报文中写入Cookie信息来控制(或者说记录)客户端的状态。
1、Cookie技术会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。
2、客户端再向服务器端发送请求的时候,客户端会在请求报文中加入Cookie值后发送出去。
服务器端会检查客户端发送的请求中有没有Cookie值,然后对比服务器上的记录,最后确定是哪一个客户端,之前的信息状态是什么.
这样一来,服务器就能够分辨出发送请求的客户端究竟是哪一个了。
评论前必须登录!
注册