4.5.1 解决跨域
我们在做前端开发时,想要调用一个不同IP或端口号的GeoServer时,往往会提示以下错误:
Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin'
这就是跨域问题。对于作为web archive(WAR)运行在应用程序服务器中的GeoServer,跨域问题是通过修改服务器配置来解决的。下面只介绍在独立运行的包括Jetty应用程序服务器的GeoServer, 启用跨域资源共享(CORS),以允许您自己域外的JavaScript应用程序使用GeoServer,只需要从webapps/geoserver/WEB-INF/web.xml文件中取消以下<filter>和<filter-mapping>两个节点元素的注释:
<web-app>
<filter>
<filter-name>cross-origin</filter-name>
<filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class>
<init-param>
<param-name>chainPreflight</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>allowedOrigins</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>allowedMethods</param-name>
<param-value>GET,POST,PUT,DELETE,HEAD,OPTIONS</param-value>
</init-param>
<init-param>
<param-name>allowedHeaders</param-name>
<param-value>*</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>cross-origin</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
但是,一般来说,在实际使用中往往会使用代理服务器,如Nginx,即搭建了集群,也顺道解决了跨域问题。