ec.js 可以用服务器端 gtm 代理吗?

Posted

技术标签:

【中文标题】ec.js 可以用服务器端 gtm 代理吗?【英文标题】:Can ec.js be proxied with server side gtm? 【发布时间】:2021-12-12 03:19:16 【问题描述】:

想知道是否只有 gtm.js 和 analytics.js 可以通过 gtm 服务器代理?在谷歌文档上找不到任何关于此的信息。此外,尝试使用服务器端 gtm 获取它时出现错误 404。

【问题讨论】:

【参考方案1】:

有一个错误,plugins/ua/ec.js 将通过https://your.domain/plugins/ua/ec.js 获取

当发生这种情况时,您必须选择客户端请求并手动返回脚本(通过在服务器端容器中编写客户端模板)。

找到了一个包含代码示例的 repo,它缩短了我本来可以使用的时间。 信用:https://gist.github.com/mbaersch/e94e2499ea5bb761bf81878d815fd890#file-fix-ecjs-client-tpl 重要的部分来了:

const setResponseBody = require('setResponseBody');
const setResponseHeader = require('setResponseHeader');
const setResponseStatus = require('setResponseStatus');
const sendHttpGet = require('sendHttpGet');
const templateDataStorage = require('templateDataStorage');
const returnResponse = require('returnResponse');
const key = "ec.js";

if (require('getRequestPath')() === '/plugins/ua/ec.js') 
  require('claimRequest')();
  setResponseHeader('content-type', 'application/javascript');
  const cachedBody = templateDataStorage.getItemCopy(key);
  if (cachedBody) 
    setResponseBody(cachedBody);
    setResponseStatus(200);
    returnResponse();
   else 
    sendHttpGet('https://www.google-analytics.com/plugins/ua/ec.js', (statusCode, headers, body) => 
      templateDataStorage.setItemCopy(key, body);
      setResponseBody(body);
      setResponseStatus(statusCode);
      returnResponse();
    );    
    

【讨论】:

【参考方案2】:

服务器端 GTM 不像普通 GTM 那样代理 js。它主要用于代理网络请求。

如果您想知道它是否可以发送增强型电子商务事件,那么可以。

如果您想知道它是否可以在站点上部署任何东西(包括任何 js 文件),那么不,它不能。它根本不会以任何方式出现在前端。它可以代理文件,但所做的只是重写您仍然必须包含在 DOM 中的端点。

使用前端 GTM 在前端部署任何东西。

【讨论】:

错了。服务器端 GTM 可以为客户端 GTM 文件本身(有一个专用客户端)以及分析脚本(如果您在 GA4 的配置标签中选中“发送到服务器”选项)提供服务。但是它不能重写脚本,所以我希望它不能改变加载 GA 插件的 url。 是的,它可以“服务”FE GTM,但这远非 FE GTM 做到的。您仍然必须手动将其包含到 DOM 中,只需使用您的服务器端 url 作为端点。因此,如果我们称其为“服务 js”,那么我们可以说任何第三方 Web 服务器都可以“服务” js。虽然这样做,您最终不仅会显示您使用 BE GTM 的事实,而且还会显示您托管它的位置,这会失去它的好处。 我现在看到我的问题不是很清楚。但想通了这个问题,所以会提供答案。【参考方案3】:

Stape.io 有一个文件代理客户端 https://github.com/stape-io/file-proxy-client,因此您可以通过服务器端 GTM 容器轻松代理任何文件。

它与上一个答案中描述的基本相同,但更通用且易于使用。

【讨论】:

以上是关于ec.js 可以用服务器端 gtm 代理吗?的主要内容,如果未能解决你的问题,请参考以下文章

WGCLOUD的服务端和代理端必须是相同版本吗

nginx反向代理service name可以为ip吗

nginx 反向代理支持域名吗

请问用unity3d来制作MMO类型网络游戏,服务端该如何制作?听说用Photon网络引擎可以制作,有详细的教程吗?

如何设置为被代理的HTTP服务端,可以在dos下设置不??

nginx后端服务器可以是(外部)互联网服务器吗?