ArcGIS Server REST API - POST OPTIONS 预检请求:405 方法不允许
Posted
技术标签:
【中文标题】ArcGIS Server REST API - POST OPTIONS 预检请求:405 方法不允许【英文标题】:ArcGIS Server REST API - POST OPTIONS preflight request: 405 Method not allowed 【发布时间】:2017-07-04 04:22:06 【问题描述】:我正在构建一个基于 ArcGis Server 的 GIS Web 应用程序,但我在使用 Firefox 浏览器时遇到了问题。 我正在用 JS 开发一个允许用户编辑要素图层的 GIS Web 应用程序(注意:在没有 ESRI ArcGis API for JS 的情况下调用 ArcGis)。
在 ArcGIS Server 中创建新记录的 HTTP POST 请求如下: http://server/arcgis/rest/services/layerName/FeatureServer/0/addFeatures
正如文档所述 (http://resources.arcgis.com/en/help/rest/apiref/fsadd.html),可以执行的操作 永久更改系统状态(添加、更新、删除)是仅 POST 操作。否则,将向客户端发送错误代码为 405(不允许方法)的相应错误消息。
在 Chrome 和 IE 中,为了运行这个 POST 请求并避免 CORS 问题,我使用了代理。 相反,Firefox 为了确定实际请求是否可以安全发送,首先“预检”POST 请求,通过 OPTIONS 方法向另一个域上的资源发送 HTTP 请求。
因此考虑到 ArcGIS Server 只接受 POST 请求来添加要素,并且考虑到 Firefox 首先发送一个 OPTIONS 方法,我在使用 Firefox 编辑要素图层时遇到了问题。 其实就是下面的请求:
server/arcgis/rest/services/layerName/FeatureServer/0/addFeatures
返回错误代码 405(不允许的方法)。
是否有解决此问题的解决方法或方法?特别是考虑到也许有一天,其他浏览器可能会出于安全原因执行此 OPTIONS 请求。
【问题讨论】:
如果您使用的是 JS API,这可能会得到处理,但既然您没有,这更像是一个纯 IT 问题,在 *** 上可能会更好地解决。 问题似乎出在 arcgis 服务器上,所以 mne 与 GIS 相关 其他 Access-Control-Allow-Origin: *,什么作为 Access-Control-Allow-Methods 和 Access-Control-Allow-Headers 传递? 【参考方案1】:有 4 种方法可以解决您的问题,每种方法都取决于您的服务器架构。 (第一种方法只是配置您的服务器,但另一种方法是使用现在支持 .NET、php、Java 的proxy page)。
-
如果您可以管理 ArcGIS 服务器。
尝试enable CORS on your server。
如果您可以将代理页面放在与您的 Web 服务器相同的来源。 (这种方式将通过使用您的服务器向另一台服务器请求来解决问题,并且不再存在 CORS 问题。)
只需按照this 中的步骤操作即可。
如果您必须将代理页面放在另一个来源,并且您可以在托管代理页面的服务器上启用 CORS。
Enable CORS on your server。
然后按照this中的步骤操作。
如果您必须将代理页面放在另一个来源,您必须先编辑代理页面以接受并回复预检请求。 (这种方式将允许您的服务器处理预检请求并首先接受它们。)
按照this 中的步骤操作。
完成代理页面设置后,您需要编辑代理页面代码以接受和回复预检请求。请看this。
【讨论】:
【参考方案2】:我不知道为什么,但这在我们的应用程序中有效。
我们的应用是用 react 编写的,并且依赖于单独的后端 API。
除非我们定义了 REACT_APP_API_host
和 REACT_APP_API_protocol
,否则我们会从 ESRI 底图中获得这些 405。
【讨论】:
以上是关于ArcGIS Server REST API - POST OPTIONS 预检请求:405 方法不允许的主要内容,如果未能解决你的问题,请参考以下文章
arcgis server10.2 rest服务query查询单图层 支持属性查询和空间查询
转换Arcgis Server REST接口实现OL2直接调用