Salesforce站点/Instance页面使用HTTP的常见问题

需求背景】:很早前就使用了站点页面供客户在Email中点击链接提交表单,即客户在生日当月收到Email,就可以选择自己想要的礼物类型,一旦选好后MC会触发另一封携带QR(图片链接由.net的同时服务器渲染得到的)的邮件供客户在门店消费使用。这个场景我们是通过将http的图片包含在email模板中递送给客户的,自然没有遇到在vf里面包含http图片,浏览器无法渲染的问题。直到这两天,我们需要保持原有方案不变,并针对另外一种活动直接在站点页面包含http类型图片的时候,挑战就出现了。

"按图索骥"】:
问题是这样的:
Salesforce站点/Instance页面使用HTTP的常见问题

一开始并没有在意http这个问题,在图片无法显示的时候,我首先查看了dom里面img的src确保在新窗口能正常访问,说明图片无损,接下来我查看了chrome的console和network的img资源,检测到console抛出了错误,network图片资源被强转成了https,如下图:
console:
Salesforce站点/Instance页面使用HTTP的常见问题
network - img:
Salesforce站点/Instance页面使用HTTP的常见问题

这个时候大家可能会说配置一下环境让页面支持http不就可以了吗?我也是这么想,于是我检查了下面几个环节:
1. Remote Site Settings - 图片domain已添加
2. Session Settings,已取勾Require secure connections (HTTPS) for all third-party domains
Salesforce站点/Instance页面使用HTTP的常见问题
3. 禁用该Visualforce Page的需要 GET 请求的 CSRF 保护 - Require CSRF protection on GET requests
Salesforce站点/Instance页面使用HTTP的常见问题

做到这3点我们可以保证一点:图片可以在instance page中正常访问,也就是说点击上图的preview按钮,传递需要的参数可以正常显示http的图片。

至此大家可能会追问,难道你不是应该去检查你的站点关于http的配置吗?
那是当然的,第一步我就做了那个动作,看下图:
Salesforce站点/Instance页面使用HTTP的常见问题

不过在后续的测试中我发现勾了这个当你打开http的站点链接时,它会自动重定向成https的。

这么说问题是没找着咯,大家可能会建议你去安全设置里面再看看,比如:
4. 加一下CSP Trusted Sites;
5. 加一下CORS;

后面发现这个不是很管用耶。。。。。。

最后,用各种关键词在Google上一顿狂搜之后,找到了那根独一无二的救命稻草——'This request has been blocked; the content must be served over HTTPS' error in Chrome

它说是chrome浏览器的安全机制,它会将vf页面里面的http资源转成https,很明显这个图片不支持ipv6就打不开咯。慢着,你是不是说其他浏览器能打开呀?
于是我用我那台安卓机试了下,打不开;
我让同事用iphone的safari打不开;
我用电脑的opera浏览器,打不开;
我用IE打开了,如下图:
Salesforce站点/Instance页面使用HTTP的常见问题

那一刹,我想那还试个啥,让.net的同事升级成ipv6不就完事了嘛。不过你那无处安放的魅力始终让我放不下——为啥instance page在chrome浏览器上能打开呀?Salesforce站点/Instance页面使用HTTP的常见问题

虚位以待】:
未完待续。。。。。。