nginx - 可以使用“if”来设置 CORS 标头吗?
问题描述
处理 CORS 请求的常见解决方案如下:
location ... {
add_header Access-Control-Allow-Origin ...;
add_header Access-Control-Allow-Credentials ...;
add_header Access-Control-Allow-Headers ...;
add_header Access-Control-Allow-Methods ...;
if ($request_method = 'OPTIONS') {
add_header Access-Control-Allow-Origin ...;
add_header Access-Control-Allow-Credentials ...;
add_header Access-Control-Allow-Headers ...;
add_header Access-Control-Allow-Methods ...;
return 204;
}
}
UPD顺便说一句,据我add_header
所知,不需要重复的。
解决方案
你不需要一个if
. 取几个map
s(在location
或server
块之外 -> 仅在http
块中起作用)。
map $request_method $one
{
default '…';
get '…';
options '…';
post '…';
}
map $request_method $two
{
default '…';
get '…';
options '…';
post '…';
}
map $request_method $three
{
default '…';
get '…';
options '…';
post '…';
}
map $request_method $four
{
default '…';
get '…';
options '…';
post '…';
}
字符串匹配忽略大小写。只要它不是正常的正则表达式。
的第一个参数map
是输入(在这种情况下$request_method
)。根据匹配,在映射的第二个参数中创建一个新变量(在本例$one
中为$two
, $three
, $four
(您可以根据需要命名)),其中包含匹配的'…'
内容。
more_set_headers 'Access-Control-Allow-Origin: $one';
more_set_headers 'Access-Control-Allow-Credentials: $two';
more_set_headers 'Access-Control-Allow-Headers: $three';
more_set_headers 'Access-Control-Allow-Methods: $four';
未经测试。
推荐阅读
- reactjs - 我可以向 React Native 导航按钮添加动画吗?
- python - 删除 view.py 中的个性化类 - Django
- flutter - flutter web 在启动时崩溃,日志中没有错误
- android - 小安卓通知
- reactjs - 使用 React Router 更新状态
- webpack - 如何使用可读的包构建 Nextjs?
- react-native - 如何使用 expo build:web 禁用生成源地图
- c# - 使用编码字符串发布请求
- reactjs - 如何使用 React Native 键入包含图标的按钮?
- reactjs - 尽管在 header 中设置了有效的 JWT,但来自 axios 的 Post Request 总是返回 Unauthorized / Axios Deletes Headers