什么是跨域问题?
出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)
问题演示:
解决方案
ArcGis Server 的服务容器是Tomcat,所以我们要解决的其实是Tomcat的跨域问题!首先我们准备两个jar包cors-filter-1.7.jar和java-property-utils-1.9.1.jar,下面需要将jar包放到Tomcat的lib目录下。
寻找Tomcat目录:
- 打开任务管理器
- 寻找一个叫做ArcGisServer.exe的进程
- 右键打开文件位置
如果右键打开文件位置的路径为:C:\Program Files\ArcGis\Server\framework\etc\serivce\bin\ArcGisServer.exe,那么Tomcat的目录路径就应该是:C:\Program Files\ArcGis\Server\framework\runtime\tomcat。
找到Tomcat目录后,那么就按以下步骤操作:
- 将cors-filter-1.7.jar和java-property-utils-1.9.1.jar 这两个jar包复制到Tomcat 的lib目录下。
- 编辑Tomcat\conf\web.xml文件,在web-app标签内加入以下配置
<filter>
<filter-name>CORS</filter-name>
<filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
<init-param>
<param-name>cors.allowOrigin</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>cors.supportedMethods</param-name>
<param-value>GET, POST, HEAD, PUT, DELETE</param-value>
</init-param>
<init-param>
<param-name>cors.supportedHeaders</param-name>
<param-value>Accept, Origin, X-Requested-With, Content-Type, Last-Modified</param-value>
</init-param>
<init-param>
<param-name>cors.exposed.headers</param-name>
<param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
</init-param>
<init-param>
<param-name>cors.exposedHeaders</param-name>
<param-value>Set-Cookie</param-value>
</init-param>
<init-param>
<param-name>cors.supportsCredentials</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CORS</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
重启服务,解决问题!