是否可以更改提取
事件接收的请求
对象的标头?
两次尝试:
>
修改现有标题:
self.addEventListener('fetch', function (event) {
event.request.headers.set("foo", "bar");
event.respondWith(fetch(event.request));
});
失败,原因是未能对“头”执行“设置”:头是不可变的
。
创建新的请求对象:
self.addEventListener('fetch', function (event) {
var req = new Request(event.request, {
headers: { "foo": "bar" }
});
event.respondWith(fetch(req));
});
失败与未能构造请求:不能构造一个请求的模式是导航和一个非空的请求。
(另请参见如何更改响应的标题?)
你有没有尝试过类似于你提到的问题中的解决方案(如何改变响应的标题?)?
在ServiceWorker手册中,我们手动复制请求对象以将它们存储在IndexedDB中(https://serviceworke.rs/request-deferrer_service-worker_doc.html).这是另一个原因(我们想将它们存储在缓存中,但我们无法存储POST请求,因为https://github.com/slightlyoff/ServiceWorker/issues/693),但它也应该适用于您想要做的事情。
// Serialize is a little bit convolved due to headers is not a simple object.
function serialize(request) {
var headers = {};
// `for(... of ...)` is ES6 notation but current browsers supporting SW, support this
// notation as well and this is the only way of retrieving all the headers.
for (var entry of request.headers.entries()) {
headers[entry[0]] = entry[1];
}
var serialized = {
url: request.url,
headers: headers,
method: request.method,
mode: request.mode,
credentials: request.credentials,
cache: request.cache,
redirect: request.redirect,
referrer: request.referrer
};
// Only if method is not `GET` or `HEAD` is the request allowed to have body.
if (request.method !== 'GET' && request.method !== 'HEAD') {
return request.clone().text().then(function(body) {
serialized.body = body;
return Promise.resolve(serialized);
});
}
return Promise.resolve(serialized);
}
// Compared, deserialize is pretty simple.
function deserialize(data) {
return Promise.resolve(new Request(data.url, data));
}
您可以基于原始请求创建新请求并覆盖标题:
new Request(originalRequest, {
headers: {
...originalRequest.headers,
foo: 'bar'
}
})
另见:https://developer.mozilla.org/en-US/docs/Web/API/Request/Request
只要您设置了所有选项,就可以创建新的请求对象:
// request is event.request sent by browser here
var req = new Request(request.url, {
method: request.method,
headers: request.headers,
mode: 'same-origin', // need to set this properly
credentials: request.credentials,
redirect: 'manual' // let browser handle redirects
});
如果原始的模式是
导航
(这就是您遇到异常的原因),并且您可能希望将重定向传递回浏览器,让它更改其URL,而不是让获取
处理它。
请确保您没有在GET请求上设置主体——获取不喜欢它,但是浏览器在响应来自POST请求的重定向时,有时会用主体生成GET请求。
获取
不喜欢它。
我有一个用例,我需要更改的标题。例如,我有一个餐厅单元,当向右滑动时,我显示书签(104),其中书签是动作,104表示已经有104个人给它加了书签。当点击它时,我希望它更改为书签(105),因为很明显有一个新用户(当前用户自己)已经将其加入书签。我该怎么做呢?尝试了下面的代码,它不工作。
我正在尝试使用JSoup访问java中的在线api。通过我的浏览器,我可以很好地导航到url,并得到json数据作为回报。但是,如果我使用Jsoup,url会发生更改,并且会从中删除“/api”。例如:https://www.onehash.com/api/archived_contest/122/我可以通过浏览器很好地打开它,但如果我使用jsoup连接到它,url就会变成https://www.
如何在java过滤器中更改请求体以防止< code>XSS攻击?我构建了< code > http servlet requestwrapper 并使用< code>getparameter来更改主体,但得到流关闭异常。
问题内容: 我有登录功能 此函数用于将变量保存到会话中, 但是当新请求检查用户是否登录时 然后返回总是“注销”,因为会话已更改。我使用Redis来存储会话,我认为这是Redis的错误,因为当我停止使用Redis时,可以,请帮帮我! 问题答案: 最好的处理方式是始终让Express处理它(如果可以的话)。 https://flaviocopes.com/express-sessions/(更新了会话
我将Spring Security集成到一个现有的Spring Boot项目(版本:1.5.3.Release)中。 例如:GET请求指向: 我的类是: 相关部分: 安全筛选器链:[WebAsyncManagerIntegrationFilter SecurityContextPersistenceFilter HeaderWriterFilter CSrffilter LogoutFilter