HTTP协议详解


HTTP协议

一、核心概念

Hyper Text Transsfer Protocol 超文本传输协议,是一种应用非常广泛的 应用层协议

  • 协议是指双方,或多方,相互约定好,大家都需要遵守的规则,叫做协议
  • 是无状态的 : 每次请求之间相互独立,不能交互数据

在网络通信中,有几个概念:

  1. 服务器 VS 客户端
  2. 请求和响应

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d5kgTSv3-1639297417194)(image/image-20211212111210677.png)]

所谓HTTP协议,就是指。客户端和服务器之间通信时,发送的数据,需要遵守的规则,叫做HTTP协议,HTTP协议中的数据又叫报文,是前后端沟通的桥梁

在客户端和服务器之间的沟通存在多种模型

  1. 一发一收 : 请求和响应是一 一 对应的~(这是web 开发中最常见的一种模型,也是http协议用的模型)
  2. 多发一收 :多个请求对应一个响应,(典型应用,大文件上传的场景)
  3. 一发多收 : 一个请求,对应很多的响应 (看直播)
  4. 多发多收 :多个请求,对应到多个响应

二、HTTP协议格式

HTTP (全称为 “超文本传输协议”) 是一种应用非常广泛的 应用层协议. HTTP协议永远都是客户端发起请求,服务器回送响应。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eRK82vgn-1639297417197)(image/image-20211212110501984.png)]

当我们在浏览器中输入一个搜索地址"URL时",浏览器就给服务器发送一个 http 请求,服务器就返回一个 http 响应。

这个响应结果被浏览器解析之后,就展示成我们看到的页面内容(这个过程中浏览器可能会给服务器发送多个 HTTP 请求,服务器就会对应返回多个响应,这些响应里包含了页面HTML,CSS,JavaScript,图片字体等信息)。

我们要关心的是:

  • 请求要包含哪些信息,按照啥格式传输
  • 响应要包含哪些信息,按照啥格式传输

请求方法:

根据HTTP标准,HTTP请求可以使用多种请求方法。

  • HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
  • HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
方法说明支持的HTTP协议格式
GET获取资源,也可以通过URL传参给服务器。1.0、1.1
POST用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST方式1.0、1.1
PUT传输文件,报文主体中包含文件内容,保存到对应URL位置1.0、1.1
HEAD获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URL是否有效。1.0、1.1
DELETE删除文件,与PUT方法相反,删除对应URL位置的文件1.0、1.1
OPTIONS查询相应URL支持的HTTP方法1.1
TRACE追踪路径1.1
CONNECT要求用隧道协议连接代理1.1
LINK建立和资源之间的联系1.0
UNLINK断开连接1.0

URL : (Uniform Resource Locator 统一资源定位符),就是我们俗称的 “网址”,互联网尚的每个文件都有一个唯一的 URL , 它包含的信息指出文件的位置以及浏览器怎么出处理它。

HTTP请求不光是一个文本,还是一个“行文本” , 一行一行的组织数据,每一行都有特定的含义

2.1、HTTP请求:(Request)
GET请求格式:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RyUAMELo-1639297417198)(image/image-20211212145411157.png)]


POST请求格式:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9TvhgIYI-1639297417199)(image/image-20211212145504107.png)]

2.2、HTTP响应:(Response)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4v7YkDZu-1639297417200)(image/image-20211212150804093.png)]


2.3、协议格式小结

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NpOLct1V-1639297417201)(image/image-20211212152457483.png)]


请求格式:

  • 请求行 : 方法 URL 版本号
  • 请求头 : 包含多个键值对,每个键值对占一行,键和值之间使用 冒号空格分割
  • 空行 : 作为请求的结束标记
  • 请求正文 : 有的请求有正文,有的请求没有正文

响应格式:

  • 响应行 : 版本号 响应状态码 状态码描述符
  • 响应头 : 包含多个键值对,每个键值对占一行,键和值之间使用 冒号空格分割
  • 空行 : 作为响应头的结束标记
  • 响应正文 : 有的响应有响应正文,有的没有。一种常见的响应正文格式是 HTML

HTTP报文中为什么要存在“空行”?

  • 因为 HTTP 协议中并没有规定报头部分的键值对有多少个,空行就相当于是 “报头的结束标记”,或者“报头和正文之间的分隔符” , 如果没有这个空行,就会出现粘包问题。

HTTP协议中 GET 和 POST两个方法有什么区别?

首先两个方法本质上没有任何区别

GET请求的特点:

  • 首行第一部分为 GET
  • URL的query String 部分可以为空也可以不为空
  • header部分有若干个键值对
  • doby部分为空看那个

POST请求的特点:

  • 首行的一个部分为 POST
  • URL的query String 一般为空,也可以不为空
  • header 部分有若干个键值对
  • body部分一般不为空,body内的数据格式通过header 中 content-Type指定,body的长度一般由header 中的 content-Length指定

GET方法:初心是从服务器中获取数据,通常情况下,GET请求的请求体为空,但是也可以自己构造一个请求体,请求体是可以不为空的,为空只是一种习惯上的用法

POST :初心是往服务器中提交数据,常见使用 POST请求的情况就是 登录,如果使用 GET完成登录也是可以的,

但是实际上,现在 GET 和 POST 都即可以用来获取,也可以用来提交。

区别在于:

  1. 数据位置:GET请求的数据在 URL之后,POST请求的数据一般在请求体中
  2. 语义区别 : GET 一般用于获取数据,POST 一般用于提交数据
  3. 幂等性 : GET请求一般会设计成幂等的,POST一般不要求设计成幂等的
  4. 可缓存 : GET请求一般会被缓存, POST 请求一般不能被缓存

触发 GET请求的情况

  1. 直接在浏览器中输入 HTTP URL
  2. HTML 中的 link , img , a ,script 标签等,这些标签也能触发 HTTP GET 请求
  3. form 表单
  4. ajax请求
  5. 使用 java代码
  6. 使用 postman这类工具

触发 POST请求的方式也有很多

  1. form 标签
  2. ajax请求
  3. 第三方工具
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值