这是我参与「掘金日新计划 · 4 月更文挑战」的第7天,点击查看活动详情。
大家好,我叫小杜杜,工作中我们需要通过接口与后端交互,通常而言我们通过get
或post
来与之交互,而这种协议被称为 HTTP协议(超文本传输协议),为了更好的理解,所以今天就让我们来具体看看,还请大家多多支持~
HTTP协议是什么?
HTTP:Hyper Text Transfer Protocol,中文为超文本传输协议,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器
的传送协议。并且HTTP
基于TCP/IP
通信协议来传递数据。
HTTP基于客户端/服务端(C/S架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议
HTTP协议的特点
-
无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。可以节省时间
-
媒体独立的:只要客户端和服务器知道如何处理的数据内容,
任何类型的数据
都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。 -
无状态:无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样的好处是:可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
HTTP 响应报文
响应报文分为三个部分:请求行
、请求头
、请求体
先来看看请求报文:
我们可以从上图看到对应的信息
请求行
- 是请求方法,GET和POST是最常见的HTTP方法,除此以外还包括DELETE、HEAD、OPTIONS、PUT、TRACE。
- 为请求对应的URL地址,它和报文头的Host属性组成完整的请求URL。
- 是协议名称及版本号。
请求头:
- 是HTTP的报文头,报文头包含若干个属性,格式为属性名:属性,服务端据此获取客户端的信息。
- 与缓存相关的规则信息,均包含在header中
请求体:
- 是报文体,它将一个页面表单中的组件值通过param1=value1¶m2=value2的键值对形式编码成一个格式化串,它承载多个请求参数的数据。
- 不但报文体可以传递请求参数,请求URL也可以通过类似于“/chapter15/user.html? param1=value1¶m2=value2”的方式传递请求参数。
GET 与 POST 的区别
在介绍区别前我们需要知道两个概念:
-
副作用:副作用是指对服务器上的资源做改变,注意:搜索是无副作用的,注册是副作用的
-
幂等:幂等指发送 M 和 N 次请求(两者不相同且都大于 1),服务器上资源的状态一致,比如注册 10 个和 11 个帐号是不幂等的,对文章进行更改 10 次和 11 次是幂等的。(因为前者是多了一个账号(资源),后者只是更新同一个资源。)
Get
与Post
的区别:
在规范的应用场景上
- Get 多用于无副作用,幂等的场景,如搜索关键字。
- Post 多用于副作用,不幂等的场景,如注册。
在技术上说:
- Get 请求
能缓存
,Post 不能 - Post 相对 Get 安全一点点,因为Get 请求都包含在 URL 里(当然写到 body 里也是可以的),且会
被浏览器保存历史纪录
。Post 不会,但是在抓包的情况下都是一样的。 - URL有长度限制,会影响 Get 请求,但是这个长度限制是浏览器规定的,不是 RFC 规定的
- Post 支持更多的编码类型且不对数据类型限制
- GET回退无害,POST会再次提交
- GET参数通过URL传递POST放在Request Body中
- GET产生URL地址收藏,POST不会
End
致此,有关HTTP协议的相关内容就已经说完了,希望能够帮助到你~喜欢的点个赞👍🏻支持下吧(● ̄(エ) ̄●)