iT邦幫忙

1

(急)對內IP正常/ 對外IP 有CORS 錯訊

  • 分享至 

  • xImage

對內IP正常/
對外IP 有CORS policy blocked 錯訊

xhr = new XMLHttpRequest();
xhr.open("POST", URL, false);
xhr.send("Hello");

在send這邊錯訊:

Access to XMLHttpRequest at "URL" from origin "URL" has been blocked by CORS policy: The request client is not a secure context and the resource is in more-private address space 'local'

DOMException: Failed to execute 'send' on 'XMLHttpRequest': Failed to load "URL"
message:
"Failed to execute 'send' on 'XMLHttpRequest': Failed to load 'URL'."
name:
"NetworkError"

對內IP 成功
回應的header有包含Access-Control-Allow-Origin:*
明明完全一模一樣樣的東西....想哭阿....

請問各位大大 還能再檢查哪裡......

把這件前端JS做的事,放到後端去抓取另一部主機上的檔案並response回前端,就可以擺脫CORS的麻煩
感謝,但因為這是廠商給的js.....QQ
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

5
Ray
iT邦大神 1 級 ‧ 2023-05-23 11:56:35
最佳解答

加一條 Header 試試看:

Access-Control-Request-Private-Network: false

如果還不行, 那只好認真解了:

  1. 必須全程使用 SSL 傳輸
  2. SSL 憑證必須是有效
  3. Server 不能有轉 Port 的動作 (例如: port 80 -> port 3333)

這個現象來自 PNA:
W3C: Local Network Access
在內網可以, 是因為 Server 的 IP 位於 local 這個命名空間內, 所以 Chrome 放行.
一但 Server 的 IP 超出這個命名空間以外, 他就要求嚴格的 CORS.

dear 大大
感謝你的回覆
我在內網使用http 存取 https的通訊
對外還是給ip網址 不是給host網址
所以對外還是http 存取 https的通訊
被chrome cors錯誤
最後改成https 存取 https的通訊
成功了
之前是認為內網可以為甚麼外網不行
感謝你最後一段的解釋

3

因不清楚你內網的定義為何。就先暫定你是127.0.0.1

但你要知道瀏覽器的一些特性。如「本機安全性原則」
所以在瀏覽器能確定在本機運行下。如「localhost」或「127.0.0.1」
大多數的限制,都會被解除。畢竟這符合「本機」的定義。

自然會略過一些「本機安全性原則」的問題。

所以一般我都會建議開發盡量採用host的方式。且指定的IP不要是127.0.0.1。

froce iT邦大師 1 級 ‧ 2023-05-23 15:42:12 檢舉

我個人習慣是弄個環境變數,檢測目前是在debug模式還是在production模式,用不同的domain。

dear 星空大大
感謝您的回覆 原來如此!!!

dear f大大
感謝您的回覆 用js寫嗎???

我要發表回答

立即登入回答