HTTP协议详解

本文详细介绍了HTTP协议的基本概念、请求与响应格式,重点解析了GET和POST两种请求方法的区别。GET主要用于获取资源,而POST常用于提交数据。两者在数据位置、语义和特性上有所差异,GET请求数据在URL后,POST则在请求体中。此外,GET请求通常是幂等的,而POST可能不是。HTTP协议中空行的作用在于区分报头和正文,防止数据粘包。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


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. 第三方工具
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值