基於Cesium1.26地圖API下的GeoServer2.9.0服務器跨域設置

遇到的問題:web

 

  最近基於Cesium來作3D模型的地圖開發,在訪問本身發佈的WMS服務以後,遇到了GeoServer跨域問題。跨域

 

  調用這個WMS服務的時候,瀏覽器(我用Chrome)開發者工具報錯:瀏覽器

 

控制檯提示以下:服務器

  Font from origin 'http://xxxxxxxxxxxxx' has been blocked from loading by Cross-Origin Resource Sharing policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost' is therefore not allowed access.cors

 

這是由於服務端不容許跨域訪問所致使的問題。maven

 

解決方案:函數

 

一、下載官方的cors壓縮包,解壓獲得兩個jar包,兩個jar包文件放入geoserver目錄下web容器的類庫文件夾中。工具

 

二、打開geoserver目錄下web容器的中的xml配置文件。測試

 

三、添加過濾器代碼和過濾器路由代碼。spa

 

四、重啓geoserver。

 

ps:若是目錄中存在maven,須要在pom.xml中,添加一個依賴標籤。

 

pss:爲了服務你們,本人制做了壓縮包

 

psss:經本人測試,這個跨域訪問方法能夠應用於大多數服務器,不單單侷限於GeoServer

 

CORS(跨域資源共享)小課堂:

 

  CORS須要瀏覽器和服務器同時支持。目前,全部瀏覽器都支持該功能(IE瀏覽器不能低於IE10)。

 

  整個CORS通訊過程,都是瀏覽器自動完成,不須要用戶參與。瀏覽器一旦發現請求跨源,就會自動添加一些附加的頭信息,但用戶不會有感受。

 

  所以,實現CORS通訊的關鍵是服務器。只要服務器實現了CORS接口,就能夠跨源通訊。

  

  請求流程:

    一、在你發送任意請求時,瀏覽器會將CORS請求合併到http請求之中。具體來講,就是在頭信息之中,增長一個Origin字段。

    

    二、上面的頭信息中,Origin字段用來講明,本次請求來自哪一個源(協議 + 域名 + 端口)。服務器根據這個值,決定是否贊成此次請求。

 

    三、若是Origin指定的源,不在許可範圍內,服務器會返回一個正常的HTTP迴應。

 

    4.一、瀏覽器發現,這個迴應的頭信息沒有包含Access-Control-Allow-Origin字段,就知道出錯了,從而拋出一個錯誤,被XMLHttpRequestonerror回調函數捕獲。

 

    4.二、若是Origin指定的域名在許可範圍內,服務器返回的響應,會多出幾個頭信息字段。

    

 

    五、其中最重要的是Access-Control-Allow-Origin這個字段,這個字段規定了能夠獲得本資源的域,若是頭信息有此字段,這個字段與客戶端瀏覽器應該是同域的。

相關文章
相關標籤/搜索