网络协议之HTTP协议

  • 编辑时间: 2021-04-20 20:33:40
  • 浏览量: loading...
  • 作者: 段亮

最近刚好在整理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页面,我们可以让客户端提前加载好我们页面所需要的静态资源,当用户点击跳转时,则会命中缓存,大大提高了网页加载和渲染的速度。

写在最后:以上几个知识点,是我认为会跟我们经常打交道的。只有知道它的原理是什么,我们才能更好的在合适的地方使用它。

本文出自:段亮个人博客。如需转载请注明出处!

本文出处:https://www.duanliang920.com/learn/8654.html

写文章不易,如果您觉得文章对你有帮助。
打赏激励下作者吧,谢谢支持! ~(@^_^@)~!

微信打赏 微信打赏

支付宝打赏 支付宝打赏

表情
0 条评论 最热评论 最新评论
  • 亲,暂时没有评论哦!赶紧来留下你的脚印吧!

你也想建立一个独立博客?

你是否也想打造一个在互联网上的个人品牌,成为一个家喻户晓的人物呢?
请点击了解 怎样创建个人博客

最新推荐
loading... 数据加载中...

超低服务器价格,值得购买!