Domino V12 起 notes.ini 支援多個 HTTPAdditionalRespHeader
為什麼這篇對你重要
Domino 站台要設安全 HTTP 標頭(HSTS、CSP、X-Frame-Options 等),組織通常會落在下列兩種設定模型之一:
- 走 Internet Site 文件 + Web Site Rules(站台規則) —— 圖形介面設定、可針對每個站台設不同政策。要設自訂 HTTP 標頭,用 Web Site Rule 文件。
- 走 Server 文件(不啟用 Internet Sites)+
notes.ini—— 比較簡單、整台伺服器一份設定。要設自訂標頭,只能用HTTPAdditionalRespHeader這個 notes.ini 參數。
走模型 2 的組織,notes.ini 是唯一的安全標頭設定點,不是後備而是日常。
走模型 1 的組織,notes.ini 也是當網頁伺服器(HTTP task)起不來、管理用戶端(admin client)進不去時的救火稻草。
兩種情境都會踩到同一個歷史限制:HTTPAdditionalRespHeader 從 9.0.1 FP6 引進以來,只支援一個標頭。寫第二行 HTTPAdditionalRespHeader=... 會直接覆蓋上一行(notes.ini 後寫贏前寫的特性),等於只能挑一個安全項目(X-Frame-Options 或 CSP,二選一),其他全裸。
HCL 在 Domino V12.0.x 起 用一個簡單的命名規則把這個限制拿掉了。
舊寫法(單一)
HTTPAdditionalRespHeader=X-Frame-Options: SAMEORIGIN第二行的 HTTPAdditionalRespHeader=... 會把第一行覆蓋掉,因此事實上只能設一個。要在站台沒起來的情況下同時開 HSTS、CSP、X-Frame-Options,這條路是走不通的。
新寫法(V12.0.x 起,可放多個)
第一個標頭維持原語法(不加編號),其餘標頭用 兩位數編號 從 01 開始:
HTTPAdditionalRespHeader=X-Frame-Options: SAMEORIGINHTTPAdditionalRespHeader01=X-XSS-Protection: 1; mode=blockHTTPAdditionalRespHeader02=Content-Security-Policy: default-src 'self'HTTPAdditionalRespHeader03=Strict-Transport-Security: max-age=31536000; includeSubDomainsHTTPAdditionalRespHeader04=X-Content-Type-Options: nosniff幾個重點:
- 編號從
01開始,不是1(兩位數,HTTPAdditionalRespHeader1會被忽略) - 編號順序不影響行為(Domino 全部讀進去),但連號
01/02/03比較好維護 - 改完要
tell http restart或重啟整個伺服器才生效 - 適用 HCL Domino 12.0.x 與更新版本(更舊的版本還是只能一個)
一份「最低安全標頭」基礎組
如果你站台目前完全沒設安全標頭,下面這 5 行先放進 notes.ini 就涵蓋了 SSL Labs / Mozilla Observatory 大多數的基本要求:
HTTPAdditionalRespHeader=Strict-Transport-Security: max-age=31536000; includeSubDomainsHTTPAdditionalRespHeader01=X-Frame-Options: SAMEORIGINHTTPAdditionalRespHeader02=X-Content-Type-Options: nosniffHTTPAdditionalRespHeader03=Referrer-Policy: strict-origin-when-cross-originHTTPAdditionalRespHeader04=Content-Security-Policy: default-src 'self'; img-src 'self' data: https:; style-src 'self' 'unsafe-inline'CSP 那行幾乎一定要按你站台實際情況調整 —— unsafe-inline(允許行內樣式)嚴格說不應該開,但很多 Notes 網頁應用的行內樣式很多,先求站台不破再慢慢收斂。HSTS 的 max-age=31536000 是一年,第一次上線建議先放小一點(例如 300 五分鐘)試水溫,確定全 HTTPS 化沒問題再拉長。
兩種模型的取捨
如果你的環境有啟用 Internet Sites,Web Site Rules 在大部分情境下還是比較適合長期管理,因為:
- 可以針對每個站台設不同政策(
*.example.com跟api.example.com可以套不同規則) - 變更歷史看得出來(誰改了、什麼時候改)
- 改完只要
tell http refresh,不用tell http restart—— refresh 不會踢掉使用者連線也不清快取,比較溫和
如果你的環境只用 Server 文件、沒啟用 Internet Sites,那 notes.ini 本來就是你唯一的選擇。V12 的多標頭支援是真正的功能解鎖,不是「後備路徑的補丁」。
注意 tell http refresh 跟 tell http restart 觸發的範圍不同:
tell http refresh只重讀 Web Site 文件(含站台規則、檔案保護、認證範圍)tell http restart才會重讀 Server 文件、notes.ini、HTTPD.CNF、Servlets
所以這次改 notes.ini 的 HTTPAdditionalRespHeader 一定要 tell http restart 才會生效。
參考來源
- KB0124025 — How to apply multiple HTTPAdditionalRespHeader in notes.ini (HCL Software Customer Support)
- KB0038786 — HTTPAdditionalRespHeader notes.ini parameter (HCL Software Customer Support)
- Notes.ini Entry — HTTPAdditionalRespHeader (admincamp.de)
- KB0100440 — Difference between 'Tell HTTP Restart' and 'Tell HTTP refresh' commands (HCL Software Customer Support)