2015-05-05 66 views
1

所以我有一個API部署在雲服務上。出於測試目的,我使用各種HTTP客戶端,如Postman,PawRestClient向我的API發送請求,他們都工作得很好。但是,當我從瀏覽器發送一個AJAX請求要麼jQueryreqwset或任何其他的,我得到以下錯誤:CORS ajax請求澄清

XMLHttpRequest cannot load { https://url/to/my/api/on/google-app-engine }. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin ' http://localhost:8000 ' is therefore not allowed access

那麼,爲什麼一個HTTP客戶端的工作,但瀏覽器將引發一個錯誤?如果我在服務器上啓用CORS,是否有風險?

回答

3

這是因爲網頁瀏覽器的「同源」政策。這可以防止一個網站上的腳本代表您在另一個網站上發出請求。

只要您信任允許的客戶端,啓用CORS是安全的,如果客戶端位於本地主機(可能不是這種情況,因爲您通常對本地主機沒有控制權)。

特殊情況:如果客戶端無法在服務器的域上執行更改,則一般情況下啓用CORS是安全的。

+0

因此,當我通過郵遞員發送請求時,我是否從同一來源發送郵件?不,它在我的本地計算機上。除非我不知道瀏覽器客戶端和非客戶端客戶端之間存在差異。 – paytonpy

+0

我對郵差不熟悉,但大多數客戶不會自動發送身份識別碼。網頁瀏覽器呢。因此,「愚蠢的」客戶沒有風險,但Web瀏覽器存在重大安全風險,因此對他們來說是同源策略。 – Arkanosis

+0

感謝您的更新,但AFAIK,CORS必須在服務器上啓用。如我錯了請糾正我。 – paytonpy