使用代理

部署应用程序时,您可能需要使用代理。 Web AppBuilder 支持在下列情况下使用代理:

  • 访问跨域资源
  • 超过 2048 个字符的请求
  • 访问受基于令牌的身份验证保护的资源
  • OAuth 2.0 应用程序登录
  • 启用记录
  • 基于资源和 referer 的比率限制

默认情况下,已下载的应用程序使用由 ArcGIS Online 提供的代理。 可通过修改应用程序配置文件中的 httpProxy 属性来指定您自己的代理和规则。 httpProxy 属性包括以下特性:

属性描述

useProxy

布尔型。 可选。 默认:true。 如果为 false,则所有请求均不能使用代理。

url

字符串。 可选。 用于指定代理位置的 URL。 如果请求与任意代理规则均不匹配但必须使用代理(例如跨域请求),则会使用此代理。

alwaysUseProxy

布尔型。 可选。 指定是否始终将代理用于与 REST 端点进行通信。 默认:false。 如果请求与任意代理规则均不匹配且不需要代理,则应用程序会检查该属性,以确定如何进一步使用代理。 如果为 false,则请求不能使用引用 url 的代理。 如果为 true,则请求可以使用引用 url 的代理。

规则

Object[]。 可选。 为具有相同 URL 前缀的一组资源定义代理。 如果请求 URL 与规则匹配,则请求会通过代理发送。 每个规则具有两个属性:

  • urlPrefix - 字符串 - 需要通过给定代理访问的资源的 URL 前缀。
  • proxyUrl - 字符串 - 代理 URL。

警告:

useProxy 为 false 且请求超过 2048 个字符时,将发送 POST 请求代替 GET 请求。 此外,如果服务支持 CORS,则可以直接将 POST 请求成功发送到服务。 否则,POST 请求失败。 当 useProxy 为 true 且发送了 POST 请求时,如果服务不支持 CORS,则会通过代理自动发送 POST 请求。

下列内容介绍代理如何基于上述属性发挥作用:

  • 应用程序会检查 useProxy
    • 如果为 false,则所有请求均不能使用代理。
    • 如果为 true,则应用程序会检查 rules
      • 如果请求与代理规则匹配,则应用程序使用规则中设置的 proxyUrl
      • 如果请求与任意代理规则均不匹配但必须使用代理(例如跨域请求),应用程序则会使用引用了 url 的代理。
      • 如果请求与代理规则不匹配且不需要代理,则应用程序会进一步检查 alwaysUseProxy
        • 如果为 false,则请求不能使用引用 url 的代理。
        • 如果为 true,则请求可以使用引用 url 的代理。
代理图

示例:

"httpProxy": {
		"useProxy": true,
		"url": "http://gallery.chn.esri.com/arcgis/sharing/proxy",
		"alwaysUseProxy": false,
		"rules": [{
			"urlPrefix": "http://route.arcgis.com/",
			"proxyUrl": "resource-proxy-1.0/DotNet/proxy.ashx"
		}]
	}