1. 程式人生 > >js跨域訪問,No ‘Access-Control-Allow-Origin‘ header is present on

js跨域訪問,No ‘Access-Control-Allow-Origin‘ header is present on

在本地用ajax跨域訪問請求時報錯:

 

XMLHttpRequest cannot loadhttp://www.zjblogs.com/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.

 

查了一翻資料,發現原來是新W3C標準中是這樣規定的:

 

最新的W3C標準裡是這麼實現HTTP跨域請求的, Cross-Origin Resource Sharing


 

簡單的來說,就是跨域的目標伺服器要返回一系列的Headers,通過這些Headers來控制是否同意跨域。這些Headers有:4 Syntax

 

 

 

在 Request 包和 Response 包中都有一些。

其中最敏感的就是 Access-Control-Allow-Origin 這個 Header, 他是W3C標準裡用來檢查該跨域請求是否可以被通過。 (Access Control Check)

跨域實現的過程大致如下:

從 http://www.a.com/test.html 發起一個跨域請求,

請求的地址為: http://www.b.com/test.php

如果 伺服器B返回一個如下的header

Access-Control-Allow-Origin: http://www.a.com

那麼,這個來自 http://www.a.com/test.html 的跨域請求就會被通過。

 

如上所知,總結解決辦法如下:

 

1、如果請求的url是aspx頁面,則需要在aspx頁面中新增程式碼:Response.AddHeader("Access-Control-Allow-Origin", "*");

 

2、如果請求的url是PHP頁面,則需要在PHP頁面中新增程式碼:header("Access-Control-Allow-Origin: *");

 

3、如果請求的url是靜態的html頁面,則需要在頁面中新增meta標籤程式碼:<meta http-equiv="Access-Control-Allow-Origin" content="*" />

 

如果伺服器端可以確定是要被哪些域名訪問,最好是能把以上程式碼中的“*”代替為具體的域名,這樣做可以相應的增強安全性。

 

 

轉自: http://zjblogs.com/js/Access-Control-Allow-Origin.html