Storefront 客户端检测流程

这篇文章主要介绍StoreFront ClientDetection 的整个流程,便于针对相关问题进行排错处理。

下图基本上囊括了整个客户端检查的5个步骤(点击查看大图)。
storefront client detection flow

  1. 加载配置,客户端发出请求https://sflb.xenme.lab/Citrix/myStoreWeb/Home/Configuration
    StoreFront返回对应的配置信息,其中包含PluginAssistant以及protocolHandler是否启用的设置
    如果在启用也就是客户端检测启用的情况下,客户端开始client detection 流程,并显示如下界面:client-deteciton-page[alert type=”info”]如果已经检测过,会在本地cookie中保存已经检测的信息,所以会直接跳过client detection的步骤。所以,某些情况需要静默跳转的时候也可以通过脚本的方式来添加对应的cookie实现。[/alert]
  2. 客户端发出请求https://sflb.xenme.lab/Citrix/myStoreWeb/clientAssistant/GetDetectionTicket
    StoreFront返回后续需要的两个重要参数:
    clientDetectionTicket:主要用于区分多个用户和请求
    postbackUrl:客户端检查过程中上报客户端信息的地址
  3. 客户端在发出上述请求的同时,开始循环发出请求https://sflb.xenme.lab/Citrix/myStoreWeb/clientAssistant/GetDetectionStatus检查clientDetection的结果是否成功。
    如果还在检查过程中,那么收到的响应如下:
    status=Waiting
  4. 同时,在拿到postbackUrl之后,浏览器也会发出Receiver://的请求,如下图所示:
    chrome invoke webHelper当浏览器发现对应请求是以Receiver开头的URL protocol的时候,Chrome会检查以下注册表的配置
    receiver protocl registry在Chrome直接调用WebHelper来处理请求之前,由于安全限制,Chrome会弹出下面的提示让用户选择:chrome-open-url-for-receiver-protocol
    用户允许之后,Chrome才真正调用WebHelper进行客户端检查。
  5. WebHelper被调用之后,会收集相关客户端的信息,比如客户端Receiver版本(hdxVersion).
    收集完成后作为post body通过postbackUrl上报给StoreFront. 对应Url请求为:
    https:///sflb.xenme.lab/Citrix/myStoreWeb/clientAssistant/reportDetectionStatus
    上报成功后,会收到StoreFront的成功响应:
    status=Success
  6. 同时,我们知道,浏览器一直在循环发出GetDetectionStatus请求来检查clientDetection的结果。
    当WebHelper成功上报客户端信息之后,那么客户端检测完成,之后GetDetectionStatus就会收到Storefront返回的成功响应,而不是之前的waiting。
  7. 到此,整个客户端检查完成,网页将会跳转到用户登录处理页面。