搜尋之下,發現原來這是 Same-Origin Policy 的限制,前端語言如 JavaScripts 只能透過 HTTP 發送到來自相同網域的 request !而且更要求 Protocol,Port,host 都要一樣,相當嚴格!但這樣子的限制也可能造成不便,且很多情況我們也需要運用到跨站存取,以下將會以 CORS 機制解決方法。
CORS 是 Server 端與 Client Browser 間溝通的機制。藉由加入新的 HTTP Header 使 Server 能提供服務給允許的來源,而 Client 端則會依照 Header 並檢查是否來源是被允許,以下為簡單的一個運用:
假設由 http://www.example-social-network.com 企圖去 access Online-personal-calendar.com 的 data。
Origin: http://www.example-social-network.com
而在 Online-personal-calendar.com 若有以下的 Acess-Control-Allow-Origin(ACAO) 那麼來自http://www.example-social-network.co 的存取請求將被允許相反則無。
Access-Control-Allow-Origin: http://www.example-social-network.com
而下方是全面開放的方式,但這並不是一個很好的方式,必須確認資料是 pulic content ,可以給任何人使用,舉例來說:Google 所提供的 Google Fonts 就可以用這樣子的政策,讓大家存取使用。
Access-Control-Allow-Origin: *
最後確認 access 的 server 有允許之後,其實就可以用 XMLHttpRequest 來存取該 Server 的服務了,當然這只是一種方式,而且也需要 client browser 有支援 CORS。
另外補充 JSONP 也是另一個 Cross Domain 的方式,但其可能會有遭受 XSS 攻擊的風險,但若有興趣可以查詢。
Reference:
沒有留言:
張貼留言