http协议

1. http协议基本信息

1.1. http是什么?

HTTP(Hyper Text Transfer Protocol): 全称超文本传输协议,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
HTTP 是一种应用层协议,是基于 TCP/IP 通信协议来传递数据的,其中HTTP1.0、HTTP1.1、HTTP2.0 均为 TCP 实现,HTTP3.0 基于 UDP 实现。

1.2. http特点

 灵活可扩展:HTTP协议最初诞生的时候就比较简单,本着开放的精神只规定了报文的基本格式,比如用空格分隔单词,用换行分隔字段,“header+body”等,报文里的各个组成部分都没有做严格的语法语义限制,可以由开发者任意定制。
 可靠传输:因为HTTP协议是基于TCP/IP的,而TCP本身是一个“可靠”的传输协议,所以HTTP自然也就继承了这个特性,能够在请求方和应答方之间“可靠”地传输数据。
 应用层协议:HTTP凭借着可携带任意头字段和实体数据的报文结构,以及连接控制、缓存代理等方便易用的特性,一出现就“技压群雄”,迅速成为了应用层里的“明星”协议。只要不太苛求性能,HTTP几乎可以传递一切东西,满足各种需求,称得上是一个“万能”的协议。
 请求-应答模式:请求-应答模式是HTTP协议最根本的通信模型,通俗来讲就是“一发一收”“有来有去”,就像是写代码时的函数调用,只要填好请求头里的字段,“调用”后就会收到答复。
 无状态:在整个协议里没有规定任何的“状态”,客户端和服务器永远是处在一种“无知”的状态。建立连接前两者互不知情,每次收发的报文也都是互相独立的,没有任何的联系。收发报文也不会对客户端或服务器产生任何影响,连接后也不会要求保存任何信息。

2. http协议版本

2.1. http0.9

HTTP协议的最初版本,功能简陋,仅支持请求方式GET,并且仅能请求访问HTML格式的资源。

2.2. http1.0

请求行必须在尾部添加协议版本字段(http/1.0);必须包含头消息
在0.9版本上做了进步,增加了请求方式POST和HEAD;不再局限于0.9版本的HTML格式,根据Content-Type可以支持多种数据格式,即MIME多用途互联网邮件扩展,例如text/html、image/jpeg等;同时也开始支持cache,就是当客户端在规定时间内访问统一网站,直接访问cache即可。
但是1.0版本的工作方式是每次TCP连接只能发送一个请求,当服务器响应后就会关闭这次连接,下一个请求需要再次建立TCP连接,就是不支持keepalive。

2.3. http1.1

1.1 版的最大变化,就是引入了持久连接(persistent connection),即TCP连接默认不关闭,可以被多个请求复用,不用声明Connection: keep-alive。解决了1.0版本的keepalive问题,1.1版本加入了持久连接,一个TCP连接可以允许多个HTTP请求;
客户端和服务器发现对方一段时间没有活动,就可以主动关闭连接。不过,规范的做法是,客户端在最后一个请求时,发送Connection: close,明确要求服务器关闭TCP连接。
目前,对于同一个域名,大多数浏览器允许同时建立6个持久连接。降低了延迟同时提高了带宽的利用率。

2.4. http2.0

为了解决1.1版本利用率不高的问题,提出了HTTP/2.0版本。增加双工模式,即不仅客户端能够同时发送多个请求,服务端也能同时处理多个请求,解决了队头堵塞的问题(HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级);
HTTP请求和响应中,状态行和请求/响应头都是些信息字段,并没有真正的数据,因此在2.0版本中将所有的信息字段建立一张表,为表中的每个字段建立索引,客户端和服务端共同使用这个表,他们之间就以索引号来表示信息字段,这样就避免了1.0旧版本的重复繁琐的字段,并以压缩的方式传输,提高利用率。
当前主流的协议版本还是HTTP/1.1版本。

3. http协议报文格式

HTTP 协议主要由三大部分组成:
 起始行(start line):描述请求或响应的基本信息;
 头部字段(header):使用 key-value 形式更详细地说明报文;
 消息正文(entity):实际传输的数据,它不一定是纯文本,可以是图片、视频等二进制数据。
//其中起始行和头部字段并称为 请求头 或者 响应头,统称为 Header;
消息正文也叫做实体,称为 body。
HTTP 协议规定每次发送的报文必须要有 Header,但是可以没有 body,也就是说头信息是必须的,实体信息可以没有。而且在 header 和 body 之间必须要有一个空行(CRLF)。
在这里插入图片描述

3.1. 请求报文 3.1.1. 起始行

http请求方法

HTTP协议中共定义了八种方法(也叫“动作”)来以不同方式操作指定的资源:HTTP1.0定义了三种请求方法:GET、POST和HEAD方法;HTTP1.1新增了五种请求方法:OPTIONS、PUT、DELETE、TRACE和CONNECT方法。

GET 获取资源,GET 方法用来请求访问已被 URI 识别的资源。指定的资源经服务器端解析后返回响应内容。也就是说,如果请求的资源是文本,那就保持原样返回;  POST 传输实体,虽然 GET 方法也可以传输主体信息,但是便于区分,我们一般不用 GET 传输实体信息,反而使用 POST 传输实体信息,
PUT 传输文件,PUT 方法用来传输文件。就像 FTP 协议的文件上传一样,要求在请求报文的主体中包含文件内容,然后保存到请求 URI 指定的位置。 //鉴于 HTTP 的 PUT 方法自身不带验证机制,任何人都可以上传文件 , 存在安全性问题,因此一般的 W eb 网站不使用该方法。若配合 W eb 应用程序的验证机制,或架构设计采用REST(REpresentational State Transfer,表征状态转移)标准的同类 Web 网站,就可能会开放使用 PUT 方法。
HEAD 获得响应首部,HEAD 方法和 GET 方法一样,只是不返回报文主体部分。用于确认 URI 的有效性及资源更新的日期时间等。
DELETE 删除文件,DELETE 方法用来删除文件,是与 PUT 相反的方法。DELETE 方法按请求 URI 删除指定的资源。
OPTIONS 询问支持的方法,OPTIONS 方法用来查询针对请求 URI 指定的资源支持的方法。 TRACE 追踪路径,TRACE 方法是让 Web 服务器端将之前的请求通信环回给客户端的方法。 CONNECT 要求用隧道协议连接代理,CONNECT 方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行 TCP 通信。主要使用 SSL(Secure Sockets Layer,安全套接层)和 TLS(Transport Layer Security,传输层安全)协议把通信内容加 密后经网络隧道传输。 HTTP1.0 和 HTTP1.1 支持的方法清单
在这里插入图片描述

URL

HTTP 协议使用 URI 定位互联网上的资源。正是因为 URI 的特定功能,在互联网上任意位置的资源都能访问到。URL 带有请求对象的标识符。在下面的例子中,浏览器正在请求对象so.csdn.net/api/v1/get_landing_word的资源。
在这里插入图片描述

http版本

表示报文使用的 HTTP 协议版本。

3.1.2. 请求头部

“Expert Info”字段表示专家信息;
“request method”字段表示请求方式,此处为POST请求;
“request uri”字段表示请求的URI;
“request version”表示请求使用的HTTP协议的版本,此处使用的为HTTP/1.1;
“host”字段表示请求的主机,此处为edrsdp.topsec.com.cn:8004;
“connection”字段为HTTP的连接类型,在HTTP/1.1版本默认使用keep-alive方式,除此之外还有close方式;
“user agent”字段表示客户端类型,即访问服务器所使用的浏览器类型;
“full request uri”字段表示所请求的完整的URI;
“cookie”字段表示当前网站的cookie值。

3.1.3. 空行

发送回车符和换行符,通知服务器以下不再有请求头

3.1.4. 实体

数据部分

3.2. 响应报文

3.2.1. 响应行

在这里插入图片描述

协议版本:表示报文使用的 HTTP 协议版本。
状态码:HTTP 响应标头的状态码有很多,并做了如下规定
以 2xx 为开头的都表示请求成功响应。
以 3xx 为开头的都表示需要进行附加操作以完成请求。
以 4xx 的响应结果表明客户端是发生错误的原因所在。
以 5xx 为开头的响应标头都表示服务器本身发生错误。
 状态码描述:描述该次响应的状态

3.2.2. 响应头部

“status code”字段表示服务器回应客户端的响应码;
“response phrase”字段表示服务端回应给客户端的响应短语;
“content type”字段表示响应的内容类型;
“content-length”字段表示http头部长度;
“accept-ranges”字段表示服务器支持的类型;
“server”字段表示服务器的类型;
“cache-control”表示缓存机制
“content encoding”字段表示实体数据的压缩格式;

3.2.3. 空行

发送回车符和换行符,通知客户端以下不再有响应头

3.2.4. 实体

数据部分

4. http协议工作原理

HTTP是基于客户/服务器模式,且面向连接的。典型的HTTP事务处理有如下的过程:
(1)客户与服务器建立连接;
(2)客户向服务器提出请求;
(3)服务器接受请求,并根据请求返回相应的文件作为应答;
(4)客户与服务器关闭连接。
客户与服务器之间的HTTP连接是一种一次性连接,它限制每次连接只处理一个请求,当服务器返回本次请求的应答后便立即关闭连接,下次请求再重新建立连接。这种一次性连接主要考虑到WWW服务器面向的是Internet中成千上万个用户,且只能提供有限个连接,故服务器不会让一个连接处于等待状态,及时地释放连接可以大大提高服务器的执行效率。
HTTP支持持久连接,在HTTP / 0.9和1.0中,连接在单个请求/响应对之后关闭。在HTTP / 1.1中,引入了保持活动机制,其中连接可以重用于多个请求。这样的持久性连接可以明显减少请求延迟,因为在发送第一个请求之后,客户端不需要重新协商TCP 3-Way-Handshake连接。另一个积极的副作用是,通常,由于TCP的缓慢启动机制,连接随着时间的推移而变得更快。

5. http协议请求方式

5.1. GET

GET请求用于使用给定的URI从给定服务器中检索信息,即从指定资源中请求数据。使用GET方法的请求只是检索数据,并且不对数据产生其他影响。
注:GET请求是可以缓存的,我们可以从浏览器历史记录中查找到GET请求,还可以把它收藏到书签中。GET提交请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以“?”分割URL和传输数据,多个参数用“&”连接;而特定浏览器和服务器对URL长度有限制,例如IE对URL长度的限制是2083字节(2K+35)。由于GET提交数据,用户名和密码将明文出现在URL上,所以在处理敏感数据时,绝不可以使用GET请求。
当客户端使用浏览器对HTTP服务器进行访问时,一般发送GET请求。虽然只是访问一个URL,但是会自动进行一些文件的请求,所以一个动作设备会产生多个GET请求的审计日志,如下图:

URL为“http://192.168.10.20/”的是浏览器所输入的URL,主动进行请求访问,其他的为自动进行请求,如一些图片等。

5.2. POST

POST请求用于将数据发送到服务器以创建或更新资源,它要求服务器确认请求中包含的内容作为由URI区分的Web资源的另一个下属。
注:POST请求永远不会被缓存,我们无法从浏览器历史记录中查找到POST请求。POST请求把提交的数据放置在是HTTP包体中。由于不是通过URL传值,理论上数据不受限。但实际各个WEB服务器会规定对POST提交数据大小进行限制,Apache、IIS6都有各自的配置。POST的安全性要比GET的安全性高。
当客户端向HTTP服务器上传文件时,此动作相当于对HTTP服务器的资源进行了更改,所以触发类似动作时,客户端会向服务器发送POST请求进行上传文件。设备会产生一条POST请求日志,当同时上传多个文件时,这条日志会同时显示此次上传的多个文件信息,而不是分多条日志进行显示,如下图:

6. http状态码

以 2xx 为开头的都表示请求成功响应。
状态码 含义
200 成功响应
204 请求处理成功,但是没有资源可以返回
206 对资源某一部分进行响应,由Content-Range 指定范围的实体内容。
以 3xx 为开头的都表示需要进行附加操作以完成请求
状态码 含义
301 永久性重定向,该状态码表示请求的资源已经重新分配 URI,以后应该使用资源现有的 URI
302 临时性重定向。该状态码表示请求的资源已被分配了新的 URI,希望用户(本次)能使用新的 URI 访问。
303 该状态码表示由于请求对应的资源存在着另一个 URI,应使用 GET 方法定向获取请求的资源。
304 该状态码表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。
307 临时重定向。该状态码与 302 Found 有着相同的含义。
以 4xx 的响应结果表明客户端是发生错误的原因所在。
状态码 含义
400 该状态码表示请求报文中存在语法错误。当错误发生时,需修改请求的内容后再次发送请求。
401 该状态码表示发送的请求需要有通过 HTTP 认证(BASIC 认证、DIGEST 认证)的认证信息。
403 该状态码表明对请求资源的访问被服务器拒绝了。
404 该状态码表明服务器上无法找到请求的资源。
以 5xx 为开头的响应标头都表示服务器本身发生错误
状态码 含义
500 该状态码表明服务器端在执行请求时发生了错误。
503 该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值