Note | 關於本機IP訪問出現CORS跨域錯誤的問題

2022 APR 25

問題

在開發環境下運行nuxt.js應用的時候,終端提示從http://[本機IP地址]:4000/訪問,但是執行到需要axios的組件時,console卻提示CORS錯誤:

plainCopied!
Access to XMLHttpRequest at 'http://localhost:4000/[目標url]' from origin 'http://[本機IP地址]:4000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

之後將本機IP地址替換為127.0.0.1,問題照樣存在,直至換到http://localhost:4000/問題才總算解決。

CORS跨域錯誤

跨域錯誤是瀏覽器的同源策略引起的(並不是目標服務器的問題),指的是瀏覽器不能執行其他網站的腳本。 同源是指,域名、協議、端口均相同,三個只要有一個不同,就是跨域。 非跨域的情況:http://www.sample.comhttp://www.sample.com/destination(協議http,域名(包括子域名),端口是相同的)

三種訪問方法的區別

localhost127.0.0.1本機IP
網路不聯網不聯網聯網
傳輸不使用網卡使用網卡使用網卡
訪問本機訪問本機訪問本機和外部訪問

localhost只到達傳輸層,不會解析成IP(到達TCP/IP);

127.0.0.1到達網絡層,是IP,但不是網路IP,所以無法解析成MAC地址,以及從外部訪問。

解決

從錯誤信息可以看到,服務器的地址是http://localhost:4000/,和本機IP和127.0.0.1是不同源的,在開發環境下,如果沒有其他配置的話,會出現跨域錯誤。