Arcgis Server中跨域問題的解決辦法
阿新 • • 發佈:2018-11-07
arcgis server javascript api開發過程中,在跨域訪問字型、json、地圖服務等資源的時候,會遇到無法訪問的問題,如:“……blocked by CORS”,“……cannot load”,後面常跟一句“No ‘Access-Control-Allow-Origin’ is present on the requested resource”的錯誤。
解決辦法:需要跨域,使用CORS或Proxy。
以下步驟解決,針對4.8版本。
CORS
server端配置CORS
根據自己伺服器情況,參考https://enable-cors.org/js新增
require(["esri/config"], function(esriConfig) {
esriConfig.request.corsEnabledServers.push("<hostname>.<domain>:<port>");
});
如果你的伺服器和瀏覽器都支援CORS,以下就不用看了。如果你的伺服器或瀏覽器不支援CORS,則需要設定proxy解決跨域問題。
代理proxy
步驟:
- 下載代理
下載地址 https://github.com/Esri/resource-proxy
對應版本:
代理名 | 對應伺服器 |
---|---|
DotNet | IIS伺服器 |
Java/JSP | Apache Tomcat 伺服器 |
PHP | Apache伺服器 |
- 安裝代理
IIS伺服器中,整體拷貝到wwwroot下。或arcgis js api網站平級目錄下。轉換為應用程式。
這裡確保應用池的版本是4.0+,這裡使用的是ASP.NET v4.0,如果返回錯誤請仔細檢查應用程式池的問題。
訪問http://hostaddress:port/proxy.ashx?ping
在proxy.config檔案中,加入允許訪問的伺服器地址。
- 其中,mustMatch項推薦設定為“true”,因為這樣就可以保證所有的請求都必須要通過設定的serverUrls的過濾。如果設定為“false”,這將會允許一些請求直接通過。
- 如果地址需要ArcGIS全球賬戶的認證,那麼需要在url中加入使用者名稱和密碼資訊。
例如:<serverUrl url="http://services.arcgisonline.com" UserName="UserName" PassWord ="PassWord" matchAll="true"/>
前臺js新增
esriConfig.request.proxyUrl = "http://...";//其中proxyUrl是你部署到IIS下的路徑即可。
esriConfig.request.useProxy = false;//可不寫,預設為false