浅谈HTTP协议
好好学习,天天向上
本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star,更多文章请前往:目录导航
我们每天都在网上冲浪🚢,很多人都知道上网的用的最多的就是HTTP协议,但是你知道什么是HTTP协议吗?HTTP报文长什么样子?这篇文章就让我们来好好聊一聊什么是HTTP协议。
HTTP简介
HTTP协议全称为Hyper Text Transfer Protocol(超文本传输协议)
,是用于客户端和服务器之间的通信的一种协议,它规定了传输信息的格式。了解计算机网络的小伙伴都应该知道,TCP/IP网络模型分为四层,自上而下分别是:应用层,传输层,网络层以及网络接口层。而HTTP协议就是处于最上面的应用层协议。什么时候我们会用到HTTP协议的呢,当我们在浏览器中输入一个地址时,或者点击页面上的某个链接的时候,HTTP协议就开始工作了。它会帮你添加请求方法,协议类型、版本,首部字段等一系列信息构成一个完整的请求报文发送给服务器,服务器同样也会返回一个遵循HTTP协议规则的响应报文给你,然后浏览器对响应报文进行解析,给你呈现出一个精美的界面。虽然你只是做了一个很简单的操作,但是HTTP协议在背后帮助你做了很多工作,从而保障了你与服务器之间能够顺利地通信。
HTTP的几个概念
一、HTTP是无状态协议
HTTP协议的一个特点就是它是无状态协议。无状态的意思就是不保存状态,就是HTTP自身不对请求和响应之间的通信状态进行保存。当客户端向服务器发送一次请求之后,再次请求的时候服务器已经不记得上次客户端请求了什么。
但是有的时候要需要保存状态,比如逛淘宝的时候。那么HTTP怎么实现保持状态功能呢,这就用到了Cookie技术,客户端和服务端通过在HTTP报文中添加一个Cookie字段来获取之前的状态信息。就像下图所示:
二、 HTTP的状态码
什么是HTTP状态码呢?当我们访问服务器时,服务器返回给我们的信息中会有一个数字,叫做状态码,状态码是用来描述服务器返回给浏览器的请求结果。一般分为5类:
分类 | 描述 |
---|---|
1XX | 接收的请求正在处理 |
2XX | 请求正常处理完毕 |
3XX | 需要进行附加操作以完成请求 |
4XX | 服务器无法处理请求 |
5XX | 服务器处理请求出错 |
细分的话就很多了,我画了几张思维导图,这样看起来比较清晰:
如果想要思维导图原件的话,可以点击下载
我已经列举了一大堆了,其实还不止这些,但是我们平常用的其实不多,我在这里列举了这么多是希望你对HTTP状态码有个更全面的认识。其实常用的也就十几个:
状态码 | 描述 |
---|---|
200 OK | 表示从客户端发来的请求在服务器端被正常处理了 |
204 No Content | 正常处理,但响应报文中没有主体部分 |
206 Partial Content | 客户端进行了范围请求,服务器只返回请求范围中的内容 |
301 Moved Permanently | 永久性重定向,表示请求的资源已被分配了新的URL |
302 Found | 临时性重定向,表示请求的资源临时分配了新的URL,规定了禁止从POST变为GET |
303 See Other | 功能和302相同,但是应使用GET请求 |
304 Not Modified | 服务端资源未改变,可直接使用客户端未过期的缓存 |
307 Temporary Redirect | 和302类似,但不会从POST变为GET |
400 Bad Request | 错误的请求,请求报文中存在语法错误 |
401 Unauthorized | 表示发送的请求需要有通过HTTP认证的认证信息 |
403 Forbidden | 服务器拒绝了浏览器的请求 |
404 Not Found | 不用我说了吧,大家都应该感受过了 |
500 Internal Server Error | 服务器在执行请求时发生了错误 |
503 Service Unavailable | 服务器正忙着呢,没空搭理你 |
三、 HTTP方法
当我们向服务器发送请求报文的时候,会在请求行中添加一个方法,比如GET,POST等,服务器通过这个方法就可以知道我们的意图,从而做出正确的判断,返回正确的数据。因为每一种方法都对应着不同的意图。
通常我们使用到的大概是以下几种:
序号 | 方法 | 说明 |
---|---|---|
1 | GET | 请求指定的页面信息,并返回实体主体 |
2 | POST | 向指定资源提交数据进行处理请求,数据被包含在请求体中。比如登录,注册 |
3 | PUT | 更改服务器中的数据 |
4 | HEAD | 获得报文首部 |
5 | DELETE | 删除指定的数据 |
6 | OPTIONS | 获取服务器支持的HTTP请求方法 |
7 | TRACE | 追踪路径 |
8 | CONNECT | 要求用隧道协议连接代理 |
HTTP报文
说完了以上几个概念就可以介绍HTTP报文了,HTTP报文是客户端与服务器之间进行交互的信息,无论是你向服务器发送了一个请求还是服务器返回给你一条数据,都是通过报文的形式发送的,请求用的是请求报文,响应用的是响应报文。我们先来看一个例子直观的感受一下,比如我们来访问百度的主页:
可以看到,无论是请求报文还是响应报文,都含有报文首部,报文主体等信息。当然,这里的请求报文没有主体,因为是GET请求。
上面这张图就是完整的报文格式了,我们来分析一下。
请求行包含了请求的方法,请求URI和HTTP版本,例如 GET /index.html HTTP/1.1
,请求URI不一定会有,比如上面的百度主页就没有,但是你用百度搜索内容就会有,我在这里就不截图了。
状态行包含了HTTP版本,状态码和原因短语,比如 HTTP/1.1 200 OK
。
空行就是一个空行,什么也没有,只是用于隔开首部和主体的。
报文主体没什么好说的,就是服务器给你的,或者你给服务器的真实数据,像什么html或者json之类的。
这里重点要说的就是首部字段,首部字段起到了传递额外重要信息的作用。是由首部字段名和字段值构成的,中间用冒号隔开,就像这样:
Connection:keep-alive
根据实际用途分为了4种类型:
-
通用首部字段
请求报文和响应报文都会使用的首部。 -
请求首部字段
从客户端向服务器发送请求报文时使用的首部。
-
响应首部字段
从服务器端向客户端返回响应报文时使用的首部。
-
实体首部字段
针对请求报文和响应报文的实体部分使用的首部。
关于HTTP首部的内容非常多,我就不细讲了,上面的4张图我是从《图解HTTP》上面找的,感兴趣的朋友可以看看这本书,比我讲的要详细多了,内容也更全面。
最后
文章写到这里就基本上把HTTP协议讲完了。和HTTP相关的还有HTTPS,它是通过添加一层SSL(Secure Sockets Layer 安全套接字协议),使得HTTP能够安全地传输,因为HTTP是明文传输,不安全,这里就不展开讲了(因为我也没太搞明白HTTPS,哈哈😄)。如果我的文章对你有些帮助,不要忘了点赞,收藏,转发,关注。要是有什么好的意见欢迎在下方留言。让我们下期再见!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)