我試圖將瀏覽器與提供服務器發送事件(SSE)的服務器連接。該服務器具有與原始域不同的域。例如,如果您撥打http://d1.example.com/page
此頁面將嘗試連接到http://d2.example.com/subscribe
上的SSE頻道。嘗試這樣做,會提示以下錯誤:SSE未捕獲錯誤:SECURITY_ERR:DOM異常18與提供服務器發送事件(SSE)的服務器
Uncaught Error: SECURITY_ERR: DOM Exception 18
就行了:
var source = new EventSource("http://d2.example.com/subscribe")
我該如何解決呢?
更新(即我已經嘗試瞭解決方案):
1 CORS
我加入Access-Control-Allow-Origin:*
到我的web服務d2.example.com
的頭部試圖CORS。它沒有解決EventSource
的問題,即使來自d1.example.com
的呼叫現在工作正常!我認爲SSE適用於正常的HTTP請求,那麼爲什麼它不適用於Chrome?
2-重定向
我使用的httpd服務器,所以我創建在通過上證所要求d2.example.com
d1.example.com
虛擬主機重定向規則。它與Firefox完美配合。另一方面,Chrome沒有提示任何錯誤,也沒有連接到SSE服務器。它看起來像是傾銷了整個EventSource
命令。它看起來像這樣的解決方案行不通,所以讓我們繼續前進......
3-反向代理
連接上d1.example.com/subscribe
兩種瀏覽器,其本質上是通過反向代理連接到d2.example.com
。但是,即使瀏覽器關閉,也不會捕獲on_close
事件。這是有道理的,因爲D2服務器現在正在與代理服務器建立通道。我如何將on_close
事件從代理服務器轉發到d2?
有什麼不同的方法可以使這項工作?
@Jack這是不一樣的問題。這個問題不需要文件。一個文件是很容易的,你可以做一個重定向規則作爲最壞的情況下或反向代理。上證所不會用這些解決方案。 – wael34218