1 / 30

HTTP and Apache

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

feng
Download Presentation

HTTP and Apache

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. HTTP and Apache Roy T. Fielding eBuilt, Inc. The Apache Software Foundation fielding@apache.org

  2. 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

  3. HTTP Basics Web architecture • Layered-client-server • Uniform “resource” interface • Simple, but powerful • Semantics are visible to intermediaries • HTTP extends interface across network

  4. 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> …

  5. 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

  6. 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

  7. 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

  8. 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

  9. 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

  10. 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

  11. 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> …

  12. 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> …

  13. 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> …

  14. 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> …

  15. 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

  16. 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/*

  17. 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

  18. 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

  19. Request Processing src/main/http_request.c • Access control • Directory walk • Location walk • File walk • Handler selection • Field pre-processing • Content Handler

  20. 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)

  21. 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

  22. 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

  23. 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

  24. 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”

  25. Send Body • Body • File • Buffer • IO-layer • Transfer-encoding • Length delimited • Chunked • Connection terminated

  26. Connection management • Persistent connections • The big hairy if • ap_set_keepalive(r) • Connection tear-down • Lingering close

  27. 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

  28. 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

  29. 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

  30. 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/

More Related