Proxy pages(代理页面)

proxy page 被用来绕过许多应用程序在访问不在同一个来源的资源时遇到的问题。

尽管启用和使用CORS是首选的方法,但还应该注意的是,如果出现以下情况,proxy page 仍然是必需的:

  • 浏览器或服务器不支持 CORS 或不支持 JSONP。
  • 需要匿名访问应用程序中的安全服务。

接下来使用案例来讨论何时适合使用 proxy。

示例:服务器未启用 CORS ,支持 JSONP。

在这种情况下,如果使用 GET 请求则不需要 proxy , 而使用 POST 请求需要 proxy 。一般来说,在以下情况可以看到:

  • 应用程序执行编辑
  • 请求返回的响应非常大

示例:服务器位于防火墙之后

可能有些情况下存在防止跨域访问的安全设置。在这些情况下,应始终使用代理页面。可以用 esriConfig.request.forceProxy 设置。

示例:构建用户对 ArcGIS 平台未知的应用

在某些情况下,您需要创建一个应用程序以允许匿名访问要素。一些高级要素包括路由,批处理地理编码和分析。在这种情况下,应用程序使用存储在 proxy 中的凭证登录到平台。

以下步骤详细介绍了如何开始使用代理。

获取 Proxy

proxy 在本地 Web 服务器上运行,而不是在 Esri 服务器或安装了 ArcGIS Server 的计算机上运行(除非您的Web服务器也托管ArcGIS Server实例)。可以下载三个代理,每个代理都针对特定的服务器端平台:

  • ASP.NET
  • Java/JSP
  • PHP

为您的平台下载适当的代理。每个代理下载都包含有关任何系统要求的安装说明和信息,请确保遵循这些说明,以便在Web服务器上设置和配置代理。

使用代理

为了使您的应用程序通过 proxy 路由请求,您必须将定义托管代理的位置的代码添加到您的应用程序。

  • 如果应用程序中的所有请求使用相同的代理,请使用 request 的 proxyUrl 属性指定位置。您还可以通过设置 request 的 forceProxy 属性指定请求是否始终使用代理。这迫使程序对所有的 AJAX 请求和 <img> 请求使用代理。
require(["esri/config"], function(esriConfig) {
  esriConfig.request.proxyUrl = "/resource-proxy/Java/proxy.jsp";
  esriConfig.request.forceProxy = true;
});
  • 也可以使用特定的 proxy 规则来配置您的应用程序。这些规则定义具有相同URL前缀的特定资源的 proxy 。当应用程序尝试通过此URL访问资源时,将通过指定的代理发送请求。request 的 proxyRules 属性是一个包含所有 proxy 规则的列表。使用 urlUtils.addProxyRule() 来添加 proxy 规则。
require(["esri/core/urlUtils"], function(urlUtils) {
  urlUtils.addProxyRule({
    urlPrefix: "route.arcgis.com",
    proxyUrl: "/resource-proxy/Java/proxy.php"
  });
});

测试并部署应用

一旦配置了应用程序的代理页面,测试应用程序以确保请求处理正确。应用程序应该像代理页面实现之前一样正常运行。如果不是,您可能需要排除代理故障。

  • 如果您的应用程序环境支持调试模式,则可以在代理页面中设置断点并检测其是否正常运行。例如,在IIS / ASP.NET环境中,可以在Visual Studio中打开应用程序,并在Proxy.ashx中的ProcessRequest方法中设置一个断点,然后以调试模式运行应用程序。执行应该在断点停止,你应该能够检测到问题出在哪里。您也可以在应用程序的JavaScript函数中设置断点,或插入控制台语句以在执行期间显示值。
  • 每个代理都有一个关联的 config 文件。将此文件中的 mustMath 属性设置为 false 以代理所有请求。如果应用程序现在可以工作,则可能没有在serverUrls部分列出服务,或者在serverUrl中可能有拼写错误。完成代理故障排除后,请不要忘记将此属性设置为true。

results matching ""

    No results matching ""