即使使用自定义 headers 如何禁用预检请求

how to disable preflight request even with custom headers

我需要一个对此经验丰富且知识渊博的人,以便他可以提供建议 me.I 会详细解释我的情况。 我写了一个restfulapi。这是一个超级大的 api,我正在使用 front-end SPA(vue.js,实际上并不重要)。我在很多页面上发出 3-4 个不同的 api 请求(获取不同的信息)。真正让我生气的是预检请求发生了。这意味着如果转到一个页面需要 4 个请求,它不会执行 4 api 个请求,它会因为预检 OPTIONS 请求而发出 4 * 2 = 8 api 个请求。我不需要它,因为我知道 cors 并且我可以正确设置 cors 以便在每次请求之前我不需要预检来检查请求是否安全。 (如果我的域不了解 cors,PREFLIGHT 是消除可能来自不同域对我的域的任何威胁的一种快速方法(不是最佳方法),因此 preflight 会保护我并告诉他我的域不知道关于cors,他不能从另一个来源向我的来源发出请求。我也给了你一些信息。

现在是时候禁用它了,我知道它不需要 body 请求,所以它可能很快,但我仍然不想要它。我想禁用它。我知道这是可能的。我在 Whosebug 上读了很多,人们说你只需要将 content-type 设置为 text/plain 或其他一些解决方案,但他们说如果你使用自定义 headers,那么这是不可能的。我使用自定义 headers 以便将身份验证令牌(承载)传递到我的 api 中间件。必须有办法以某种方式禁用它。

非常感谢您提出任何建议。

好的,第一步是 return 来自预检 OPTIONS 请求的 Access-Control-Max-Age 响应 header。这指定了 OPTIONS 响应在浏览器中缓存的时间长度。如果你 return 这个,那么浏览器将停止发送预检请求。好吧,它最初会为每个请求发送一个,但之后,它会使用浏览器中的缓存版本。