Table of Contents
Access-Control-Allow-Origin). Hôm trước sinh viên mình dạy trong lúc cần xuất style GeoServer và Label cho đối tượng cũng gặp lỗi này khi chạy tool của mình.
http://dev.dothanhlong.org/phpsld/[caption id="attachment_1580" align="alignnone" width="1280"] Sửa lỗi Cross domain (Access-Control-Allow-Origin) đối với GeoServer/Tomcat[/caption] Cách fix thì mình đã có cách cho cả 2 cách cài là thông qua GeoServer Web Archive hoặc GeoServer Installer
Fix lỗi Access-Control-Allow-Origin cho GeoServer khi cài bằng GeoServer Web Archive (Thông qua Tomcat cài riêng)
https://dothanhlong.org/sua-loi-cors-no-access-control-allow-origin-header-tomcatgeoserver/Fix lỗi Access-Control-Allow-Origin cho GeoServer khi cài bằng GeoServer Window Installer (File *.exe)
https://q2a.dothanhlong.org/?qa=19/enabling-cors-in-geoserver-jetty&show=24#a24Tuy nhiên, cả 2 cách này đều là khi mình deploy GeoServer trên Window. Nay mình đã setup GeoServer trên VPS Linux của mình thì cũng gặp lỗi trên, tuy nhiên mình sửa cấu hình Tomcat tương tự như trên Window thì lại không được. Thế là nảy sinh ý dùng proxy để sửa lỗi Access-Control-Allow-Origin. Trước mình cũng dùng proxy để lấy GetFeatureInfo từ WMS của QGISCloud và ok. Nay dùng lại.
Cách sử dụng proxy để bypass Access-Control-Allow-Origin
Đầu tiên download file proxy.php mình đã custom lại ở đâyhttps://drive.google.com/open?id=1NwBlRN3k8cx2dsWQ4k0WtrnPyhYOuh6x
Đối với Openlayers 2
Khai báo dòng sau ở đầu file js bạn khai báo mapOpenLayers.ProxyHost = "proxy.php?url=";
Đối với gọi Ajax
Thêm vào trước url gọi ajax, còn url thì lại là tham số của url trong proxy, ví dụ đối với mìnhhttp://dev.dothanhlong.org/phpsld_v2/proxy.php?url=http%3A%2F%2Fdev.dothanhlong.org%3A8080%2Fgeoserver%2Fdothanhlong%2Fwms%3Fservice%3DWFS%26version%3D1.0.0%26request%3DDescribeFeatureType%26typename%3Ddothanhlong%3Avn_provinces%26outputformat%3Dapplication%2Fjson&_=1536310016387
Lưu ý
Tham số url trong proxy phải được encode trước khi truyền vào proxy, nếu không GeoServer sẽ báo lỗihttps://meyerweb.com/eric/tools/dencoder/[caption id="attachment_1579" align="alignnone" width="1271"] Get Json form GeoServer[/caption]
Lưu ý 2:
Khi gọi Ajax để get json thông qua proxy (như hình trên) thì kết quả nhận được sẽ là chuỗi chứ không phải json object như bình thường. Vì vậy chúng ta phải có một bước convert string 2 json nữahttps://q2a.dothanhlong.org/?qa=138/javascript-string-to-json&show=138#q138Vậy là xong. Giờ người nông dân lại đi fix lại cái PHP SLD của mềnh đây :v [caption id="attachment_1588" align="alignnone" width="1280"] Tool make style SLD for GeoServer[/caption] Hi vọng giúp được một số nhỏ mọi người^^ -soiqualang-chentreu- ]]>