我使用 Nginx 作為 Web 服務器。這是我的nginx.conf檔案:
server {
listen 80;
root /usr/share/nginx/html;
index index.html index.htm;
location ^~ /start/ {
add_header 'Cross-Origin-Embedder-Policy' 'require-corp';
add_header 'Cross-Origin-Opener-Policy' 'same-origin';
try_files $uri $uri/ /index.html;
}
location / {
try_files $uri $uri/ /index.html;
}
}
當我在瀏覽器上打開此鏈接時,在回應標頭部分的網路選項卡中看不到標頭:
https://example.com/start/629852d359d2a400034698a2

uj5u.com熱心網友回復:
實際上add_header指令作業正常。很可能沒有添加標頭,因為您的服務器上沒有檔案或目錄,因此根據最后一個指令引數/usr/share/nginx/html/start/629852d359d2a400034698a2重寫請求,這反過來由您處理(因為新的 URI 不以前綴開頭),并且該位置沒有設定任何額外的標題。/index.htmltry_fileslocation / { ... }/start/
通常,如果這些/start/前綴 URI 可以是內部應用程式路由或外部資產鏈接,則可以使用map塊來評估所需的標頭值來解決此問題:
map $uri $add_policies {
~^/start/ 1;
# default value will be an empty string, unless specified explicitly
}
map $add_policies $embedder_policy {
1 require-corp;
}
map $add_policies $opener_policy {
1 same-origin;
}
server {
...
location / {
add_header Cross-Origin-Embedder-Policy $embedder_policy;
add_header Cross-Origin-Opener-Policy $origin_policy;
try_files $uri $uri/ /index.html;
}
}
此解決方案基于add_header行為,即如果提供的值為空字串,則根本不將指定的標頭添加到回應中。
但是,如果您確定應該添加這些標頭的 URI 是應用程式路由,而不是指向物理現有檔案的鏈接,那么您還有一個選擇:
server {
...
location ^~ /start/ {
set $embedder_policy require-corp;
set $origin_policy same-origin;
rewrite ^ /index.html last;
}
location / {
add_header Cross-Origin-Embedder-Policy $embedder_policy;
add_header Cross-Origin-Opener-Policy $origin_policy;
try_files $uri $uri/ /index.html;
}
}
該解決方案的性能應該更高一些,因為它不需要(某種昂貴的)PCRE 庫呼叫來執行正則運算式匹配操作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/487227.html
