訪問localhost和127.0.0.1是否完全一樣?

在學習Ajax跨域請求方法jsonp時遇到了問題,明明跟教程中的方法完全一致,控制台卻總提示404。

我用的是wamp,使用默認埠80,根目錄下一共兩個文件:demo.html,server.php,通過它們來模擬ajax技術訪問伺服器從而更新頁面。

到這一步是成功的。

然後這樣模擬跨域:頁面是通過localhost/demo.html訪問的,我把ajax方法中的請求url由localhost/server.php?number=…改為127.0.0.1/server.php?number=…

經過很長時間的探索,終於解決了,解決方法是修改默認埠。我把Apache埠改為8080後,重新啟動服務,這次跨域請求成功了。

然後我又做了以下嘗試:改回80埠,我發現這時候通過localhost可以訪問demo.html頁面,但是127.0.0.1卻不行,會顯示404。而修改為8080埠時,通過localhost:8080和127.0.0.1:8080都可以訪問頁面。

這到底是為什麼呢?難道是80埠被佔用?但是為什麼只有127.0.0.1的80埠被佔用?還是說需要這樣寫才行:127.0.0.1:80,也就是說127.0.0.1不等於localhost,127.0.0.1:80才等於localhost?


建議先學習下 Host、HTTP 協議、計算機基礎網路,很多問題就不需要這樣猜測了。

localhost 等同 127.0.0.1 的實現是計算機默認初始化幫你加了一個 localhost 的 host 記錄綁定到了 127.0.0.1,因此它們等同。Host 綁定只是機器綁定,與埠無關,所以不存在 127.0.0.1:80 等同於 localhost 這種事情。

跨域失敗會有瀏覽器報錯,通常會先發送一個 method options 的請求去嘗試讀取伺服器端跨域的授權情況。而不會 404 報錯,http 404 表示網頁沒找到,很可能是你伺服器沒啟動或者頁面不存在。但是看到你說用 localhost 可以訪問,用 127.0.0.1 不能訪問,我懷疑有可能是你防火牆或者伺服器設置過濾掉了 127.0.0.1 的請求,因此返回了 404。


如果是因為跨域問題來問localhost與127.0.0.1的區別,可以看看《xxxxxx》。

如果是想了解域名系統啊,計算機網路啊什麼的,可以去看看《yyyyyy》。

404可能是別的原因產生的喲,比如你沒把那套服務跑正確。


localhost與127.0.0.1沒有必然的聯繫,只是約定俗成的用法。你可以更改host文件使localhost指向其它地址。

至於你的問題,信息不夠不好判斷。瞎猜一下,可能是你Apache或者網路相關的配置的問題。


其實是不一樣的

host文件里默認有一條localhost到127.0.0.1的記錄

開http伺服器的時候一般會有一條綁定的設置。

如果只綁定了localhost,使用ip是無法訪問到你的http伺服器的。所以才會有404


推薦閱讀:

知乎網站的性能都有些什麼瓶頸?可以以何種技術和方式解決?
學習Ajax,關於XMLHttpRequest對象是怎麼從後台和伺服器交換數據的不太理解?
如今的網站是否可以設計成只有一個html(內容框架),全站無跳轉?
phamtomjs能否得到js運行後的代碼並輸出到文檔?

TAG:前端開發 | Ajax | HTTP | 跨域 | JSONP |