【问题标题】:Possible to modify cookie values in a jQuery ajax request?可以在 jQuery ajax 请求中修改 cookie 值吗?
【发布时间】:2015-07-01 01:00:42
【问题描述】:

我正在开发一个 Chrome 扩展程序,它允许用户记录网站的所有 HTTP 请求、修改请求的片段然后重新发送。

我希望使用jQuery's ajax method 来构造和发送修改后的请求。我已经能够构造请求的其他部分,但据我所知,没有办法在请求中包含 cookie 值。

要明确一点 - 我不是要在浏览器上创建 cookie,我是在尝试使用 jQuery 的 ajax 方法修改将作为 HTTP 请求的一部分发送的 cookie 值。

这可以用 jQuery 的 ajax 来完成吗?如果没有,有没有办法在javascript中做到这一点?

【问题讨论】:

  • This Link 可能会有所帮助.. :)
  • 你首先用什么来拦截请求?
  • @Xan,在 Chrome 开发者工具中有一个 chrome.devtools.network.onRequestFinished 事件,当请求完成并包含请求内容时触发。
  • 有两种类型的 cookie,一种是 javascript 引擎可以访问的,另一种是不能访问的。在一个完整的 http 请求中,两种类型都被发送。我相信您将需要使用 jquery 以外的其他东西来执行您的任务。
  • 有趣 - 可以用纯 JavaScript 完成吗?还是您认为 jQuery 或纯 javascript 都没有能力?

标签: javascript jquery http cookies google-chrome-extension


【解决方案1】:

既然您说的是 Chrome 扩展程序,您可以使用webRequest API 来拦截和修改您的请求。

chrome.webRequest.onBeforeSendHeaders.addListener(
  function(details) {
    /* Identify somehow that it's a request initiated by you */

    for (var i = 0; i < details.requestHeaders.length; i++) {
      if (details.requestHeaders[i].name === 'Cookie') {
        /* Do something with it */
        break;
      }
    }

    /* Add the Cookie header if it was not found */

    return {requestHeaders: details.requestHeaders};
  },
  {urls: ["*://*.example.com/*"]}, 
  ["blocking", "requestHeaders"]
);

这样,您应该能够修改 cookie,而无需实际修改浏览器的 cookie 存储。 我说“应该”是因为我没有测试过这个解决方案。

一些要点:

  • 您将需要权限:"webRequest""webRequestBlocking" 和主机权限(例如,"*://*.example.com/"
  • 需要注意的是,您不能拦截自己的同步请求,以防死锁。只要您的 AJAX 是异步的,就没有关系。
  • 如果您需要阻止Set-Cookie 的响应到达cookie 存储,您可以通过修改onHeadersReceived 中的响应标头来实现。您可以使用请求 ID 找到相应的响应。

【讨论】:

    【解决方案2】:

    使用jQuery.ajax() 不可能在任何地方都这样做。

    XMLHttpRequest 不允许您修改 Cookie 标头 (see spec),jQuery.ajax 在后台使用 XMLHttpRequest

    直接在javascript中使用XMLHttpRequest也有同样的问题,所以没有帮助。

    你可以在当前文档中添加cookies并告诉jQuery告诉XHR用xhrFields: { withCredentials: true }跨域发送cookies,但是目标站点也必须有相应的CORS设置,听起来好像不匹配你的用例。

    如果你想尝试一下,一些资源:

    Sending credentials with cross-domain posts?

    http://api.jquery.com/jQuery.ajax/#jQuery-ajax-settings(查找 xhrFields)

    【讨论】:

      猜你喜欢
      • 2022-01-09
      • 1970-01-01
      • 1970-01-01
      • 2022-11-18
      • 2016-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多