2015-04-23 59 views
9

我正在开发Chrome扩展程序,该程序允许用户记录网站的所有HTTP请求,修改请求的各个部分并重新发送。可以修改jQuery ajax请求中的cookie值吗?

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

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

这可以用jQuery的ajax来完成吗?如果没有,反正有没有在JavaScript中做到这一点?

+0

** [This Link](http://stackoverflow.com/questions/3340797/can-an-ajax-response-set-a-cookie)**可能会有所帮助.. :) –

+0

什么是你首先使用拦截请求? – Xan

+0

@Xan,在Chrome开发人员工具中有一个'chrome.devtools.network。onRequestFinished'事件,当请求完成并触发请求的内容时触发。 –

回答

5

既然你是在谈论一个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来查找相应的响应。
1

使用jQuery.ajax()无法在任何地方进行此操作。

XMLHttpRequest不允许您修改Cookie标头(see spec)和jQuery.ajax使用XMLHttpRequest

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

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

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

Sending credentials with cross-domain posts?

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