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