可以修改 jQuery ajax 请求中的 cookie 值吗?
Possible to modify cookie values in a jQuery ajax request?
我正在开发 Chrome 扩展,允许用户记录站点的所有 HTTP 请求,修改请求的片段,然后重新发送。
我希望使用 jQuery's ajax method 构建并发送修改后的请求。我已经能够构建请求的其他部分,但据我所知,没有办法在请求中包含 cookie 值。
明确一点 - 我不是要在浏览器上创建 cookie,我是要修改将作为 HTTP 请求的一部分使用 jQuery 发送的 cookie 值s ajax 方法。
可以用 jQuery 的 ajax 来完成吗?如果没有,是否可以在 javascript 中完成?
使用 jQuery.ajax()
.
不可能在任何地方都做到这一点
XMLHttpRequest
不允许您修改 Cookie header (see spec),并且 jQuery.ajax
在幕后使用 XMLHttpRequest
。
直接在javascript中使用XMLHttpRequest
也有同样的问题,所以没有帮助。
可以在当前文档中添加cookies,告诉jQuery告诉XHR用xhrFields: { withCredentials: true }
发送cookiescross-domain,但是目标站点也得有对应的CORS设置,这听起来与您的 use-case.
不匹配
如果你想尝试一下,一些资源:
Sending credentials with cross-domain posts?
http://api.jquery.com/jQuery.ajax/#jQuery-ajax-settings(寻找 xhrFields)
既然你在谈论 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。 我说"should"是因为我没有测试过这个方案
一些要点:
- 您将需要权限:
"webRequest"
、"webRequestBlocking"
和主机权限(对于此示例,"*://*.example.com/"
)
- 需要注意的是,您不能拦截自己的同步请求,以防止死锁。只要您的 AJAX 是异步的,就没有关系。
- 如果您需要阻止
Set-Cookie
响应到达 cookie 存储,您可以通过修改 onHeadersReceived
中的响应 headers 来实现。您可以使用请求ID找到对应的响应。
我正在开发 Chrome 扩展,允许用户记录站点的所有 HTTP 请求,修改请求的片段,然后重新发送。
我希望使用 jQuery's ajax method 构建并发送修改后的请求。我已经能够构建请求的其他部分,但据我所知,没有办法在请求中包含 cookie 值。
明确一点 - 我不是要在浏览器上创建 cookie,我是要修改将作为 HTTP 请求的一部分使用 jQuery 发送的 cookie 值s ajax 方法。
可以用 jQuery 的 ajax 来完成吗?如果没有,是否可以在 javascript 中完成?
使用 jQuery.ajax()
.
XMLHttpRequest
不允许您修改 Cookie header (see spec),并且 jQuery.ajax
在幕后使用 XMLHttpRequest
。
直接在javascript中使用XMLHttpRequest
也有同样的问题,所以没有帮助。
可以在当前文档中添加cookies,告诉jQuery告诉XHR用xhrFields: { withCredentials: true }
发送cookiescross-domain,但是目标站点也得有对应的CORS设置,这听起来与您的 use-case.
如果你想尝试一下,一些资源:
Sending credentials with cross-domain posts?
http://api.jquery.com/jQuery.ajax/#jQuery-ajax-settings(寻找 xhrFields)
既然你在谈论 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。 我说"should"是因为我没有测试过这个方案
一些要点:
- 您将需要权限:
"webRequest"
、"webRequestBlocking"
和主机权限(对于此示例,"*://*.example.com/"
) - 需要注意的是,您不能拦截自己的同步请求,以防止死锁。只要您的 AJAX 是异步的,就没有关系。
- 如果您需要阻止
Set-Cookie
响应到达 cookie 存储,您可以通过修改onHeadersReceived
中的响应 headers 来实现。您可以使用请求ID找到对应的响应。