浅谈HTTP协议

好好学习,每天向上html

本文已收录至个人Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star,更多文章请前往:目录导航git

咱们天天都在网上冲浪🚢,不少人都知道上网的用的最多的就是HTTP协议,可是你知道什么是HTTP协议吗?HTTP报文长什么样子?这篇文章就让咱们来好好聊一聊什么是HTTP协议。github

HTTP简介

HTTP协议全称为Hyper Text Transfer Protocol(超文本传输协议),是用于客户端和服务器之间的通讯的一种协议,它规定了传输信息的格式。了解计算机网络的小伙伴都应该知道,TCP/IP网络模型分为四层,自上而下分别是:应用层,传输层,网络层以及网络接口层。而HTTP协议就是处于最上面的应用层协议。何时咱们会用到HTTP协议的呢,当咱们在浏览器中输入一个地址时,或者点击页面上的某个连接的时候,HTTP协议就开始工做了。它会帮你添加请求方法,协议类型、版本,首部字段等一系列信息构成一个完整的请求报文发送给服务器,服务器一样也会返回一个遵循HTTP协议规则的响应报文给你,而后浏览器对响应报文进行解析,给你呈现出一个精美的界面。虽然你只是作了一个很简单的操做,可是HTTP协议在背后帮助你作了不少工做,从而保障了你与服务器之间可以顺利地通讯。web

HTTP的几个概念

1、HTTP是无状态协议

HTTP协议的一个特色就是它是无状态协议。无状态的意思就是不保存状态,就是HTTP自身不对请求和响应之间的通讯状态进行保存。当客户端向服务器发送一次请求以后,再次请求的时候服务器已经不记得上次客户端请求了什么。json

可是有的时候要须要保存状态,好比逛淘宝的时候。那么HTTP怎么实现保持状态功能呢,这就用到了Cookie技术,客户端和服务端经过在HTTP报文中添加一个Cookie字段来获取以前的状态信息。就像下图所示:浏览器

2、 HTTP的状态码

什么是HTTP状态码呢?当咱们访问服务器时,服务器返回给咱们的信息中会有一个数字,叫作状态码,状态码是用来描述服务器返回给浏览器的请求结果。通常分为5类:缓存

分类 描述
1XX 接收的请求正在处理
2XX 请求正常处理完毕
3XX 须要进行附加操做以完成请求
4XX 服务器没法处理请求
5XX 服务器处理请求出错

细分的话就不少了,我画了几张思惟导图,这样看起来比较清晰:安全

1XX
1XX
2XX
2XX
3XX
3XX
4XX
4XX
5XX
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 服务器正忙着呢,没空搭理你

3、 HTTP方法

当咱们向服务器发送请求报文的时候,会在请求行中添加一个方法,好比GET,POST等,服务器经过这个方法就能够知道咱们的意图,从而作出正确的判断,返回正确的数据。由于每一种方法都对应着不一样的意图。

一般咱们使用到的大概是如下几种:

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

HTTP报文

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

百度报文截图
百度报文截图

能够看到,不管是请求报文仍是响应报文,都含有报文首部,报文主体等信息。固然,这里的请求报文没有主体,由于是GET请求。

HTTP报文结构
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,哈哈😄)。文中可能有讲的不恰当的地方,欢迎留言交流。

微信公众号
微信公众号
相关文章
相关标签/搜索