好好学习,每天向上html
本文已收录至个人Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star,更多文章请前往:目录导航git
咱们天天都在网上冲浪🚢,不少人都知道上网的用的最多的就是HTTP协议,可是你知道什么是HTTP协议吗?HTTP报文长什么样子?这篇文章就让咱们来好好聊一聊什么是HTTP协议。github
HTTP协议全称为Hyper Text Transfer Protocol(超文本传输协议)
,是用于客户端和服务器之间的通讯的一种协议,它规定了传输信息的格式。了解计算机网络的小伙伴都应该知道,TCP/IP网络模型分为四层,自上而下分别是:应用层,传输层,网络层以及网络接口层。而HTTP协议就是处于最上面的应用层协议。何时咱们会用到HTTP协议的呢,当咱们在浏览器中输入一个地址时,或者点击页面上的某个连接的时候,HTTP协议就开始工做了。它会帮你添加请求方法,协议类型、版本,首部字段等一系列信息构成一个完整的请求报文发送给服务器,服务器一样也会返回一个遵循HTTP协议规则的响应报文给你,而后浏览器对响应报文进行解析,给你呈现出一个精美的界面。虽然你只是作了一个很简单的操做,可是HTTP协议在背后帮助你作了不少工做,从而保障了你与服务器之间可以顺利地通讯。web
HTTP协议的一个特色就是它是无状态协议。无状态的意思就是不保存状态,就是HTTP自身不对请求和响应之间的通讯状态进行保存。当客户端向服务器发送一次请求以后,再次请求的时候服务器已经不记得上次客户端请求了什么。json
可是有的时候要须要保存状态,好比逛淘宝的时候。那么HTTP怎么实现保持状态功能呢,这就用到了Cookie技术,客户端和服务端经过在HTTP报文中添加一个Cookie字段来获取以前的状态信息。就像下图所示:浏览器
什么是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 | 服务器正忙着呢,没空搭理你 |
当咱们向服务器发送请求报文的时候,会在请求行中添加一个方法,好比GET,POST等,服务器经过这个方法就能够知道咱们的意图,从而作出正确的判断,返回正确的数据。由于每一种方法都对应着不一样的意图。
一般咱们使用到的大概是如下几种:
序号 | 方法 | 说明 |
---|---|---|
1 | GET | 请求指定的页面信息,并返回实体主体 |
2 | POST | 向指定资源提交数据进行处理请求,数据被包含在请求体中。好比登陆,注册 |
3 | PUT | 更改服务器中的数据 |
4 | HEAD | 得到报文首部 |
5 | DELETE | 删除指定的数据 |
6 | OPTIONS | 获取服务器支持的HTTP请求方法 |
7 | TRACE | 追踪路径 |
8 | CONNECT | 要求用隧道协议链接代理 |
说完了以上几个概念就能够介绍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,哈哈😄)。文中可能有讲的不恰当的地方,欢迎留言交流。