网络知识之二HTTP协议

Posted cac2020

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络知识之二HTTP协议相关的知识,希望对你有一定的参考价值。

一、HTTP协议

HTTP协议(Hypertext Transfer Protocol,超文本传输协议),一种无状态的、应用层的、以请求/应答方式运行的协议,它使用可扩展的语义和自描述消息格式,与基于网络的超文本信息系统灵活的互动。
是浏览器和服务器之间进行“沟通”的一种规范。

1、背景
HTTP协议基于TCP协议,前者属于应用层协议,后者属于传输层协议;TCP/UDP是广泛使用的网络通信协议,而且TCP可以实现稳定可靠的连接,那为啥有多出个http协议呢?
普通的C/S架构软件,顶多上千个Client同时连接,而B/S架构的网站,十万人同时在线也是很平常的事儿。如果十万个客户端和服务器一直保持连接状态,那服务器如何满足承载呢?
http协议的产生很大程度上是基于性能考虑,在请求之后,服务器端立即关闭连接、释放资源。既保证了资源可用,也兼容了TCP的可靠性。
通常说http协议是“无状态”的,也就是“服务器不知道你客户端干了啥”,所以后来有了session会话之类的玩意。

2、HTTP1.1的请求协议
HTTP请求消息由请求行、请求头、空行和请求数据四个部分组成。
技术图片

GET请求示例:

技术图片

第一部分:请求行,用来说明请求类型,要访问的资源以及所使用的HTTP版本.

GET说明请求类型为GET,[/562f25980001b1b106000338.jpg]为要访问的资源,该行的最后一部分说明使用的是HTTP1.1版本。

第二部分:请求头部,紧接着请求行(即第一行)之后的部分,用来说明服务器要使用的附加信息

从第二行起为请求头部,HOST将指出请求的目的地.User-Agent,服务器端和客户端脚本都能访问它,它是浏览器类型检测逻辑的重要基础.该信息由你的浏览器来定义,并且在每个请求中自动发送等等

第三部分:空行,请求头部后面的空行是必须的

即使第四部分的请求数据为空,也必须有空行。

第四部分:请求数据也叫主体,可以添加任意的其他数据。

这个例子的请求数据为空。

POST请求示例:

技术图片

第一部分:请求行,第一行明了是post请求,以及http1.1版本。
第二部分:请求头部,第二行至第六行。
第三部分:空行,第七行的空行。
第四部分:请求数据,第八行。

2.1请求行
请求行包含HTTP请求方法、请求的URL、HTTP协议版本三个内容,它们之间以空格间隔,并以回车+换行结束。

请求方法:
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

技术图片

2.2请求头
头部分成三部分:常用头域、请求头域、实体头域。其中常用头域和实体头域部分内容在响应协议部分也有相同的定义。
(1)常用头域

header 解释 示例
Cache-Control 指定请求和响应遵循的缓存机制 Cache-Control: no-cache
Connection 表示是否需要持久连接。(HTTP 1.1默认进行持久连接) Connection: close
Date 请求发送的日期和时间 Date: Tue, 15 Nov 2010 08:12:31 GMT
Pragma 用来包含实现特定的指令 Pragma: no-cache
Trailer 指出头域在分块传输编码的尾部存在 Trailer: Max-Forwards
Transfer-Encoding 文件传输编码 Transfer-Encoding:chunked
Upgrade 向服务器指定某种传输协议以便服务器进行转换(如果支持) Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
Via 通知中间网关或代理服务器地址,通信协议 Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)
Warning 关于消息实体的警告信息 Warn: 199 Miscellaneous warning

 

(2)请求头域

(3)实体头域

3、HTTP1.1的响应协议
HTTP响应消息分三块,即状态行、响应头、消息主体。

技术图片

示例:

技术图片

第一部分:状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成。

第一行为状态行,(HTTP/1.1)表明HTTP版本为1.1版本,状态码为200,状态消息为(ok)

第二部分:消息报头,用来说明客户端要使用的一些附加信息

第二行和第三行和第四行为消息报头,
Date:生成响应的日期和时间;Content-Type:指定了MIME类型的html(text/html),编码类型是ISO-8859-1

第三部分:空行,消息报头后面的空行是必须的
第四部分:响应正文,服务器返回给客户端的文本信息。

空行后面的html部分为响应正文。

3.1 状态码

状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:

1xx:指示信息--表示请求已接收,继续处理

2xx:成功--表示请求已被成功接收、理解、接受

3xx:重定向--要完成请求必须进行更进一步的操作

4xx:客户端错误--请求有语法错误或请求无法实现

5xx:服务器端错误--服务器未能实现合法的请求

常见状态码:

技术图片

详细状态码描述:

 

3.2 响应头

 


二、HTTPS
HTTPS协议依赖TLS/SSL。

 

三、HTTP2

 

参考:
HTTP协议
HTTP协议详解

浏览器内部工作原理

HTTP/1.1协议

 

以上是关于网络知识之二HTTP协议的主要内容,如果未能解决你的问题,请参考以下文章

网络协议系列之二:HTTP

Python爬虫入门之二HTTP/HTTPS请求与响应

TCP/IP网络编程系列之二(初级)

linux工作利器之二,网络分析工具tcpdump

Linux系统诊断必备技能之二:tcpdump抓包工具详解

AAA功能部署和测试----麒麟开源堡垒机功能篇之二