什么是HTTP协议
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基。Ted Nelson组织协调万维网协会(World Wide Web Consortium)和互联网工程工作小组(Internet Engineering Task Force )共同合作研究,最终发布了一系列的RFC,其中著名的RFC 2616定义了HTTP 1.1。
简单来说,http协议就是基于tcp协议的在网络上传输html文件的一种网络协议,用于浏览器与服务器之间的通信.其协议内容主要分为两大部分:
- 1.请求部分,请求部分又分为:
-请求行(Request Line)
-请求头(Header)
-请求体 (Body)
-具体格式可参看以下内容:
GET / HTTP/1.1
请求头
Host: www.baidu.com
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
请求体
name:xxx
pwd:xxxx**
- 响应部分
-响应行
-响应头
-响应体
-具体格式参看以下内容:
响应行
HTTP/1.1 200 OK
响应头
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html;charset=utf-8
Date: Sun, 30 Dec 2018 02:34:03 GMT
Expires: Sun, 30 Dec 2018 02:34:03 GMT
Server: BWS/1.1
响应体
<!DOCTYPE html>
<!--STATUS OK-->
html标签
HTTP协议的特点
- 、简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
- 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
- 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
- HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
- 支持C/S模式(客户机/服务器)和B/S模式(浏览器/服务器).
HTTP之状态码
1.1–:指示信息,表示请求已接收,继续处理;
1.2–:成功,表示请求已经被成功接收,理解,接受;
1.3–:重定向:要完成请求必须进行更进一步的操作;
1.4–:客户端错误:请求有语法错误或请求无法实现;
1.5–服务器错误:服务器未实现合法的请求.
常见的HTTP请求方法
1.GET 目前的HTTP/1.1版本中比较常用的一种请求方法,用来请求指定的页面的信息,并返回实体主体;
2.HEAD:类似于GET请求,但返回的响应中没有对应的内容,只用于获取抱头;
3.POST:向指定资源提交数据进行处理请求,如提交表单或者上传文件,数据信息包含在请求体中
4.其他的请求方法还有PUT,DELETE,CONNECT,OPTIONS,TRACE
HTTP工作原理
C/S模式下的网络通信
1.客户端连接Web服务器;
2.发送http请求;
3.服务器接收请求并返回HTTP响应;
4.释放TCP连接;
5.客户端浏览器解析HTML内容
TCP的三次握手与四次挥手
首先说明为什么要讲解关于TCP的相关知识,主体不是HTTP协议么?并不是笔者在知识的路上脱了轨,哈哈,我想要说明的是HTTP协议是基于TCP协议的,如果TCP协议不存在,就像你想和你的那个她远隔千里来相见,却苦于没有交通工具一样悲剧,我们需要来了解TCP的建立连接的机制以及断开连接的机制,这对于技术小白初学HTTP协议是很有必要的.
TCP的三次握手
笔者在网上寻来觅去,终于找到了一个有意思的图片,来解读三次握手,其实三次握手理解起来十分简单,就像图中说明的男女处对象一样.
TCP三次握手(交友版)
- tcp三次握手
其实理解TCP的三次握手并不难,首先服务器端向客户端主动发送一个SYN包,发起一个新的连接,并附带一个seq = x 的序列号,接着呢服务器端收到了这个请求,她就得确认啊是不是,确认OK后会向客户端发送一个ACK+SYN包,ACK指的就是确认的意思,即确认序号有效,她也会向客户端发起一个连接,并发送序列号seq = y,确认号ack = x+1,客户端收到了来自服务器的响应以及请求,向服务端发送一个确认号ack = y+1 ack 1,发送完毕之后,服务器确认收到的信息无误后,二者之间的连接就已经建立起来了,这时可以进行正常的通信了.
TCP四次挥手(分手版)
- tcp四次挥手
对于TCP的四次挥手相比与三次握手来说,则有些复杂,首先客户执行close(),向服务端发送一个FIN包,请求释放一个连接,服务器端收到请求后进行响应,所以先给客户端发送一个响应,即ACK包,确认有效,但此时可能自己想要发送的内容还未发送完,所以不会立即调用close()操作,这也就解释了为什么是四次挥手,比三次握手多一次的原因,当服务端调用close()时,她会向客户端发送一个FIN包,请求释放一个连接,当客户单收到这个请求之后,会向服务端发送一个确认包,同时客户端进入了time_wait状态,需要等待2MSL(2个最大报文段时间),确认服务端已经收到,再释放资源,进入closed状态,如果服务端没有收到则重新发送,如果客户单不等待2MSL而直接断开连接,那么最后一次报文段可能会丢失,服务端并没有收到确认包,她就会重新发送一个请求,但此时客户端已经收不到了.
小结
到了这里,本篇博文也就将告一段路,本篇主要简述了http协议的概念,特点,格式,原理等内容,当然对于http协议的整个知识体系来说这只算是九牛一毛,但对于小白来说我们需要了解http协议,需要一个入口,需要在深入探究http协议的基础之上建立一个良好的基础,千里之行始于足下,当我们选择了IT这片大海,就注定要时而风和日丽,时而狂风骤雨,在不断的学习与积累中成长,成为心中那个更好的自己,不是一蹴而就,而是滴水石穿.如果本篇博文有哪些缺陷,欢迎各位大佬批评指正,在下洗耳恭听!