|  | Reverse HTTP | 
|  |  | 
|  | The HTTP server paradigm is a valuable abstraction for browsing and accessing data and applications in a RESTful fashion from thin clients or | 
|  | other applications.  However, when it comes to mobile devices, the server paradigm is often not available because those devices exist on | 
|  | restricted networks that do not allow inbound connections.    These devices (eg. phones, tablets, industrial controllers, etc.) often have | 
|  | signficant content (eg. photos, video, music, contacts, etc.) and services (eg. GPS, phone, modem, camera, sound) that are worthwile to access | 
|  | remotely and often the HTTP server model is very applicable. | 
|  |  | 
|  | The Jetty reverse HTTP module provides a gateway that efficiently allows HTTP connectivety to servers running in outbound-only networks.  There are two key components: | 
|  |  | 
|  | The reverse HTTP connector is a jetty connector (like the HTTP, SSL, AJP connectors) that accepts HTTP requests for the Jetty server instance.  However, the reverse HTTP connector does not accept inbound TCP/IP connections.  Instead it makes an outbound HTTP connection to the reverse HTTP gateway and uses a long polling mechanism to efficiently and asynchronously fetch requests and send responses. | 
|  |  | 
|  | The reverse HTTP gateway is a jetty server that accepts inbound connections from one or more Reverse HTTP connectors and makes them available as normal HTTP targets. | 
|  |  | 
|  | To demonstrate this from a source release, first run a gateway instance: | 
|  |  | 
|  | cd jetty-reverse-http/reverse-http-gateway | 
|  | mvn exec:java | 
|  |  | 
|  | In another window, you can run 3 test servers with reverse connectors with: | 
|  |  | 
|  | cd jetty-reverse-http/reverse-http-connector | 
|  | mvn exec:java | 
|  |  | 
|  |  | 
|  | The three servers are using context path ID's at the gateway (virtual host and cookie based mappings can also be done), so you can access the | 
|  | three servers via the gateway at: | 
|  |  | 
|  | http://localhost:8080/gw/A | 
|  | http://localhost:8080/gw/B | 
|  | http://localhost:8080/gw/C | 
|  |  | 
|  |  |