<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>影子屋 (文章分类：fetch)</title><link>https://blog.bgme.me/</link><description></description><atom:link href="https://blog.bgme.me/categories/fetch.xml" rel="self" type="application/rss+xml"></atom:link><language>zh_cn</language><copyright>Contents © 2024 &lt;a href="mailto:i@bgme.me"&gt;无影人&lt;/a&gt; 
&lt;a rel="license noopener nofollow" target="_blank" href="http://creativecommons.org/licenses/by-sa/4.0/" class="ui image" title="如无特别说明，本站文章均遵循 CC BY-SA 4.0 协议，转载请注明作者及出处。"&gt;
&lt;img alt="Creative Commons Attribution-ShareAlike 4.0 International License" src="/license.png"&gt;
&lt;/a&gt;
</copyright><lastBuildDate>Wed, 24 Apr 2024 12:02:12 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>浏览器 fetch, GM_xmlhttpRequest 以及 Forbidden header</title><link>https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/</link><dc:creator>无影人</dc:creator><description>&lt;p&gt;今天阅读 &lt;a class="reference external" href="https://blog.nest.moe/posts/write-a-package-for-both-browser-and-nodejs"&gt;《整一个同时用于浏览器和 Node.js 的模块》&lt;/a&gt; 这篇博文时，看到其中关于浏览器 fetch api 获取请求头部分，心有所感，于是就有了本文。&lt;/p&gt;
&lt;p&gt;本文将说一说浏览器 fetch api 与 Forbidden header 的那些事情，在浏览器中可以设置并获取 Forbidden header 吗？&lt;/p&gt;
&lt;!-- TEASER_END --&gt;
&lt;p&gt;一切开始之前，先看一看官方文档是怎么说的。&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://developer.mozilla.org/en-US/docs/Web/API/fetch"&gt;fetch() global function&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://developer.mozilla.org/en-US/docs/Web/API/Headers"&gt;Headers&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie"&gt;Set-Cookie&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name"&gt;Forbidden header name&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_response_header_name"&gt;Forbidden response header name&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="admonition error docutils container"&gt;
&lt;p&gt;For security reasons, some headers can only be controlled by the user agent. These headers include the forbidden header names and forbidden response header names.&lt;/p&gt;
&lt;p&gt;出于安全考虑，某些头只能由用户代理控制。这些头信息包括 forbidden header names 和 forbidden response header names。&lt;/p&gt;
&lt;/div&gt;
&lt;div class="admonition error docutils container"&gt;
&lt;p&gt;Warning: Browsers block frontend JavaScript code from accessing the Set-Cookie header, as required by the Fetch spec, which defines Set-Cookie as a forbidden response-header name that must be filtered out from any response exposed to frontend code.&lt;/p&gt;
&lt;p&gt;警告： 根据 Fetch 规范，Set-Cookie 是一个禁止的响应标头，对应的响应在被暴露给前端代码前，必须滤除这一响应标头，即浏览器会阻止前端 JavaScript 代码访问 Set-Cookie 标头。&lt;/p&gt;
&lt;/div&gt;
&lt;hr class="docutils"&gt;
&lt;p&gt;文档告诉我们，在浏览器环境中，向请求设置 &lt;a class="reference external" href="https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name"&gt;Forbidden header&lt;/a&gt; ，获取响应的 &lt;a class="reference external" href="https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_response_header_name"&gt;Forbidden response header&lt;/a&gt; （&lt;code class="docutils literal"&gt;&lt;span class="pre"&gt;Set-Cookie&lt;/span&gt;&lt;/code&gt;） 是无法做到的。&lt;/p&gt;
&lt;p&gt;真的是这样吗？我不信，我要自己试一试。&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code javascript"&gt;&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-1" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-1" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-2" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-2" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-3" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-3" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;resp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"https://httpbin.org/get"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-4" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-4" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"GET"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-5" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-5" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-6" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-6" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nx"&gt;Cookie&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"test1234"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-7" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-7" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="s2"&gt;"Sec-Fetch-Dest"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"document"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-8" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-8" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-8"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="s2"&gt;"Sec-Fetch-Mode"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"navigate"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-9" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-9" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-9"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="s2"&gt;"Sec-Fetch-Site"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"none"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-10" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-10" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-10"&gt;&lt;/a&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nx"&gt;Test&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"test1234"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-11" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-11" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-11"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-12" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-12" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-12"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-13" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-13" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-13"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;resp_body&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-14" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-14" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-14"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"https://httpbin.org/get"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-15" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-15" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-15"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-16" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-16" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-16"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;([...&lt;/span&gt;&lt;span class="nx"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;()]);&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-17" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-17" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-17"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;([...&lt;/span&gt;&lt;span class="nx"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;()].&lt;/span&gt;&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;": "&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="nx"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"\n"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-18" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-18" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-18"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resp_body&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-19" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-19" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-19"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-20" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-20" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-20"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-21" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-21" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-21"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-22" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-22" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-22"&gt;&lt;/a&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-23" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-23" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-23"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-24" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-24" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-24"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;resp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"https://www.baidu.com/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-25" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-25" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-25"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"GET"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-26" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-26" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-26"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-27" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-27" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-27"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;resp_body&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-28" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-28" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-28"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"https://www.baidu.com/"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-29" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-29" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-29"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-30" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-30" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-30"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;([...&lt;/span&gt;&lt;span class="nx"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;()]);&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-31" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-31" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-31"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;([...&lt;/span&gt;&lt;span class="nx"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;()].&lt;/span&gt;&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;": "&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="nx"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"\n"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-32" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-32" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-32"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resp_body&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-33" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-33" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-33"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-34" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-34" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-34"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-35" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-35" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-35"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-36" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-36" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-36"&gt;&lt;/a&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-37" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-37" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-37"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-38" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-38" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-38"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;xhr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;XMLHttpRequest&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-39" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-39" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-39"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;xhr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"GET"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://httpbin.org/get"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-40" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-40" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-40"&gt;&lt;/a&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-41" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-41" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-41"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;xhr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setRequestHeader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Cookie"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"test1234"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-42" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-42" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-42"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;xhr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setRequestHeader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Sec-Fetch-Dest"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"document"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-43" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-43" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-43"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;xhr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setRequestHeader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Sec-Fetch-Mode"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"navigate"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-44" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-44" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-44"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;xhr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setRequestHeader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Sec-Fetch-Site"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"none"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-45" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-45" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-45"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;xhr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setRequestHeader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Test"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"test1234"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-46" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-46" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-46"&gt;&lt;/a&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-47" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-47" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-47"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;xhr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;responseType&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"json"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-48" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-48" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-48"&gt;&lt;/a&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-49" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-49" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-49"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;xhr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"load"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ev&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-50" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-50" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-50"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"https://httpbin.org/get"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-51" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-51" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-51"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ev&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-52" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-52" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-52"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;xhr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-53" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-53" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-53"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;xhr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-54" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-54" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-54"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;xhr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getAllResponseHeaders&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-55" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-55" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-55"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-56" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-56" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-56"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;xhr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;send&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-57" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-57" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-57"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-58" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-58" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-58"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-59" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-59" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-59"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-60" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-60" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-60"&gt;&lt;/a&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-61" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-61" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-61"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-62" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-62" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-62"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;xhr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;XMLHttpRequest&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-63" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-63" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-63"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;xhr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"GET"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.baidu.com/"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-64" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-64" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-64"&gt;&lt;/a&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-65" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-65" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-65"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;xhr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;responseType&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-66" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-66" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-66"&gt;&lt;/a&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-67" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-67" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-67"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;xhr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"load"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ev&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-68" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-68" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-68"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"https://www.baidu.com/"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-69" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-69" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-69"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ev&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-70" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-70" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-70"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;xhr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-71" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-71" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-71"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;xhr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-72" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-72" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-72"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;xhr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getAllResponseHeaders&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-73" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-73" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-73"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-74" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-74" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-74"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;xhr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;send&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-75" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-75" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-75"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-76" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-76" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-76"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-77" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-77" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-77"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;a id="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-78" name="rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-78" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_dc6d2ddeeeff4a7b9b1126f95e998adf-78"&gt;&lt;/a&gt;&lt;span class="p"&gt;})();&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;到 &lt;a class="reference external" href="https://www.baidu.com/"&gt;https://www.baidu.com/&lt;/a&gt; 页面，运行上述代码，结果如下：&lt;/p&gt;
&lt;figure class="align-center"&gt;
&lt;a class="reference external image-reference" href="https://blog.bgme.me/images/2023/browser-fetch-forbidden-header/request.png"&gt;&lt;img alt="/images/2023/browser-fetch-forbidden-header/request.png" src="https://blog.bgme.me/images/2023/browser-fetch-forbidden-header/request.png"&gt;&lt;/a&gt;
&lt;figcaption&gt;
&lt;p&gt;Forbidden header&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class="align-center"&gt;
&lt;a class="reference external image-reference" href="https://blog.bgme.me/images/2023/browser-fetch-forbidden-header/response.png"&gt;&lt;img alt="/images/2023/browser-fetch-forbidden-header/response.png" src="https://blog.bgme.me/images/2023/browser-fetch-forbidden-header/response.png"&gt;&lt;/a&gt;
&lt;figcaption&gt;
&lt;p&gt;Forbidden response header&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;看来文档写的一点没错，确实无法设置与获取 Forbidden header 。&lt;/p&gt;
&lt;p&gt;当然如果仅仅是这样，还不至于让我水一篇博文。&lt;/p&gt;
&lt;p&gt;现在是见证奇迹的时刻了。&lt;/p&gt;
&lt;hr class="docutils"&gt;
&lt;p&gt;打开 Violentmonkey API 文档，在 &lt;a class="reference external" href="https://violentmonkey.github.io/api/gm/#gm_xmlhttprequest"&gt;GM_xmlhttpRequest&lt;/a&gt; 一节中，有这样的内容。&lt;/p&gt;
&lt;figure class="align-center"&gt;
&lt;a class="reference external image-reference" href="https://blog.bgme.me/images/2023/browser-fetch-forbidden-header/GM_xmlhttpRequest.png"&gt;&lt;img alt="/images/2023/browser-fetch-forbidden-header/GM_xmlhttpRequest.png" src="https://blog.bgme.me/images/2023/browser-fetch-forbidden-header/GM_xmlhttpRequest.png"&gt;&lt;/a&gt;
&lt;figcaption&gt;
&lt;p&gt;GM_xmlhttpRequest&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;div class="code"&gt;&lt;pre class="code text"&gt;&lt;a id="rest_code_6d33f76dec674a4bbb59ed74e88b8760-1" name="rest_code_6d33f76dec674a4bbb59ed74e88b8760-1" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_6d33f76dec674a4bbb59ed74e88b8760-1"&gt;&lt;/a&gt;Some special headers are also allowed:
&lt;a id="rest_code_6d33f76dec674a4bbb59ed74e88b8760-2" name="rest_code_6d33f76dec674a4bbb59ed74e88b8760-2" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_6d33f76dec674a4bbb59ed74e88b8760-2"&gt;&lt;/a&gt;
&lt;a id="rest_code_6d33f76dec674a4bbb59ed74e88b8760-3" name="rest_code_6d33f76dec674a4bbb59ed74e88b8760-3" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_6d33f76dec674a4bbb59ed74e88b8760-3"&gt;&lt;/a&gt;- 'Cookie'
&lt;a id="rest_code_6d33f76dec674a4bbb59ed74e88b8760-4" name="rest_code_6d33f76dec674a4bbb59ed74e88b8760-4" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_6d33f76dec674a4bbb59ed74e88b8760-4"&gt;&lt;/a&gt;- 'Host'
&lt;a id="rest_code_6d33f76dec674a4bbb59ed74e88b8760-5" name="rest_code_6d33f76dec674a4bbb59ed74e88b8760-5" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_6d33f76dec674a4bbb59ed74e88b8760-5"&gt;&lt;/a&gt;- 'Origin'
&lt;a id="rest_code_6d33f76dec674a4bbb59ed74e88b8760-6" name="rest_code_6d33f76dec674a4bbb59ed74e88b8760-6" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_6d33f76dec674a4bbb59ed74e88b8760-6"&gt;&lt;/a&gt;- 'Referer'
&lt;a id="rest_code_6d33f76dec674a4bbb59ed74e88b8760-7" name="rest_code_6d33f76dec674a4bbb59ed74e88b8760-7" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_6d33f76dec674a4bbb59ed74e88b8760-7"&gt;&lt;/a&gt;- 'User-Agent'
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;如果我没有记错的话，这些都是 Forbidden header 吧。怎么 &lt;code class="docutils literal"&gt;GM_xmlhttpRequest&lt;/code&gt; 就可以设置了？我不信。&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code javascript"&gt;&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-1" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-1" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-1"&gt;&lt;/a&gt;&lt;span class="c1"&gt;// ==UserScript==&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-2" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-2" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-2"&gt;&lt;/a&gt;&lt;span class="c1"&gt;// @name        GM_xmlhttpRequest Forbidden header Test&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-3" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-3" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-3"&gt;&lt;/a&gt;&lt;span class="c1"&gt;// @namespace   bgme.me&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-4" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-4" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-4"&gt;&lt;/a&gt;&lt;span class="c1"&gt;// @match       https://example.org/&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-5" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-5" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-5"&gt;&lt;/a&gt;&lt;span class="c1"&gt;// @grant       GM_xmlhttpRequest&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-6" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-6" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-6"&gt;&lt;/a&gt;&lt;span class="c1"&gt;// @version     1.0&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-7" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-7" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-7"&gt;&lt;/a&gt;&lt;span class="c1"&gt;// @author      bgme&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-8" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-8" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-8"&gt;&lt;/a&gt;&lt;span class="c1"&gt;// @connect     *&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-9" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-9" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-9"&gt;&lt;/a&gt;&lt;span class="c1"&gt;// @connect     httpbin.org&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-10" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-10" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-10"&gt;&lt;/a&gt;&lt;span class="c1"&gt;// @connect     www.baidu.com&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-11" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-11" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-11"&gt;&lt;/a&gt;&lt;span class="c1"&gt;// @description GM_xmlhttpRequest Forbidden header Test&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-12" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-12" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-12"&gt;&lt;/a&gt;&lt;span class="c1"&gt;// ==/UserScript==&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-13" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-13" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-13"&gt;&lt;/a&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-14" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-14" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-14"&gt;&lt;/a&gt;&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-15" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-15" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-15"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;GM_xmlhttpRequest&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-16" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-16" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-16"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://httpbin.org/get"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-17" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-17" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-17"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"GET"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-18" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-18" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-18"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-19" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-19" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-19"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;Cookie&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"test1234"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-20" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-20" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-20"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="s2"&gt;"Sec-Fetch-Dest"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"document"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-21" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-21" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-21"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="s2"&gt;"Sec-Fetch-Mode"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"navigate"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-22" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-22" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-22"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="s2"&gt;"Sec-Fetch-Site"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"none"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-23" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-23" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-23"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;Test&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"test1234"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-24" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-24" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-24"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-25" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-25" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-25"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;responseType&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"json"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-26" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-26" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-26"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;onload&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ev&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-27" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-27" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-27"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"https://httpbin.org/get"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-28" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-28" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-28"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ev&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-29" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-29" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-29"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ev&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-30" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-30" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-30"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ev&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;responseHeaders&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-31" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-31" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-31"&gt;&lt;/a&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-32" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-32" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-32"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-33" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-33" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-33"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-34" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-34" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-34"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-35" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-35" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-35"&gt;&lt;/a&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-36" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-36" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-36"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-37" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-37" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-37"&gt;&lt;/a&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-38" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-38" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-38"&gt;&lt;/a&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-39" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-39" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-39"&gt;&lt;/a&gt;&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-40" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-40" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-40"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;GM_xmlhttpRequest&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-41" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-41" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-41"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.baidu.com/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-42" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-42" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-42"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"GET"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-43" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-43" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-43"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;responseType&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-44" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-44" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-44"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;onload&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ev&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-45" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-45" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-45"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"https://www.baidu.com/"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-46" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-46" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-46"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ev&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-47" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-47" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-47"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ev&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-48" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-48" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-48"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ev&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;responseHeaders&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-49" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-49" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-49"&gt;&lt;/a&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-50" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-50" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-50"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-51" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-51" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-51"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-52" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-52" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-52"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-53" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-53" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-53"&gt;&lt;/a&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-54" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-54" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-54"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-55" name="rest_code_61ab469887de42b7afb7f1c0ef32ffe8-55" href="https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/#rest_code_61ab469887de42b7afb7f1c0ef32ffe8-55"&gt;&lt;/a&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;打开 &lt;a class="reference external" href="https://example.org/"&gt;https://example.org/&lt;/a&gt; ，F12 打开 console。&lt;/p&gt;
&lt;figure class="align-center"&gt;
&lt;a class="reference external image-reference" href="https://blog.bgme.me/images/2023/browser-fetch-forbidden-header/GM_xmlhttpRequest_test_Violentmonkey.png"&gt;&lt;img alt="/images/2023/browser-fetch-forbidden-header/GM_xmlhttpRequest_test_Violentmonkey.png" src="https://blog.bgme.me/images/2023/browser-fetch-forbidden-header/GM_xmlhttpRequest_test_Violentmonkey.png"&gt;&lt;/a&gt;
&lt;figcaption&gt;
&lt;p&gt;GM_xmlhttpRequest Forbidden header Test on Violentmonkey&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class="align-center"&gt;
&lt;a class="reference external image-reference" href="https://blog.bgme.me/images/2023/browser-fetch-forbidden-header/GM_xmlhttpRequest_test_Tampermonkey.png"&gt;&lt;img alt="/images/2023/browser-fetch-forbidden-header/GM_xmlhttpRequest_test_Tampermonkey.png" src="https://blog.bgme.me/images/2023/browser-fetch-forbidden-header/GM_xmlhttpRequest_test_Tampermonkey.png"&gt;&lt;/a&gt;
&lt;figcaption&gt;
&lt;p&gt;GM_xmlhttpRequest Forbidden header Test on Tampermonkey&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;虽然不愿意相信，但事实摆在面前， &lt;code class="docutils literal"&gt;GM_xmlhttpRequest&lt;/code&gt; 确实突破了浏览器的 Forbidden header 限制。&lt;/p&gt;
&lt;p&gt;那么问题又来了，Violentmonkey、Tampermonkey 是怎么做到的？&lt;/p&gt;
&lt;p&gt;莫非是 &lt;a class="reference external" href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Background_scripts"&gt;Background scripts&lt;/a&gt; 里的 fetch API 有特殊的权限，可以像 Node 那样不受 Forbidden header 限制？&lt;/p&gt;
&lt;p&gt;将第一部分创建为 Background scripts，加载插件，打开插件调试 Console 。&lt;/p&gt;
&lt;figure class="align-center"&gt;
&lt;a class="reference external image-reference" href="https://blog.bgme.me/images/2023/browser-fetch-forbidden-header/Background_scripts_fetch.png"&gt;&lt;img alt="/images/2023/browser-fetch-forbidden-header/Background_scripts_fetch.png" src="https://blog.bgme.me/images/2023/browser-fetch-forbidden-header/Background_scripts_fetch.png"&gt;&lt;/a&gt;
&lt;figcaption&gt;
&lt;p&gt;fetch on Background scripts&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;结果如图，很明显，Background scripts 中的 fetch API 也要受到 Forbidden header 的限制。&lt;/p&gt;
&lt;p&gt;翻看了一下 Violentmonkey 的源码（&lt;a class="reference external" href="https://github.com/violentmonkey/violentmonkey/blob/5015a06f8ff1462a2139d8710dd02956c679ebb2/src/background/utils/requests.js"&gt;requests.js&lt;/a&gt;、&lt;a class="reference external" href="https://github.com/violentmonkey/violentmonkey/blob/5015a06f8ff1462a2139d8710dd02956c679ebb2/src/background/utils/requests-core.js"&gt;requests-core.js&lt;/a&gt;），可以看出 Violentmonkey 通过 &lt;a class="reference external" href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest"&gt;webRequest&lt;/a&gt; API 突破了 Forbidden header 的限制。&lt;/p&gt;
&lt;p&gt;但有一个不幸的消息是 webRequest API 在 Manifest V3 中被 Google 干掉了，想要修改请求，就只能使用 &lt;a class="reference external" href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/declarativeNetRequest"&gt;declarativeNetRequest&lt;/a&gt; API 。
到了 Manifest V3 时代， GM_xmlhttpRequest 很可能就无法实现修改、读取 Forbidden header 的功能了。&lt;/p&gt;</description><category>browser</category><category>fetch</category><guid>https://blog.bgme.me/posts/2023/browser-fetch-gm_xmlhttprequest-and-forbidden-header/</guid><pubDate>Sat, 19 Aug 2023 15:58:38 GMT</pubDate></item></channel></rss>