In Chrome extension, Modifying sec-fetch-dest, sec-fetch-mode value of request header is possible by using declarative net request by setting the manifest.json. Please refer the code below.
{
"manifest_version": 3,
...
"permissions": [
"declarativeNetRequest",
"declarativeNetRequestWithHostAccess",
"activeTab"
],
"declarative_net_request": {
"rule_resources": [
{
"id": "rulset for my extension",
"enabled": true,
"path": "rules.json"
}
]
},
"host_permissions": [
"<all_urls>"
],
"content_scripts": [{
"js": [ "content.js" ],
"matches": [ "<all_urls>" ],
"run_at": "document_idle"
}],
And rules.json is as follows.
{
"id": 1,
"priority": 1,
"action": { "type": "modifyHeaders",
"requestHeaders": [
{ "header": "sec-fetch-dest", "operation": "set", "value": "document" },
{ "header": "sec-fetch-mode", "operation": "set", "value": "navigate" }
]
},
"condition": { "domains":["acmicpc.net"], "resourceTypes": ["xmlhttprequest"] }
}
The code mentioned above works in chrome, it means that it modifies the request header successfully.
However, When running the above code in safari(v17.1), it does not modify the request header.
I confirm that safari v17.1 supports modifyHeaders by documentation
However, Safari does not modify request headers. Also, It does not display any error related to the above rules.
Does safari support modification of sec-fetch-dest and sec-fetch-mode in request headers by using declarative_net_request?