Apache JServ Protocol explained

The Apache JServ Protocol (AJP) is a binary protocol that can proxy inbound requests from a web server through to an application server that sits behind the web server. AJP is a highly trusted protocol and should never be exposed to untrusted clients, which could use it to gain access to sensitive information or execute code on the application server.[1]

It also supports some monitoring in that the web server can ping the application server. Web implementors typically use AJP in a load-balanced deployment where one or more front-end web servers feed requests into one or more application servers. Sessions are redirected to the correct application server using a routing mechanism wherein each application server instance gets a name (called a route). In this scenario the web server functions as a reverse proxy for the application server. Lastly, AJP supports request attributes which, when populated with environment-specific settings in the reverse proxy, provides for secure communication between the reverse proxy and application server.[2] [3]

AJP runs in Apache HTTP Server 1.x using the plugin and in Apache 2.x using, and proxy balancer modules together. Other web server implementations exist for: lighttpd 1.4.59,[4] nginx,[5] Grizzly 2.1,[6] and the Internet Information Services.[7]

Web container application servers supporting AJP include: Apache Tomcat, WildFly (formerly JBoss AS), and GlassFish.

History

Alexei Kosut originally developed the Apache JServ Protocol in July 1997[8] but the version 1.0 specification was published later on July 29, 1998.[9] He also wrote the first implementations of it in the same month, with the releases of the Apache JServ servlet engine 0.9 and the Apache mod_jserv 0.9a (released on July 30, 1997).[10]

The specification was updated to version 1.1 on September 9, 1998.[11] Also in 1998, a revamped protocol was created and published in specification versions 2[12] and 2.1,[8] however it was never adopted.

In 1999, Sun Microsystems donated their JavaServer Web Development Kit (JSWDK; codenamed Tomcat) reference implementation to Apache Software Foundation. This became Apache Tomcat version 3.0, the successor to JSWDK 2.1, and derailed further development of Apache JServ servlet engine and AJP towards support of Java servlet API version 2.1.[13]

The current specification remains at version 1.3,[14] however there is a published extension proposal[15] as well as an archived experimental 1.4 proposal.[16]

See also

External links

Notes and References

  1. Web site: AJP File Read/Inclusion in Apache Tomcat (CVE-2020-1938) and Undertow (CVE-2020-1745) . Red Hat Customer Portal . 1 March 2020.
  2. Web site: NativeSPAttributeAccess. Shibboleth Consortium. 13 November 2017.
  3. Web site: Apache Module mod_proxy_ajp . Apache HTTP Server Project . 13 November 2017.
  4. Web site: Docs - Lighttpd - lighty labs . redmine.lighttpd.net . 14 July 2021.
  5. Web site: nginx_ajp_module: support AJP protocol proxy with Nginx . Weibin. Yao(姚伟斌) . 6 October 2017 . 9 October 2017 . GitHub.
  6. Web site: AJP . java.net . Grizzly 2.3 User's Guide . 2013-04-29.
  7. Web site: BonCode Apache Tomcat AJP 1.3 Connector . boncode.net . 9 October 2017.
  8. Web site: Barbieri . Federico . Fumagalli . Pierpaolo . Kluft . Ian . Korthof . Ed . Mazzocchi . Stefano . Pool . Martin . Apache JServ Protocol Version 2.1 . June 30, 1998 . Java Apache Project . https://web.archive.org/web/20030804213216/http://java.apache.org/jserv/protocol/AJPv21.html . 2003-08-04.
  9. Web site: Kosut . Alexei . Apache JServ Protocol Version 1.0 . July 29, 1998 . Java Apache Project . https://web.archive.org/web/20030415202643/http://java.apache.org/jserv/protocol/AJPv1.html . 2003-04-15.
  10. Web site: History of Changes - Apache JServ Project . Java Apache Project . https://web.archive.org/web/20030416024540/http://java.apache.org/jserv/changes.html . 2003-04-16.
  11. Web site: Kosut . Alexei . Apache JServ Protocol Version 1.1 . September 9, 1998 . Java Apache Project . https://web.archive.org/web/20030804080332/http://java.apache.org/jserv/protocol/AJPv11.html . 2003-08-04.
  12. Web site: Kluft . Ian . Korthof . Ed . Mazzocchi . Stefano . Apache JServ Protocol Version 2 . February 15, 1998 . Java Apache Project . https://web.archive.org/web/20030805035548/http://java.apache.org/jserv/protocol/AJPv2.html . 2003-08-05.
  13. Web site: The Origin Story of Tomcat . TechNotif . 2018-07-25.
  14. Web site: AJP Protocol Reference - AJPv13 . Apache Tomcat . 2016-08-20.
  15. Web site: AJP Protocol Reference - AJPv13 Extension Proposal . Apache Tomcat . 2016-08-20.
  16. Web site: AJPv14 Proposal . Apache Tomcat . 2019-05-06.