什么是 MIP ACCESS

MIP ACCESS 由百度 MIP 团队开发的一种页面访问权限控制机制,能够允许网页发布者在页面元素中定义内容标记,并结合用户访问情况进行综合评价,从而展现或隐藏页面中内容,直至用户登录、订阅或付费后才能够查看隐藏内容的一种全新阅读模式。

优势在哪里?

  • 方式新颖:页面中任何元素都能加入权限控制标记,并根据标记解析情况进行展示或隐藏,打破了传统阅读只展示前 n 字的模式。
  • 形式多样:页面内容可以是任何元素,包括纯文本、图片、视频等。
  • 数据驱动:内容展现与否直接与发布者配置的数据相关联,根据解析情况决定是否展示相应元素。
  • 配置灵活:发布者可以根据不同的需求配置不同接口,如数据请求接口、访问记录接口、登录页面、登出页面等。

DEMO 演示

在说具体实现和细节之前,我们从完整 DEMO 里截取了四个片段,和大家一起认识 ACCESS 到底是一个怎样的存在!

  • DEMO1 演示了 ACCESS 的基本功能,该案例提供了 1 篇首次点击免费文章和 3 篇免费文章,首次点击免费是指在第一次访问该域名下具有 ACCESS 功能的页面时免费查看的功能;如果访问文章数目超过 4 篇时,页面中部分内容将会隐藏,登录后方可查看全部。

  • DEMO2 演示的是登录功能,案例制定的策略是登录后所有文章均免费查看。

  • DEMO3 演示了 ACCESS 登出功能,登出后恢复到原状态,不可访问的文章依然无法访问,需登陆后方可获得权限。

  • DEMO4 演示了重置数据的功能,重置会删除后端记录的数据,页面刷新后恢复到第一次访问的状态。

名词解释

在讲具体细节之前,大家先熟悉熟悉这些专有名词吧!

  • Access Runtime: MIP Access Javascript 运行环境。
  • Access Content Markup: html 中以属性形式定义的,规定访问权限的标示。
  • Authorization endpoint: 授权接口,返回 markup 解析所需要的数据。
  • Pingback endpoint: 计量接口,存储访问相关信息。

使用方式

  • 开发者实现接口:所有接口的请求都依据 cors 方案,包括 Authorization 接口 (返回解析 DOM 元素展示与否的数据)、Pingback 接口,登陆登出接口。

  • 引入 mip 脚本。

    <script type="text/javascript" src="https://c.mipcdn.com/static/v1/mip.js"></script>
    <script type="text/javascript" src="https://c.mipcdn.com/static/v1/mip-access/mip-access.js"></script>
  • 定义 script 配置标签,并配置以下信息。

    <script id="mip-access" type="application/json">
    {
    "authorization": "https://publisher.com/mip-access/api/mip-authorization.json?rid=READER_ID&url=CANONICAL_URL",
    "pingback": "https://publisher.com/mip-access/api/mip-pingback?rid=READER_ID",
    "login": "https://publisher.com/mip-access/login/?rid=READER_ID&url=CANONICAL_URL",
    "authorizationFallbackResponse": {
    "error": true,
    "access": false
    }
    }
    </script>
    • authorization:授权接口,返回 MIP Access 表达式中需要进行计算的数据。

    • pingback:计量接口,每次访问页面之后,通过该 url 发送请求到开发者服务器,由其对数据进行管理,如每访问一次计数减 1。

    • noPingback:是否允许计量。

    • login:登陆相关接口,可以是一个 map,如下:

      "login": {
      "login": "https://publisher.com/login.html?rid={READER_ID}",
      "logout": "https://publisher.com/logout.html?rid={READER_ID}"
      }
    • authorizationFallbackResponse:如果 Authorization 接口请求失败,需要在这里配置相关接口参数作为后备。

      "authorizationFallbackResponse": {
      "error": true,
      "access": false
      }
    • authorizationTimeout:Authorization 接口请求超时时间,默认为 3s。

  • 以 mip-access 属性来书写表达式。

    <div mip-access="access AND subscriber">…</div>

实现细节



上图为纯前端方式实现 Access 的时序图,下面就以这个引子来说一下 ACCESS 的工作流程吧!

  • 用户在访问页面时,第一时间从服务器下载到 html 文档并展示在浏览器上,而不是先通过 ACCESS 机制处理后再进行展示,这样做的目的为了让用户能够第一时间看到页面,缩短页面展现的白屏时间。
  • 在页面加载完成之后(DOM Ready 阶段),MIP Access 运行环境自动执行,并将页面中以 mip-access-hide 属性标记的所有 DOM 元素筛选出来并隐藏,同时根据开发者提供的 Authorization 接口发起请求(该请求地址由开发者在页面指定的 script 中进行配置),接口的主要作用是拿到解析 mip-access 表达式的数据。
  • Authorization 接口如果请求成功,筛选出页面中使用 mip-access 属性定义的元素,并根据 mip-access 中的表达式进行解析,解析结果为布尔值,如果结果为 true 则展示元素,否则隐藏;如果请求失败,MIP 运行环境会寻找配置信息中的 authorizationFallbackResponse 字段,其值为一个 JSON 字符串,将该字符串进行 JSON 解析后作为解析 mip- access 表达式的数据;如果 authorizationFallbackResponse 未定义则解析失败。
  • 最后一步是待页面加载完成后发起 Pingback 请求(该请求地址同样是由开发者在页面指定的 script 中进行配置),这一步的主要目的是记录页面访问信息到开发者后端数据库,并通过访问信息决定下一个页面的展示策略。如果开发者配置了 noPingback: true 的选项,则不会发起 Pingback 请求;否则发起请求并将数据传递给开发者服务器进行保存,待下次访问文章时根据存储的状态返回相应的数据以决定页面展示策略。

适用范围

目前来说,纯前端的 ACCESS 实现方案适用与一些不涉及用户信息和收费业务相关的简单页面,通过该方式可以自由化的配置页面中元素的展现方式;出于安全考虑和后续的需要,我们后续也会根据需求量来以前端 + server 的处理方式处理 html 文档;

写在最后

查看 mip-access 组件的 demo 请 点击这里

有任何问题可以到 github issues 提问。

文章作者:Jackson

转发自:itoss.me

MIP ACCESS细节剖析的更多相关文章

  1. vue2.0细节剖析

    1.样式切换 单个切换样式 /*html部分*/ <div class="bg" v-bind:class="{active:isActive}"> ...

  2. MIP 问题解决方案大全(2018-06更新)

    在 MIP 推出后,我们收到了一些站长的疑问.现将常见问题整理出来,帮助大家了解 MIP 的知识. 一.MIP 认知类问题 二.改造前准备 三.前端改造,组件使用 四.提交生效 五.MIPCache ...

  3. HBase Coprocessor 剖析与编程实践(转载http://www.cnblogs.com/ventlam/archive/2012/10/30/2747024.html)

    HBase Coprocessor 剖析与编程实践 1.起因(Why HBase  Coprocessor) HBase作为列族数据库最经常被人诟病的特性包括:无法轻易建立“二级索引”,难以执行求和. ...

  4. 【转】O'Reilly Java系列书籍建议阅读顺序(转自蔡学庸)

    Learning Java the O'Reilly's Way (Part I) Java 技术可以说是越来越重要了,不但可以用在计算机上,甚至连电视等家电用品,行动电话.个人数字助理(PDA)等电 ...

  5. MyBatis(国税)

    一.MyBatis概要 1.1.ORM介绍 对象关系映射(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),用于实现面向对象编程语言里不同类型系统 ...

  6. 一次SocketException:Connection reset 异常排查

    问题描述 上一期的需求上线之后,线上多了一个异常:Connection reset.如下: [2017-03-22 00:45:00 ERROR] [creativeAuditTaskSchedule ...

  7. spring整合mybatis步骤分析

    1.spring配置datasource bean的时候,不同的数据库连接方式有有不同的datasource实现类. 比如采用c3p0数据库连接池,要用c3p0的datasource实现类 com.m ...

  8. 内存池-转载自IBM

    [转载自IBM]讲的很好~推荐看看 6.1 自定义内存池性能优化的原理 如前所述,读者已经了解到"堆"和"栈"的区别.而在编程实践中,不可避免地要大量用到堆上的 ...

  9. Hbase总结(八)Hbase中的Coprocessor

    1.起因(Why HBase  Coprocessor) HBase作为列族数据库最常常被人诟病的特性包含:无法轻易建立"二级索引",难以运行求和.计数.排序等操作.比方,在旧版本 ...

随机推荐

  1. C++的拷贝构造函数、operator=运算符重载,深拷贝和浅拷贝、explicit关键字

    原文地址:https://blog.csdn.net/shine_journey/article/details/53081523 1.在C++编码过程中,类的创建十分频繁. 简单的功能,当然不用考虑 ...

  2. Visual Studio Live Share不完全指北

    Visual Studio Live Share是什么? 是VS的一个实时协作开发的扩展工具. github地址:https://github.com/MicrosoftD...文档地址:https: ...

  3. JSF-页面导航

    页面导航 1)导航处理涉及的术语: -动作值:触发动作事件的组件的action:EL方法表达式.字符串文字. -结果值:动作组件的action属性的:EL方法表达式的返回值.字符串文字:或结果组件的o ...

  4. CSS学习笔记3:选择器及优先级

    CSS选择器的类型: 标签选择器 类选择器 ID选择器 全局选择器 群组选择器 后代选择器   1.标签选择器:     以HTML的标签作为选择器,凡是选择了一个标签,那么所有这个标签的内容都是用了 ...

  5. HTML知识点总结

    HTML知识点总结 一.需要熟悉的基本快捷键 ctrl+c            复制 ctrl+v            粘贴 ctrl+x            剪切 ctrl+tab       ...

  6. Gradle连接Maven仓库直接从仓库 更新JAR包

    一般情况下服务器编写好服务程序  会用Maven打成JAR包,放在Maven仓库里管理,我们在用的时候直接引用就可以, 那么如何在Gradle项目中使用本地的  或者远程的Maven仓库呢    当M ...

  7. S7-200与SMART 200之间进行数据通讯与监控

    S7-200与SMART 200之间进行数据通讯与监控 准备物品:S7-200PLC.SMART200.SCANET模块*2.交换机*1.网线若干. (连接示意图一) 1.在STEP7-MircoWi ...

  8. SSM-Spring-20:Spring中事务基础

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 事务 事务是什么? 我记得当初的百度百科上讲,事务是执行的最小逻辑单元,它们要么都执行,要么都不执行 (同生共 ...

  9. Java公开课-04.异常

    一,异常的概念 程序在运行时,发生了我们没有预测的结果,它阻止了程序按照我们预期效果执行 二,怎么保证我们的程序在发生异常以后 ,代码继续执行? 异常处理机制 在程序发生异常以后,还能按照我们事先设定 ...

  10. (细节)My SQL中主键为0和主键自排约束的关系

    开始不设置主键 表的设计如下: 如果id的位置有好几个0的话:设置主键并且自动排序时,0会从1开始递增: Insert 进去 id = 0的数据,数据会从实际的行数开始增加,和从0变化不一样: 现在主 ...