我有一個擁有兩臺https服務器的站點。一個(前端)提供由靜態頁面組成的用戶界面。另一個(後端)提供微服務。他們恰好使用相同的(測試)X509證書來識別他們自己。單獨地,我可以通過https連接到它們,要求客戶端證書「tester」。CORS與客戶端https證書
我們通過一個nginx設置來隱藏CORS問題,使得前端和後端顯示它們是相同的Origin。我已經爲所有請求實現了頭部'訪問控制 - 允許 - 來源','訪問控制 - 允許 - 證書';使用方法,用於預檢檢查請求(OPTIONS)的標題。
在Chrome中,像這樣的跨網站工作得很好。我可以看到前端網址和後端網址是不同的網站。我看到OPTIONS請求在進行後端請求之前進行。
即使Chrome似乎並不需要它,但我確實找到了將用於執行請求的xmlhttprequest對象,並在其上執行了
xhr.withCredentials = true
,因爲這似乎是fetch.js在罩下執行的操作當它得到"credentials":"include"
。我注意到有一個xhr.setRequestHeader
函數可用,我可能需要使用它來使Firefox更快樂。- Firefox對於UI調用的行爲相同。但是對於所有的後端調用,我得到一個405.當它這樣做時,沒有到服務器的網絡連接。瀏覽器只是決定這是一個405而不執行任何https請求。儘管這是與Chrome不同的行爲,但這樣做有道理。前端UI和後端服務都需要選擇客戶端證書。當我連接到用戶界面時,我選擇了「測試儀」證書。當它發出後端請求時,它可以假設應該使用相同的客戶端證書來訪問後端。但也許它假設它可能會有所不同,並且還有一些我需要告訴Firefox。
裏面有人在這樣的雙向SSL證書組合使用CORS,並且有這個Firefox的問題,並固定在某個地方。我懷疑這不是服務器端修復,而是客戶需要做的事情。
你在Safari中測試過嗎?邊緣?知道它們與Firefox匹配會很有趣。這可能是你看到的行爲只發生在Chrome中。 Firefox的行爲似乎符合當前的規範。 – sideshowbarker