网络协议之HTTP协议
- 编辑时间: 2021-04-20 20:33:40
- 浏览量:
- 作者:
最近刚好在整理HTTP协议相关的学习笔记,想跟大家一起分享一下。可能很多朋友对于HTTP协议的知识还是一知半解,接下来我们一起看看在HTTP协议中,我们一般关注哪些知识点以及学习它能给我们带来什么好处。以下为本文文章的目录
1、介绍HTTP协议
2、常用的HTTP Code码及含义
3、HTTP Cookie的作用
4、页面性能加载优化-HTTP缓存
一、介绍HTTP协议
在MDN文档中,是这样来描述HTTP协议的。
超文本传输 协议(HTTP)是一个用于传输超媒体文档(例如 HTML)的应用层协议。它是为 Web 浏览器与 Web 服务器之间的通信而设计的。HTTP 遵循经典的客户端-服务端模型,客户端打开一个连接以发出请求,然后等待直到收到服务器端响应。HTTP 是无状态协议,这意味着服务器不会在两个请求之间保留任何数据(状态)。
(ISO 四层网络模型图)
看了上述的描述,可能有些同学还是会一脸懵逼。给大家举一个例子
大家从百度搜索段亮博客,然后点击我的博客,百度就跳转到我网站,给大家展示我们网站的内容。这个传输过程就是HTTP协议(可能这里有点歧义,还有不懂的同学,暂时可以这样理解吧)
那么从百度搜索关键词,到点击对应关键词网站展示,这个过程浏览器发生了什么的呢?其实这个原理和从浏览器输入URL到加载页面的原理也是类似的。整体流程图如下:
从输入url到页面完成示例图
1、搜索 段亮博客
2、点击www.duanliang920.com这个域名跳转
3、浏览器开始对域名检查,组装协议,构成完整的url。
4、然后浏览器通过进程间的通信(IPC),把url请求发送给网络进程。
5、网络进程接收到url请求后,检查本地是否缓存了该资源,如有则直接返回,没有则进行正常的网络请求。
6、在开始请求时,会对域名进行DNS解析,拿到服务器的IP地址。(先检查有无dns缓存(浏览器->本机->路由器->服务提供商),有则返回,没有就会往上级一层层(主机->顶级->根DNS服务器)寻找,直到找到为止)
7、获取到IP地址后,与服务器开始连接,进行TCP三次握手。三次握手成功后,开始传输响应数据。
(tcp三次握手示意图)
8、在接收到服务器响应后,网络进程接收响应并解析。首先检查状态码,如果返回是的301/302状态码则进行重定向跳转。如果返回200状态码则继续处理该请求。
9、浏览器根据返回的Conent-type类型进行对应的处理/渲染HTML内容。
二、常用的HTTP Code码及含义
1、200 OK
表示客服端发来的请求在服务器端正常处理了
2、204 Not Content
表示服务器接收的请求已成功处理,但返回响应报文是,不包含主体内容。(一般用于上报请求之类的)
3、206 Partial Content
表示客户端进行了范围请求,而服务端成功的执行了。响应报文中包含有Content-Range指定范围的实体内容
(一般是用于文件、视频断点续传上传之类的,服务端头部返回Accept-Ranges: bytes 表示支持范围请求)
比如: Content-Range: bytes 100-999/1000 会传递 100 ~ 999 范围的内容实体,而该资源文件的总大小是 1000 bytes。
4、301和302
301表示永久重定向,302临时重定向(请求资源分配到新的URI,在SEO角度上来讲,301的集权会比302好)
5、304 Not Modified
这个状态吗表示HTTP缓存,后续会着重讲解
6、400 Bad Request
表示客户端请求语法出错
7、401 Unauthorized
表示该请求需要通过HTTP认证(BASIC认证信息),浏览器初次就收到会弹出认证用的对话框。
8、 403 Forbidden
表示服务端拒绝了该请求,一般来说是没有权限访问
9、 404 Not Found
表示请求资源没有找到
10、 500 Internal Server Error
表示服务器在处理该请求时发生了错误,应该是代码层面bug出错导致/未对异常进行捕获。
11、 502 Bad Gateway
表示作为网关或代理角色的服务器,从上游服务器(如tomcat、php-fpm)中接收到的响应是无效的。
三、HTTP Cookie的作用
前面我们讲过HTTP 是无状态协议,不会在两个请求之间保留任何数据(状态)。比如用户登录了我们的网站,总不可能每次刷新页面,就需要用户重新登录一次吧(可明明刚刚登录过)。因此是需要一个记录状态机制的东西,是随着HTTP传输携带的,这就是Cookie 在HTTP中的作用。
下面是Cookie中常用的属性:
expires属性
申明Cookie的有效期
path 属性
cookie 所在文件目录
domain属性
作用那个域名下
secure 属性
只在HTTPS下发送Cookie
httpOnly 属性
防止XSS攻击,不允许web客户端读取
四、页面性能加载优化-HTTP缓存
当我们聊到页面缓存,一般分为两种情况。
1、客户端缓存( 200 from disk cache / 200 from memory cache)
在HTTP1.1中一般由有服务端返回header头中的Cache-control 字段来控制资源缓存时间的。
比如:以我博客中的图片加载为例:图片第一次加载设置了缓存,并且缓存了3153600s,当第二次刷新页面时。此时返回的HTTP 状态码显示 200(from memory cache),表示命中本地缓存
2、http缓存 304 (协商缓存)
想对于本地缓存,http缓存是有客户端跟服务端交互后,确认的缓存。如下图所示:
(HTTP 缓存示例图)
浏览器去向服务器请求该资源,会先判断本地缓存时间是否失效(比如:Cache-control ),如果失效,则发送请求,服务端接收到请求后。
1、检查服务端是否存在Etag,如果存在,对比客户端header头中的If-None-Math字段,如果一致,则返回304缓存。
2、如果不存在Etag,这检查是否返回了Last-Modified,如果存在,服务端则会检查If-Modified-Since来判断最后修改时间,如果小于本地时间,则返回304缓存。
在了解到HTTP缓存原理后,对于我们后面优化网页加载速度就有了很好的用处。比如在APP内嵌H5页面业务中,当用户打开webview页面,我们可以让客户端提前加载好我们页面所需要的静态资源,当用户点击跳转时,则会命中缓存,大大提高了网页加载和渲染的速度。
写在最后:以上几个知识点,是我认为会跟我们经常打交道的。只有知道它的原理是什么,我们才能更好的在合适的地方使用它。
本文出自:段亮个人博客。如需转载请注明出处!
写文章不易,如果您觉得文章对你有帮助。
打赏激励下作者吧,谢谢支持! ~(@^_^@)~!
微信打赏
支付宝打赏