2014-09-03 356 views
0

我們有一個web服務,主要是通過jquery的$ .ajax()從javascript中調用。當我們從javascript中調用方法時,我們在請求頭中設置了一個安全令牌。如果它不存在,或者它沒有驗證,我們會返回未經授權的錯誤。在URL中設置請求標頭?

而這一切都工作正常。

但現在我們正面臨着返回的圖像文件。因此不是JavaScript調用$。阿賈克斯(),我們在DOM中嵌入圖片標籤:

<img src='http://mywebservice/imagescontroller/getAnImage?imageid=123'/> 

當我們做到這一點,我們沒有我們的請求頭安全令牌。我可以想到兩個「簡單」修復。 1.,我們只是允許匿名訪問我們的圖片網址,或者2.我們將安全令牌作爲URL參數傳遞。

第一個選擇當然不是一個好主意。第二個足夠簡單。但在我決定採用這種方法之前,我想知道是否有一些簡單的方法可以在這些請求上設置請求標頭,這是我錯過了。

想法?

+0

您可以使用AJAX獲取圖像數據,然後在'image.src'中放入'data:base64,...'URL。 – Barmar 2014-09-03 22:17:52

+0

這是一個有趣的想法。 – 2014-09-03 22:38:54

回答

1

簡單修復:使用會話cookie。這是一個沒有到期日的cookie。它會自動傳輸每個請求,並在用戶關閉瀏覽器時立即離開,或者通過javascript刪除cookie。

您只需將您的令牌存儲在那裏,並免費將其發送到您的服務器代碼。

有一些演示的東西在這裏: How do I set/unset cookie with jQuery?

如果您運行的另一個域的業務,你將需要使用CORS使AJAX運行 - 否則你的AJAX會碰到同源策略。使用CORS你甚至可以使餅乾工作。

在這裏看到:CORS request - why are the cookies not sent?

如果你不想使用CORS,你也可以通過反向代理納入服務領域到自己。這將解決SOP問題,並可能使用Cookie。在Apache中設置反向代理非常簡單。

+0

Cookie在瀏覽器和服務該頁面的服務器之間來回傳遞。我們的網站服務位於一個單獨的網站上。 – 2014-09-03 22:38:24

+0

你知道你會碰到AJAX的同源策略嗎?也就是說,除非你使用CORS來修補它。如果你必須使用CORS,你也可以得到cookies:http://stackoverflow.com/questions/8863571/cors-request-why-are-the-cookies-not-sent – 2014-09-04 06:17:51

+0

或者你可以做到這一點老式的方式,並通過您的主域名的某個路徑下的反向代理隱藏其他域名。說'domain.com/services/*'反向代理'otherdomain.com/bla'。這種方式既不會出現SOP,也不會對Cookies有任何問題。 – 2014-09-04 06:20:34