我们应该在发送响应时关闭 pre-flight Cors 请求的连接吗?

should we close the connection of a pre-flight Cors request while sending response?

据我所知,如果 cors 请求带有一些额外的 headers 设置,第一个服务器需要处理它。

对于 CORS,服务器必须发送 Access-Control-Allow-Headers header 以允许来自客户端的不常见请求 header。

Access-Control-Allow-Headers ... - Comma-delimited 支持的请求列表 headers.

例如,假设我的 pre-flight 请求是

OPTIONS /cors HTTP/1.1
Origin: http://api.bob.com
Access-Control-Request-Method: PUT
Access-Control-Request-Headers: X-Custom-Header
Host: api.alice.com
Accept-Language: en-US
Connection: keep-alive
User-Agent: Mozilla/5.0...

然后从server-side我会发送回复

Access-Control-Allow-Origin: http://api.bob.com
Access-Control-Allow-Methods: GET, POST, PUT
Access-Control-Allow-Headers: X-Custom-Header
Content-Type: text/html; charset=utf-8

我的问题是 - 当我们向客户端发送 pre-flight 响应时,我应该关闭服务器端的连接吗?

还有一件事,我如何为所有其他不同的后续请求缓存 pre-flight 请求?

谢谢

您可以使用

缓存 OPTIONS 请求

Access-Control-Max-Age

header。 将其附加到 OPTIONS 响应的 headers collection。

但是用户代理(浏览器)必须发出初始 OPTIONS 请求,您无法避免这种情况。 但是所有进一步的 OPTIONS 请求都被缓存并且不会发送到服务器。 无需关闭连接。

Access-Control-Allow-Origin: http://hello-world.example

Access-Control-Max-Age: 3628800

Access-Control-Allow-Methods: PUT

here 所述,搜索

could have the following headers specified

转到指定的文本部分。