300 likes | 480 Views
HTTP and Apache. Roy T. Fielding eBuilt, Inc. The Apache Software Foundation fielding@apache.org. Overview. HTTP Basics Apache httpd architecture Connection management (listening) Request Reading Finding a representation Conditional request evaluation Response Writing
E N D
HTTP and Apache Roy T. Fielding eBuilt, Inc. The Apache Software Foundation fielding@apache.org
Overview • HTTP Basics • Apache httpd architecture • Connection management (listening) • Request Reading • Finding a representation • Conditional request evaluation • Response Writing • Connection management (closing) • Future Improvements • waka/2.0
HTTP Basics Web architecture • Layered-client-server • Uniform “resource” interface • Simple, but powerful • Semantics are visible to intermediaries • HTTP extends interface across network
HTTP Message Syntax GET /Test/hello.html HTTP/1.1\r\n Host: kiwi.ics.uci.edu:8080\r\n User-Agent: GET/7 libwww-perl/5.40\r\n \r\n HTTP/1.1 200 OK\r\n Date: Thu, 09 Mar 2000 15:40:09 GMT\r\n Server: Apache/1.3.12\r\n Content-Type: text/html\r\n Content-Language: en\r\n Transfer-Encoding: chunked\r\n Etag: “a797cd-465af”\r\n Cache-control: max-age=3600\r\n Vary: Accept-Language\r\n \r\n 4090\r\n <HTML><HEAD> …
Request Envelope GET /Test/hello.html HTTP/1.1\r\n Host: kiwi.ics.uci.edu:8080\r\n User-Agent: GET/7 libwww-perl/5.40\r\n \r\n
Request Control Data GET /Test/hello.html HTTP/1.1\r\n Host: kiwi.ics.uci.edu:8080\r\n User-Agent: GET/7 libwww-perl/5.40\r\n \r\n
Request Metadata GET /Test/hello.html HTTP/1.1\r\n Host: kiwi.ics.uci.edu:8080\r\n User-Agent: GET/7 libwww-perl/5.40\r\n \r\n
Request Metadata POST /nasdaq/trade.php HTTP/1.1\r\n Host: www.datek.com\r\n User-Agent: poseur/1.0 libwww/3.1\r\n Content-type: www/x-urlencoded\r\n Content-length: 58\r\n \r\n Ticker=LNUX&quantity=140&action=sell &type=limit&amt=298.00
Request Data POST /nasdaq/trade.php HTTP/1.1\r\n Host: www.datek.com\r\n User-Agent: poseur/1.0 libwww/3.1\r\n Content-type: www/x-urlencoded\r\n Content-length: 58\r\n \r\n Ticker=LNUX&quantity=140&action=sell &type=limit&amt=298.00
Request Data GET /Test/hello.html HTTP/1.1\r\n Host: kiwi.ics.uci.edu:8080\r\n User-Agent: GET/7 libwww-perl/5.40\r\n \r\n
Response Envelope GET /Test/hello.html HTTP/1.1\r\n Host: kiwi.ics.uci.edu:8080\r\n User-Agent: GET/7 libwww-perl/5.40\r\n \r\n HTTP/1.1 200 OK\r\n Date: Thu, 09 Mar 2000 15:40:09 GMT\r\n Server: Apache/1.3.12\r\n Content-Type: text/html\r\n Content-Language: en\r\n Transfer-Encoding: chunked\r\n Etag: “a797cd-465af”\r\n Cache-control: max-age=3600\r\n Vary: Accept-Language\r\n \r\n 4090\r\n <HTML><HEAD> …
Response Control Data GET /Test/hello.html HTTP/1.1\r\n Host: kiwi.ics.uci.edu:8080\r\n User-Agent: GET/7 libwww-perl/5.40\r\n \r\n HTTP/1.1 200 OK\r\n Date: Thu, 09 Mar 2000 15:40:09 GMT\r\n Server: Apache/1.3.12\r\n Content-Type: text/html\r\n Content-Language: en\r\n Transfer-Encoding: chunked\r\n Etag: “a797cd-465af”\r\n Cache-control: max-age=3600\r\n Vary: Accept-Language\r\n \r\n 4090\r\n <HTML><HEAD> …
Response Metadata GET /Test/hello.html HTTP/1.1\r\n Host: kiwi.ics.uci.edu:8080\r\n User-Agent: GET/7 libwww-perl/5.40\r\n \r\n HTTP/1.1 200 OK\r\n Date: Thu, 09 Mar 2000 15:40:09 GMT\r\n Server: Apache/1.3.12\r\n Content-Type: text/html\r\n Content-Language: en\r\n Transfer-Encoding: chunked\r\n Etag: “a797cd-465af”\r\n Cache-control: max-age=3600\r\n Vary: Accept-Language\r\n \r\n 4090\r\n <HTML><HEAD> …
Response Data GET /Test/hello.html HTTP/1.1\r\n Host: kiwi.ics.uci.edu:8080\r\n User-Agent: GET/7 libwww-perl/5.40\r\n \r\n HTTP/1.1 200 OK\r\n Date: Thu, 09 Mar 2000 15:40:09 GMT\r\n Server: Apache/1.3.12\r\n Content-Type: text/html\r\n Content-Language: en\r\n Transfer-Encoding: chunked\r\n Etag: “a797cd-465af”\r\n Cache-control: max-age=3600\r\n Vary: Accept-Language\r\n \r\n 4090\r\n <HTML><HEAD> …
Overview • HTTP Basics • Apache httpd architecture • Connection management (listening) • Request Reading • Finding a representation • Conditional request evaluation • Response Writing • Connection management (closing) • Future Improvements • waka/2.0
httpd Initialization • httpd core • apache-2.0/src/main/*.c • Initiate program • http_main.c • Read configuration files • http_config.c, http_core.c • Start logging • http_log.c • Start server listeners (MPM) • apache-2.0/src/modules/mpm/*
Connection management • Listening and Accept • mpm/prefork/prefork.c • mpm/mpmt_pthread.c • … • Connection set-up • src/main/http_connection.c • Modular hooks for protocol independence • ap_process_http_connection() • Calls ap_read_request()and we are finally at the level of HTTP
Request Reading src/main/http_protocol.c GET /Test/hello.html HTTP/1.1\r\n Host: kiwi.ics.uci.edu:8080\r\n User-Agent: GET/7 libwww-perl/5.40\r\n \r\n • Request Line • read_request_line(r) • Header fields • get_mime_headers(r) • Host determination • http_vhost.c
Request Processing src/main/http_request.c • Access control • Directory walk • Location walk • File walk • Handler selection • Field pre-processing • Content Handler
Request Body src/main/http_protocol.c • Declaration • ap_setup_client_block(r, policy) • Test • ap_should_client_block(r) • Read until done • ap_get_client_block(r, …) • Shortcut • ap_discard_request_body(r)
Finding a representation • Each content handler is responsible for associating the URI with a resource and applying the method, returning a representation as the response • Redirection • Negotiation • Subrequests • Errors
Conditional request evaluation • Conditional requests modify method processing depending on the current state of the resource representation • Last-Modified • Etag • Cache validation • If-Modified-Since • If-Nonematch • Prerequisites • If-Match • If-Unmodified-Since • Range-If • If
Response Writing HTTP/1.1 200 OK\r\n Date: Thu, 09 Mar 2000 15:40:09 GMT\r\n Server: Apache/1.3.12\r\n Content-Type: text/html\r\n Content-Language: en\r\n Transfer-Encoding: chunked\r\n Etag: “a797cd-465af”\r\n Cache-control: max-age=3600\r\n Vary: Accept-Language\r\n \r\n 4090\r\n <HTML><HEAD> … • Status code and reason phrase • Header fields • Body
Response Writing • Status code and reason phrase • r->status • r->status_line || status_lines[idx] • Header fields • r->headers_out • r->err_headers_out • Headers set by modules • mod_expires.c • mod_headers.c • Header set Author “John Q. Public”
Send Body • Body • File • Buffer • IO-layer • Transfer-encoding • Length delimited • Chunked • Connection terminated
Connection management • Persistent connections • The big hairy if • ap_set_keepalive(r) • Connection tear-down • Lingering close
Overview • HTTP Basics • Apache httpd architecture • Connection management (listening) • Request Reading • Finding a representation • Conditional request evaluation • Response Writing • Connection management (closing) • Future Improvements • waka/2.0
Future Improvements • Configurable protocol elements • Methods, status codes, field names • Tokenized field manipulation • Field name -> token • Field value -> linked list • Streaming IO Layers • Stacked protocol manipulation • Separate streams for data and metadata • Token streams • Bucket brigades • Strings, Files, Cache handles
waka/2.0 • A replacement for HTTP/1.x • Emphasizes the REST architectural style • Ideas from Spero’s HTTP-ng and W3C HTTP-NG • Packet streams • Control, meta-metadata, metadata, data • Prioritized bandwidth usage • Self-descriptive • All syntax an extensible standard • All cache rules in response • Simple quality of service indicators • Transport independent • Tokenized • Optimized for memory transfer
Questions? • Where to go for more information • http://www.ics.uci.edu/pub/ietf/http/ • http://www.ics.uci.edu/~fielding/talks/ • Places to see: • Front Door www.apache.org • Developer Notes dev.apache.org • PR Database bugs.apache.org • Apache Week www.apacheweek.com • O’Reilly Net www.oreilly.net/apache/