以前看到有关http的东西,我都会绕过去,决定这东西没太大用处。现在既然决定成为一名优秀的web前端工程师,那么这个时候就应该知难而不退。
ps:以下摘自,看到他写的太好来所以直接使用:知乎大神——刘耀——谈谈HTTP协议的流程,HTTP详解
一、什么是HTTP协议?
HTTP是Hyper Text Transport Protocol的缩写,望文知意便是 超 文本 传输 协议。
二、HTTP协议能做什么?
首先我们要知道,我们在使用网页浏览器(web browser)时候的流程,我们首先在浏览器中的地址栏中输入URL(Uniform Resource Locator 统一资源定位符 简单来说是网址),浏览器根据URL从web服务器端获取文件资源,从而显示出web页面。
在上面过程中web使用的协议规范就是HTTP,协议就是规则的约定。
我们把通过发送请求达到获取服务器资源的web浏览器称为客户端(client)。将web类比于现实生活,发送请求以获取资源的就是顾客(客户端),提供资源的就是服务员(服务器端)。
图一
总而言之,HTTP就是负责在客户端请求资源,在服务器端响应的协议。
三 、与HTTP密切相关的其他协议。
在实际应用中,我们要使用HTTP协议就少不了其他的协议的辅助。
1、负责传输的IP协议
IP(Internet Protocal)即网际协议。可能有人会把IP和IP地址搞混,IP的作用是把数据准确传递给对方,而要达到准确传递给对方的目的则需要用到IP地址。IP地址是指明了节点在网络中
被分配到的地址,因此IP地址可以看做是IP协议完成的一个条件。
2、负责传输可靠地TCP协议
TCP(transport control protocal)即传输控制协议。它提供可靠的字节流服务。字节流服务是指为了传输方便,将大块的数据分割为文段为单位的数据包进行传输。可靠的传输服务是指能
够确定数据包是否发送到对方。
如何确定数据包发送到对方?
TCP协议采用了三次握手策略(three-way handshaking)如图二
图二
3、负责域名解析的DNS
DNS即(Domain name system)
上文说到确定主机在互联网中的位置可以由IP地址确定,而IP地址是一串无规律的数字这并不适合让人类来记忆,相比于无规律的数字人类更倾向于用字母和数字的组合(主机名或者域名)来记忆,DNS的作用就是将域名转换成对应的IP地址,或者将IP地址转换为对应的域名。如图三。
图三
4、如图四所示给出 在HTTP协议工作时,其他协议的职责。
图四
之前有写过http的操作流程(谈谈HTTP协议的流程),有小伙伴说写得很清楚,一路看下来没有晦涩的地方,但是也希望我能把http协议的细节讲解清楚。于是在深夜默默地敲键盘给那位小伙伴一个交代。
一、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
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值,然后对比服务器上的记录,最后确定是哪一个客户端,之前的信息状态是什么.
这样一来,服务器就能够分辨出发送请求的客户端究竟是哪一个了。
感想:虽然说详解HTTP协议,但是写到最后发现一篇文章根本不够写的……从晚上11点写到了凌晨一点,爬到床上睡了一觉,然后在第二天才把整篇文章完成,只希望这篇文章能够让大家对Http协议有一个更清晰的认识。最后感觉学习某样技术,最好还能够多看基本不一样的书从里面提取殊途同归的思想,这样的话往往能对这样技术有一个更输入的理解。