Estoy tratando de ejecutar Electron en modo sin cabeza para obtener contenido en un servidor remoto que requiere cookies con el prefijo __Host- . Sin embargo, el antiguo código solía ejecutar
var cookie = { url: cookieurl, name: cookiename, value: cookievalue }; win.webContents.session.cookies.set(cookie) .then(function(result) { loadUrl(win, indexUrl, output); }) .catch(function(e) { throw Error("Failed to load cookie, e="+e); }); y esto parece funcionar bien siempre que el nombre de la cookiename no comience con __Host- . Cuando intento configurar una cookie con el prefijo __Host- , obtengo la siguiente excepción:
Error: Failed to parse cookieSin embargo, esta limitación no está documentada en https://www.electronjs.org/docs/latest/api/cookies
Este detalle no está documentado en la documentación oficial en https://www.electronjs.org/docs/latest/api/cookies pero es el resultado lógico de otras reglas. Específicamente, el encabezado HTTP Set-Cookie se define para seguir estas reglas:
<cookie-name>=<cookie-value>
...
Nota: Algunos<cookie-name>tienen una semántica específica:
__Host-prefijo:
Las cookies con nombres que comienzan con__Host-deben configurarse con el indicadorsecure, deben provenir de una página segura (HTTPS), no deben tener undomainespecificado (y, por lo tanto, no se envían a subdominios) y la ruta debe ser/.
...
Atributos
...
SecureOpcional
Indica que la cookie se envía al servidor solo cuando se realiza una solicitud con el esquemahttps:(excepto enlocalhost), y por lo tanto, es más resistente a los ataques man-in-the-middle.Nota: No asuma que
Secureevita todo acceso a información confidencial en las cookies (claves de sesión, detalles de inicio de sesión, etc.). Las cookies con este atributo todavía se pueden leer/modificar con acceso al disco duro del cliente o desde JavaScript si el atributo de cookieHttpOnlyno está configurado.Los sitios inseguros (http:) no pueden establecer cookies con el atributo
Secure(desde Chrome 52 y Firefox 52). Para Firefox, los requisitos de https: se ignoran cuando localhost establece el atributo Seguro (desde Firefox 75).
Específicamente, no puede establecer una cookie con un nombre que comience con el prefijo __Host- sin especificar también secure . Como resultado, falla la configuración de la cookie como se describe en la pregunta. Desafortunadamente, la excepción es simplemente Error: Failed to parse cookie en lugar de Error: cannot set cookie with "__Host-" prefix without also setting "secure" attribute .
Lo siguiente debería funcionar como se esperaba:
var cookie = { url: cookieurl, name: cookiename, value: cookievalue, secure: true, // httpOnly: true, // sameSite: "lax", }; win.webContents.session.cookies.set(cookie) .then(function(result) { loadUrl(win, indexUrl, output); }) .catch(function(e) { throw Error("Failed to load cookie, e="+e); }); El ejemplo anterior también tiene los atributos httpOnly y sameSite en los comentarios para recordar que probablemente también desee considerar estos atributos.