浅谈HTTP协议: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服务器处理请求出错

细分的话就很多了,我画了几张思维导图,这样看起来比较清晰:

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等,服务器通过这个方法就可以知道我们的意图,从而做出正确的判断,返回正确的数据。因为每一种方法都对应着不同的意图。

通常我们使用到的大概是以下几种:

序号方法说明
1GET请求指定的页面信息,并返回实体主体
2POST向指定资源提交数据进行处理请求,数据被包含在请求体中。比如登录,注册
3PUT更改服务器中的数据
4HEAD获得报文首部
5DELETE删除指定的数据
6OPTIONS获取服务器支持的HTTP请求方法
7TRACE追踪路径
8CONNECT要求用隧道协议连接代理

HTTP报文

说完了以上几个概念就可以介绍HTTP报文了,HTTP报文是客户端与服务器之间进行交互的信息,无论是你向服务器发送了一个请求还是服务器返回给你一条数据,都是通过报文的形式发送的,请求用的是请求报文,响应用的是响应报文。我们先来看一个例子直观的感受一下,比如我们来访问百度的主页:

百度报文截图

可以看到,无论是请求报文还是响应报文,都含有报文首部,报文主体等信息。当然,这里的请求报文没有主体,因为是GET请求。

HTTP报文结构

上面这张图就是完整的报文格式了,我们来分析一下。

请求行包含了请求的方法,请求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,哈哈😄)。如果我的文章对你有些帮助,不要忘了点赞,收藏,转发,关注。要是有什么好的意见欢迎在下方留言。让我们下期再见!

码字不易,可以的话,给我来个点赞收藏关注

如果你喜欢我的文章,欢迎关注微信公众号 R o b o d

本文已收录至我的Github仓库DayDayUPgithub.com/RobodLee/DayDayUP,欢迎Star

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值