The ArcGIS JavaScript API provides a proxy page that you may use to handle communication with the ArcGIS Server services you use in your application. The proxy page consists of server-side code that runs on your Web server. The browser sends the request to your proxy, and your proxy in turn forwards the request to the ArcGIS Server service.
You may wish to use the proxy page in your application in either or both of these two situations:
To handle these situations, your application can have client browsers send service requests to the proxy page running on your Web server. Your proxy page then sends the requests to the ArcGIS Server service. In the first case above, the application only needs to use the proxy when the URL length exceeds 2000 characters. In the second case, the proxy page is always used. Since the proxy requires extra time and resources on your server, you should use the proxy page only when your application requires it.
To use the proxy page, you need to perform the following steps. These are described in detail below.
Step three is critical for applications that use tokens. If you do not secure the application correctly, then the ArcGIS Server services used by the application are vulnerable to unlimited use by unauthorized persons. See the section on securing the application below for further information.
Here are some technical details on the proxy page for interested readers. In the first situation described earlier, with lengthy URLs, the proxy page allows the browser to perform a POST request rather than the GET request that the browser would normally do with service requests. A POST request does not have the same relatively low limit on amount of data sent as does a GET request. However, for security reasons, browsers are not allowed to POST except back to the server that sent the page to the browser. Hence the proxy page must run on the same Web server where your application runs. In the second situation, the authentication token is configured in the proxy page, rather than in the HTML page downloaded by the client. The browser sends a request (by either GET or POST) to the proxy page. The proxy page then appends the token to the request and forwards the request to the ArcGIS Server computer, then returns the response to the browser. This way, the end user does not have access to the token. This can provide enhanced security for the ArcGIS Server service, provided that the security measures described later in this page are implemented.
You must download the proxy page and include it in your Web application. The proxy page runs on your local Web server, not on an ESRI server or on the ArcGIS Server computer (unless your Web server also hosts the ArcGIS Server instance). Three proxy pages are available, each running on a specific server-side platform: ASP.NET, Java/JSP, and PHP. Your Web server must support one of these server-side platforms in order to use the proxy page. Download the appropriate page for your platform.
Unzip and save the proxy page to your Web application's folder. Then configure your application or server so that it will run the proxy page.
Configure the proxy page for the token.
For ASP.NET:
Examples
The mustMatch attribute in the containing <ProxyConfig> element controls whether only specified sites may be proxied. This attribute should generally be set to true. If set to false, then the proxy page will forward any request to any server. This could potentially allow your proxy page to be used to send requests to third-party servers without your permission.
For Java/JSP:
serverUrls variable. This represents the servers for which you want this JSP to act as a proxy.
It is a String array where each String has the following syntax: "<url>,<token>". The token is optional.
Add URLs to the services you want to access over here.
For PHP:
All users: for services with token-based authentication, the URL of the service should use HTTPS, for example, https://www.example.com/arcgis/rest/services/MyMapService/MapServer. This ensures that the token appended to the query string of the request is encrypted and cannot be intercepted and used by unauthorized parties. This would be especially important when the communication between your Web server and the ArcGIS Server service travels over the Internet, and not just on the local network.
In order for your application's page to send requests through the proxy, you must add code to the page as follows. In the startup function (e.g., OnPageLoad) in the JavaScript code of your page, add a line to set the proxy page. The following example is for the ASP.NET version; substitute proxy.jsp or proxy.php as appropriate. If your proxy page is not in the same directory as the Web application, adjust the path appropriately. The path should use a relative URL (e.g., ../proxy.ashx), or a URL relative to the root (e.g., /Proxy/proxy.ashx).
If you are using version 1.2 or lower, replace "esri.config" in the examples below with "esriConfig".
For ASP.NET:
esri.config.defaults.io.proxyUrl = "proxy.ashx";(Note: if you are using version 1.2 or lower, the syntax would be
esriConfig.defaults.io.proxyUrl = "proxy.ashx";
For Java/JSP:
esri.config.defaults.io.proxyUrl = "proxy.jsp"; //relative - if proxy.jsp is in the same application as the web pageOr
esri.config.defaults.io.proxyUrl = "http://samedomain:sameport/proxy/proxy.jsp"; //absolute - if proxy.jsp is in another application in the same domain
For PHP:
esri.config.defaults.io.proxyUrl = "proxy.php"; //relative - if proxy.php is in the same application as the web pageOr
esri.config.defaults.io.proxyUrl = "http://samedomain:sameport/proxy/proxy.php"; //absolute - if proxy.php is in another application in the same domain
Only if you are using the page with a service secured with tokens: add a statement to use the proxy for every request. Do not add this line if you only need to use the proxy when requests exceed the browser's limit on URL size (see above). If you add this line, the esriConfig.defaults.io.proxyUrl property must also be set.
esri.config.defaults.io.alwaysUseProxy = true;
If the alwaysUseProxy property is false (the default), the the proxy page will be used automatically if the Proxy property is set and the request exceeds 2000 characters.
This step is essential if the application uses services with token-based security, and the proxy page is configured with the token. If you do not secure the Web application, then anyone can send any request through your proxy page to the ArcGIS Server service, without using your application page. Your proxy page could be used for unauthorized disclosure of data from the service, or for inappropriate or high volume of use of the service.
To secure the Web application, you need do both of the following:
Once you have configured the proxy page with the application, test the application to ensure that requests are processed correctly. The application should function normally as it did before the proxy page was implemented. If not, you may need to troubleshoot the proxy. If your application environment supports debugging mode, you may be able to set breakpoint in the proxy page and detect whether it is operating correctly.
For example, in an IIS/ASP.NET environment, you can open the application in Visual Studio or Visual Web Developer Express, open the proxy.ashx page, and set a break point in the ProcessRequest method. Then run the application with Debug-Start. The execution should halt at the break point, and you should be able to detect where the problem lies. You may also be able to set break points in the JavaScript functions of your application, or insert alert() statements to display values during execution. As a last resort, remove the esriConfig.defaults.io.proxyUrl property value and start over.