307 Redireccionar al cargar analytics.js en Chrome


Estoy creando una aplicación web y utilizando Google Analytics (analytics.js) para análisis. Recientemente me di cuenta de que los análisis no están funcionando correctamente en Chrome.

Estoy cargando analytics usando el fragmento de código estándar en un módulo separado e incluido a través de requirejs. He verificado que este script se ejecuta como se esperaba y ejecuta el fragmento de analytics.

Cuando inspecciono el tráfico de red en Firefox, puedo ver que el script de análisis se carga desde Google como se esperaba (HTTP 200 respuesta):

introduzca la descripción de la imagen aquí

Sin embargo, cuando corro exactamente la misma página en Chrome, obtengo una respuesta HTTP 307 que apunta a about: en blanco, y analytics no se ejecuta:

introduzca la descripción de la imagen aquí

Sin embargo, si pego la URL de analytics directamente en la barra de direcciones de Chrome, se encuentra el script. ¿Alguna idea de qué está pasando aquí, o cómo arreglarlo?

Author: Benj, 2015-01-14

2 answers

307 Internal Redirect con Non-Authorative-Reason: Delegateindica que la solicitud fue interceptada y modificada (redirigida) por una extensión de Chrome a través de las API de extensión WebRequesto declarative WebRequest.

Puede averiguar qué extensión activó la redirección de la siguiente manera:

  1. Visita chrome://net-internals/#events
  2. Activa la solicitud (google analytics, en tu caso).
  3. Vuelva a la pestaña chrome://net-internals/#events y busque un URL_REQUEST que coincida con su solicitud (puede usar el cuadro de búsqueda para filtrar búsqueda).
  4. Haga clic en la entrada para mostrar el registro en el lado derecho. Verá el nombre de la extensión, ID de extensión y otra información sobre la solicitud:
t=7910 [st=0] +REQUEST_ALIVE  [dt=6]
t=7910 [st=0]   +URL_REQUEST_DELEGATE  [dt=5]
t=7910 [st=0]      DELEGATE_INFO  [dt=5]
                   --> delegate_info = "extension [Name of extension]"
t=7915 [st=5]      CHROME_EXTENSION_REDIRECTED_REQUEST
                   --> extension_id = "ebmlimjkpnhckbaejoagnjlgcdhdnjlb"
t=7915 [st=5]   -URL_REQUEST_DELEGATE
t=7915 [st=5]   +URL_REQUEST_START_JOB  [dt=1]
                 --> load_flags = 339804160 (BYPASS_DATA_REDUCTION_PROXY | MAYBE_USER_GESTURE | REPORT_RAW_HEADERS | VERIFY_EV_CERT)
                 --> method = "GET"
                 --> priority = "LOW"
                 --> url = "https://www.google-analytics.com/analytics.js"
t=7915 [st=5]      URL_REQUEST_REDIRECT_JOB
                   --> reason = "Delegate"
t=7915 [st=5]      URL_REQUEST_FAKE_RESPONSE_HEADERS_CREATED
                   --> HTTP/1.1 307 Internal Redirect
                       Location: about:blank
                       Non-Authoritative-Reason: Delegate

En este ejemplo de registro, una extensión con el nombre "[Nombre de la extensión]" y el ID de extensión "ebmlimjkpnhckbaejoagnjlgcdhdnjlb" redirigió la solicitud. Después de encontrar el nombre y/o ID de la extensión, puede visitar chrome://extensions y deshabilitar o eliminar la extensión que modificó la solicitud.

 161
Author: Rob W,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-14 17:19:42

En mi caso, la razón de la redirección 307 era más prosaica. Por costumbre de usar URL relativas al protocolo, he eliminado el protocolo de la URL en el script de incrustación de Google Universal Analytics, cambiando https://www.google-analytics.com/analytics.js a //www.google-analytics.com/analytics.js.

Por ejemplo ( no intentes esto en casa):

(function(i,s, o, g,r,a, m) {i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i [r].q = i [r].q / / []).push (argumentos)}, i[r].l = 1 * nueva fecha (); a = s. Elemento de creación (o), m=s. getElementsByTagName(o)[0];a.async=1;a.src = g;m.parentNode.insertBefore(a,m) })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

Esto es desaconsejable ya que Google aparentemente sirve el script y las solicitudes de seguimiento solo a través de https. Por lo tanto, la eliminación del protocolo provoca una redirección tanto al incrustar el script por primera vez, así como en cualquier(!) solicitud de seguimiento posterior. Además, como declaró Paul Irish en una actualización de su post canónico sobre URLs relativas al protocolo , esta técnica ya no es alentada o de hecho tiene mérito:

Ahora que SSL es recomendable para todos y no tiene problemas de rendimiento, esta técnica es ahora un anti-patrón. Si el activo que necesita está disponible en SSL, utilice siempre el activo https://.

 7
Author: Boaz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-29 13:20:09