ArcGIS Server REST API - POST OPTIONS预检请求:405不允许使用方法

时间:2017-02-15 12:20:44

标签: firefox http-post esri arcgis-server preflight

我正在构建一个基于ArcGis Server的GIS Web应用程序,但我遇到了Firefox浏览器的问题。 我在JS开发了一个GIS Web应用程序,允许用户编辑要素图层(注意:调用ArcGis而不使用ESRI ArcGis API for JS)。

在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问题,我使用代理。 相反,为了确定实际请求是否可以安全发送,首先是预检" POST请求通过OPTIONS方法将HTTP请求发送到另一个域上的资源。

因此,考虑到ArcGIS Server仅接受POST请求以添加功能,并且考虑到Firefox首先发送OPTIONS方法,我在使用Firefox编辑功能层时遇到问题。 实际上,有以下要求:

服务器/ ArcGIS的/休息/服务/ layerName / FeatureServer / 0 / addFeatures

返回错误代码405(不允许使用方法)。

是否有解决此问题的解决方法或方法?特别是考虑到可能有一天,其他浏览器出于安全原因可以实现此OPTIONS请求。

2 个答案:

答案 0 :(得分:1)

有四种方法可以解决您的问题,每种方式都取决于您的服务器架构。 (第一种方式只是配置你的服务器,但另一种方法是使用现在支持.NET,PHP,Java的proxy page

  1. 如果您可以管理ArcGIS服务器。
  2. 如果您可以将代理页面与Web服务器放在同一个源中。 (这种方式将通过使用您的服务器请求到另一台服务器并且不再存在CORS问题来解决问题。)
    • 只需按照this
    • 中的步骤操作即可
  3. 如果必须将代理页放在另一个源中,则可以在托管代理页的服务器上启用CORS。
  4. 如果您必须将代理页面放在另一个来源中,则必须先编辑代理页面以接受并回复预检请求。 (这种方式将允许您的服务器处理预检请求并首先接受它们。)
    • 按照this
    • 中的步骤操作
    • 完成代理页面设置后,您需要编辑代理页面代码以接受和回复预检请求。请查看this

答案 1 :(得分:0)

我不知道为什么,但这在我们的应用程序中有效。

我们的应用是用react编写的,并且依赖于单独的后端API。

除非我们定义了REACT_APP_API_hostREACT_APP_API_protocol,否则我们将从ESRI底图中获得这405个。