可以在jQuery ajax请求中修改cookie值吗?

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

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

为了清楚 – 我不是想在浏览器上创建一个cookie,我试图修改将使用jQuery的ajax方法作为HTTP请求的一部分发送的cookie值。

这可以用jQuery的ajax完成吗? 如果没有,无论如何在javascript中执行此操作?

由于您正在谈论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的响应onHeadersReceived 。 您可以使用请求ID查找相应的响应。

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

XMLHttpRequest不允许您修改Cookie标头( 请参阅规范 ), jQuery.ajax使用XMLHttpRequest

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

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

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

使用跨域post发送凭据?

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