1. 程式人生 > >Arcgis Server中跨域問題的解決辦法

Arcgis Server中跨域問題的解決辦法

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

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