MIP ACCESS细节剖析

什么是MIP ACCESS

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

优势在哪里?

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

DEMO演示

在说具体实现和细节之前,我们列举了四个DEMO认识一下ACCESS到底是一个怎样的存在吧!

  • DEMO1演示了ACCESS的基本功能,该案例提供了1篇首次点击免费文章和3篇免费文章,首次点击免费是指在第一次访问该域名下具有ACCESS功能的页面时免费查看的功能;如果访问文章数目超过4篇时,页面中配置有ACCESS属性的模块将会隐藏,登录后方可查看全部;
    mip-access
  • DEMO2演示的是登录功能,案例制定的策略是登录后所有文章均免费查看;
    mip-access-login
  • DEMO3演示了ACCESS登出功能,登出后受到权限限制;
    mip-access-logout
  • DEMO4演示了重置数据的功能,重置会删除后端数据,由各自策略而定,在重置成功后所有页面的浏览记录均被删除;
    mip-access-reset

名词解释

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

  • Access Runtime: MIP Javascript运行环境;
  • Access Content Markup: 模块中以属性形式定义的,规定访问权限的标示;
  • Authorization endpoint: 授权接口,返回markup解析数据;
  • Pingback endpoint: 计量接口,存储访问数据;

使用方式

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

  • 引入mip脚本;

    <script type="text/javascript" src="https://mipcache.bdstatic.com/static/v1/mip.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
        },
        "type": "client"
    }
    </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接口请求失败,需要在这里配置相关接口参数作为backup;

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

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

    <div mip-access=“access AND subscriber”>…</div>
    

实现细节



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

  • 首先用户在访问页面时,请求会发送到CDN(页面嵌套在Super Frame中)或者开发者(单个MIP页面)自己的服务器上,此时返回html文档给用户,这样做是为了让用户能够第一时间看到页面,缩短请求的白屏时间;
  • html文档返回之后启动MIP Runtime服务,并将页面中以mip-access-hide属性标记的所有DOM元素隐藏起来,同时根据开发中提供的Authorization接口发起请求;
  • Authorization接口如果请求成功,则通过其返回的数据解析html文档中的markup,解析结果为true则展示元素,否则隐藏;如果请求失败,MIP Runtime会寻找html文档中以mip-access为标示的script,获取其中定义好的JSON数据,并以authorizationFallbackResponse字段中的内容作为解析需要的数据;如果authorizationFallbackResponse未定义则解析失败;
  • 页面加载完成后如果开发者配置了noPingback: true的选项,则不会发起Pingback(该请求主要为了让server记录访问数据)请求;否则发起请求并将数据传递给开发者server进行保存,待下次访问根据状态返回相应的数据;

适用范围

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

写在最后

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,591评论 18 139
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,016评论 4 62
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,857评论 6 13
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,565评论 18 399
  • 托着疲惫的身子回到了出租屋,甩了甩湿透的头发。因为外面下着瓢泼大雨,而我忘记了带伞,可怜的工资让我不能爽快的挥一挥...
    这小丫头片子阅读 315评论 2 2