简析http协议(适合技术小白的呦!)

什么是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这片大海,就注定要时而风和日丽,时而狂风骤雨,在不断的学习与积累中成长,成为心中那个更好的自己,不是一蹴而就,而是滴水石穿.如果本篇博文有哪些缺陷,欢迎各位大佬批评指正,在下洗耳恭听!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值