【问题标题】:Imitating cookies behavior in chrome packed app在 chrome 打包应用程序中模仿 cookie 行为
【发布时间】:2016-02-18 20:57:59
【问题描述】:

我正在使用 REST 服务,我无法控制修改。 该服务具有验证/登录和许多“数据检索”端点。

我被要求创建将使用此 REST 服务的“Chrome 打包应用程序”。

我的限制是: 不能使用沙盒页面。 无法使用网络视图。

问题:

  1. Xhr 请求忽略“Set-cookie”标头。
  2. 无法手动设置 cookie(就像没有 cookie api)。

想法与研究

  1. 我使用“chrome.socket”在 Google 上搜索了 XHR 实现,但不支持 https,因为“chrome.socket”不支持 TLS。
  2. Forge 是一个“Chrome-js”库,为“chrome.socket”添加了 TLS 支持

问题

  1. 有没有办法修改请求和响应头?
  2. 有没有办法将使用“chrome.socket”的 XHR 实现与 Forge 结合起来? (我不太了解协议或原始 XHR 实现)

  3. 实现假cookie API来管理来自标头的数据是否合理?

【问题讨论】:

  • 为什么你不能使用 webview?
  • 因为我需要在应用程序中使用 webview。而且你不能做嵌套的网络视图。
  • 您需要根据您的请求设置任意 cookie,还是只需要返回服务之前发送给您的 cookie(即 cookie 的工作方式)?需要从头开始设置任意 cookie 的 REST API 会很奇怪。
  • 不不,不是从头开始,只是想要一个类似浏览器的cookie行为

标签: javascript sockets cookies google-chrome-app


【解决方案1】:

您应该考虑使用 Cross-Origin Resource Sharing (CORS) 请求。有很好的介绍here

特别是,您需要使用withCredentials

默认情况下,标准 CORS 请求不会发送或设置任何 cookie。在 为了在请求中包含 cookie,您需要设置 XMLHttpRequest 的 .withCredentials 属性为 true:[...]

请注意,您需要服务器的配合才能执行此操作:

为了使其正常工作,服务器还必须通过以下方式启用凭据 将 Access-Control-Allow-Credentials 响应标头设置为 “真实”。

由于您始终使用 Chrome,您可以使用 Fetch API 代替 XMLHttpRequest2。在这种情况下,您将添加 credentials 选项:

您是否要使用凭据发出提取请求,例如 cookie,您应该将请求的凭据设置为“包含”。

这两种机制都将 (1) 支持 HTTPS 和 (2) 不透明地管理 cookie,即它们不允许您检查 cookie 数据。

【讨论】:

  • 我认为您可能正在做某事,正在检查。
  • 非常感谢@rhashimoto。这对我来说是一个巨大的失误。
猜你喜欢
  • 2014-09-10
  • 1970-01-01
  • 2014-06-09
  • 1970-01-01
  • 2016-04-18
  • 2012-12-20
  • 1970-01-01
  • 1970-01-01
  • 2013-04-07
相关资源
最近更新 更多