When you are sending a geometry to query a feature service, say for an intersection, the geometry is going to be large for a polygon. It will usually exceed the 2000 character limit for a get request. When it exceeds that limit, esri.request will send a post request, which requires the proxy, if you haven't specified that the server is CORS enabled.
However, I've noticed that sometimes adding a CORS server doesn't always work. (esri.config.defaults.io.corsEnabledServers.push("sampleserver1.arcgisonline.com");) It's safest to add to CORS and also have proxy...and let esri.request figure it out. It's better performance if the esri.request uses CORS.
Also to clarify, esri.request is being used by API calls like query a feature service.
http://help.arcgis.com/en/webapi/javascript/arcgis/jshelp/inside_esri_request.html
Check out this help topic and in particular
Under the Hood: Determining Which Dojo Method is Used
esri.request uses the appropriate method to execute a request based on the target of the request and what the browser supports. The native method to do AJAX requests is to use XMLHttpRequest(XHR). Because there are subtle differences in how XHR is implemented across browsers, Dojo abstracts away and addresses cross-browser inconsistencies via dojo.xhrGet and dojo.xhrPost. Dojo also provides methods in the dojo.io namespace to do AJAX-style requests with JSONP and to use an iframe to upload files.
esri.request sits on top of the methods defined by Dojo to provide a clean, simple way to execute AJAX-style requests. Depending on the arguments passed to esri.request, different Dojo methods are used. The following pseudocode is a rough outline of how esri.request works.
JSONP:
If JSONP request
If target on same domain
Convert to JSON request
Else If CORS available
Convert to JSON request
Else
If request size is 2000 characters or less
Call dojo.io.script.get
Else
Convert to JSON request
JSON / XML / plain text:
If JSON / XML / PlainText request
If target not on same domain && CORS not available
Rewrite request url to use proxy
If request size is 2000 characters or less
Call dojo.xhrGet
Else
Call dojo.xhrPost
http://help.arcgis.com/en/webapi/javascript/arcgis/jshelp/inside_defaults.html
esri.config.defaults.io.corsEnabledServers
Add URLs for servers with cross-origin resource sharing enabled to this array. Cross-Origin Resource Sharing (CORS) allows web applications to bypass the browser's same origin policy file and access resources or services on different servers/domains. When both the web server and browser support CORS, esri.request will not use a proxy to perform cross-domain requests. The API includes some Esri servers by default so it's important to push items on to this array rather than overwriting it.
dojo.addOnLoad(pageReady);
function pageReady(){
esri.config.defaults.io.corsEnabledServers.push("servicesbeta.esri.com");
esri.config.defaults.io.corsEnabledServers.push("server.organization.com");
}
At version 2.8, the list contains the following servers by default:
'www.arcgis.com',
'tiles.arcgis.com',
'services.arcgis.com'
At version 3.1 the following domains were added to the list:
'static.arcgis.com',
'utility.arcgis.com',
'geocode.arcgis.com'