Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Parlez-Vous HTTP?

Parlez-Vous HTTP?

Introduction to the HTTP protocol, complete with HTTP Status Cats

A4e17e6188fada503afd9f3ab81eea62?s=128

Frederic Jean

March 14, 2012
Tweet

More Decks by Frederic Jean

Other Decks in Technology

Transcript

  1. Parlez-Vous HTTP? Frédéric Jean Principal Software Engineer Snugg Home LLC

    1 Wednesday, March 14, 12
  2. Why talk about HTTP? 2 Wednesday, March 14, 12

  3. A brief history... 3 Wednesday, March 14, 12

  4. 1989-1990: Initial WWW prototype developed on NeXT workstation 4 Wednesday,

    March 14, 12
  5. 5 Wednesday, March 14, 12

  6. 1991: HTTP/0.9 released 6 Wednesday, March 14, 12

  7. 1996: HTTP/1.0 released as RFC 1945 7 Wednesday, March 14,

    12
  8. 1996: HTTP/1.1 draft introduced 8 Wednesday, March 14, 12

  9. 1997: HTTP/1.1 released as RFC 2068 9 Wednesday, March 14,

    12
  10. 1999: RFC 2616 Updates and improves HTTP/1.1 10 Wednesday, March

    14, 12
  11. What is HTTP? 11 Wednesday, March 14, 12

  12. 12 Wednesday, March 14, 12

  13. 12 Wednesday, March 14, 12

  14. 12 Wednesday, March 14, 12

  15. 12 Wednesday, March 14, 12

  16. 12 Wednesday, March 14, 12

  17. 12 Wednesday, March 14, 12

  18. HTTP Is... 13 Wednesday, March 14, 12

  19. Stateless HTTP Is... 13 Wednesday, March 14, 12

  20. Stateless Insecure HTTP Is... 13 Wednesday, March 14, 12

  21. Stateless Insecure Textual HTTP Is... 13 Wednesday, March 14, 12

  22. <Initial  line> <Headers> <Body> Message Format 14 Wednesday, March 14,

    12
  23. 15 Wednesday, March 14, 12

  24. 15 Wednesday, March 14, 12

  25. Request GET  /  HTTP/1.1 Host:  boulderjug.org User-­‐Agent:  Mozilla/5.0  (Macintosh;  Intel

     Mac  OS  X  10.7;  rv:8.0.1)  Gecko/ 20100101  Firefox/8.0.1 Accept:  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-­‐Language:  en-­‐us,en;q=0.5 Accept-­‐Encoding:  gzip,  deflate Accept-­‐Charset:  ISO-­‐8859-­‐1,utf-­‐8;q=0.7,*;q=0.7 Cookie:  __utma=1.709566692.1315366607.1322835520.1325736840.8;                  __utmz=1.1325736840.8.8.utmcsr=typepad.com|utmccn=(referral)| utmcmd=referral|utmcct=/site/blogs/6a010536bb2e9f970b010536bb2ea2970b/ posts;                  __qca=P0-­‐138304784-­‐1315366608389;                  __utmc=1 !" 16 Wednesday, March 14, 12
  26. Request Initial Line 17 Wednesday, March 14, 12

  27. GET  /  HTTP/1.1 18 Wednesday, March 14, 12

  28. GET  /  HTTP/1.1 19 Wednesday, March 14, 12

  29. HTTP Request Methods Method Safe Idempotent GET X X POST

    PUT X DELETE X HEAD X X OPTIONS X X CONNECT PATCH TRACE X X 20 Wednesday, March 14, 12
  30. GET  /  HTTP/1.1 21 Wednesday, March 14, 12

  31. GET  /  HTTP/1.1 22 Wednesday, March 14, 12

  32. Request Headers 23 Wednesday, March 14, 12

  33. Host:  boulderjug.org 24 Wednesday, March 14, 12

  34. User-­‐Agent:  Mozilla/5.0  (Macintosh;  Intel  Mac  OS  X  10.7;  rv:8.0.1)... 25

    Wednesday, March 14, 12
  35. Accept:  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-­‐Language:  en-­‐us,en;q=0.5 Accept-­‐Encoding:  gzip,  deflate Accept-­‐Charset:  ISO-­‐8859-­‐1,utf-­‐8;q=0.7,*;q=0.7 26

    Wednesday, March 14, 12
  36. Cookie:  __utma=1.709566692.1315366607.1322835520.1325736840.8;                

     __qca=P0-­‐138304784-­‐1315366608389;                  __utmc=1 27 Wednesday, March 14, 12
  37. Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== 28 Wednesday, March 14, 12

  38. Request Body PUT, POST, PATCH should have a body GET,

    HEAD, OPTIONS, TRACE, CONNECT should not 29 Wednesday, March 14, 12
  39. Request GET  /  HTTP/1.1 Host:  boulderjug.org User-­‐Agent:  Mozilla/5.0  (Macintosh;  Intel

     Mac  OS  X  10.7;  rv:8.0.1)  Gecko/ 20100101  Firefox/8.0.1 Accept:  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-­‐Language:  en-­‐us,en;q=0.5 Accept-­‐Encoding:  gzip,  deflate Accept-­‐Charset:  ISO-­‐8859-­‐1,utf-­‐8;q=0.7,*;q=0.7 Cookie:  __utma=1.709566692.1315366607.1322835520.1325736840.8;                  __utmz=1.1325736840.8.8.utmcsr=typepad.com|utmccn=(referral)| utmcmd=referral|utmcct=/site/blogs/6a010536bb2e9f970b010536bb2ea2970b/ posts;                  __qca=P0-­‐138304784-­‐1315366608389;                  __utmc=1 !" 30 Wednesday, March 14, 12
  40. 31 Wednesday, March 14, 12

  41. 31 Wednesday, March 14, 12

  42. Response HTTP/1.1  200  OK Server:  Apache X-­‐PhApp:  oak-­‐tp-­‐web026 X-­‐Webserver:  oak-­‐tp-­‐web026

    Vary:  cookie,Accept-­‐Encoding Content-­‐Encoding:  gzip Keep-­‐Alive:  timeout=300,  max=100 Content-­‐Type:  text/html;  charset=utf-­‐8 Content-­‐Length:  12033 Date:  Fri,  06  Jan  2012  05:48:59  GMT X-­‐Varnish:  3423770493 Age:  0 Via:  1.1  varnish <!DOCTYPE  html  PUBLIC  "-­‐//W3C//DTD  XHTML  1.0  Transitional//EN"   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-­‐transitional.dtd"> <html  xmlns="http://www.w3.org/1999/xhtml"  id="typepad-­‐standard"   xmlns:fb="http://www.facebook.com/2008/fbml"> ... </html> 32 Wednesday, March 14, 12
  43. Response Initial Line 33 Wednesday, March 14, 12

  44. aka: Status Line 34 Wednesday, March 14, 12

  45. HTTP/1.1  200  OK 35 Wednesday, March 14, 12

  46. HTTP/1.1  200  OK 36 Wednesday, March 14, 12

  47. HTTP/1.1  200  OK 37 Wednesday, March 14, 12

  48. HTTP/1.1  200  OK 38 Wednesday, March 14, 12

  49. 39 Wednesday, March 14, 12

  50. 40 Wednesday, March 14, 12

  51. 41 Wednesday, March 14, 12

  52. HTTP/1.1 202 Accepted Location: http://example.com/asynch/jobs/3332334 42 Wednesday, March 14, 12

  53. 43 Wednesday, March 14, 12

  54. HTTP/1.1 301 Moved Permanently Location: http://example.com/new_path 44 Wednesday, March 14,

    12
  55. 302 Found 45 Wednesday, March 14, 12

  56. HTTP/1.1 302 Found Location: http://example.com/new_path 46 Wednesday, March 14, 12

  57. 47 Wednesday, March 14, 12

  58. HTTP/1.1 307 Temporary Redirect Location: http://example.com/maintenance.html 48 Wednesday, March 14,

    12
  59. 49 Wednesday, March 14, 12

  60. 50 Wednesday, March 14, 12

  61. HTTP/1.1 401 Authorization Required Server: HTTPd/1.0 Date: Sat, 27 Nov

    2004 10:18:15 GMT WWW-Authenticate: Basic realm="Secure Area" Content-Type: text/html Content-Length: 311 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/ loose.dtd"> <HTML> <HEAD> <TITLE>Error</TITLE> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1"> </HEAD> <BODY><H1>401 Unauthorized.</H1></BODY> </HTML> 51 Wednesday, March 14, 12
  62. 52 Wednesday, March 14, 12

  63. 53 Wednesday, March 14, 12

  64. 54 Wednesday, March 14, 12

  65. 55 Wednesday, March 14, 12

  66. HTTP Response Headers 56 Wednesday, March 14, 12

  67. Server Information Resource Metadata Caching Hints 57 Wednesday, March 14,

    12
  68. Server:  Apache X-­‐PhApp:  oak-­‐tp-­‐web026 X-­‐Webserver:  oak-­‐tp-­‐web026 X-­‐Varnish:  3423770493 Via:  1.1

     varnish Server Information Headers 58 Wednesday, March 14, 12
  69. Resource Metadata Content-­‐Encoding:  gzip Content-­‐Type:  text/html;  charset=utf-­‐8 Content-­‐Length:  12033 Date:

     Fri,  06  Jan  2012  05:48:59  GMT 59 Wednesday, March 14, 12
  70. Caching Hints Vary:  cookie,Accept-­‐Encoding Age:  0 Cache-Control: max-age=600 Expires: Mon

    06 Oct 2008 12:43:48 GMT 60 Wednesday, March 14, 12
  71. Connection Headers Connection: close 61 Wednesday, March 14, 12

  72. HTTP Conditional Requests Server Client Last-Modified If-Modified-Since If-Unmodified-Since ETag If-None-Match

    62 Wednesday, March 14, 12
  73. Response HTTP/1.1  200  OK Server:  Apache X-­‐PhApp:  oak-­‐tp-­‐web026 X-­‐Webserver:  oak-­‐tp-­‐web026

    Vary:  cookie,Accept-­‐Encoding Content-­‐Encoding:  gzip Keep-­‐Alive:  timeout=300,  max=100 Content-­‐Type:  text/html;  charset=utf-­‐8 Content-­‐Length:  12033 Date:  Fri,  06  Jan  2012  05:48:59  GMT X-­‐Varnish:  3423770493 Age:  0 Via:  1.1  varnish <!DOCTYPE  html  PUBLIC  "-­‐//W3C//DTD  XHTML  1.0  Transitional//EN"   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-­‐transitional.dtd"> <html  xmlns="http://www.w3.org/1999/xhtml"  id="typepad-­‐standard"   xmlns:fb="http://www.facebook.com/2008/fbml"> ... </html> 63 Wednesday, March 14, 12
  74. 64 Wednesday, March 14, 12

  75. 64 Wednesday, March 14, 12

  76. 64 Wednesday, March 14, 12

  77. 64 Wednesday, March 14, 12

  78. 64 Wednesday, March 14, 12

  79. 64 Wednesday, March 14, 12

  80. Troubleshooting HTTP 65 Wednesday, March 14, 12

  81. Browser Developer Tools 66 Wednesday, March 14, 12

  82. 67 Wednesday, March 14, 12

  83. 68 Wednesday, March 14, 12

  84. 69 Wednesday, March 14, 12

  85. 70 Wednesday, March 14, 12

  86. 71 Wednesday, March 14, 12

  87. 72 Wednesday, March 14, 12

  88. curl 73 Wednesday, March 14, 12

  89. 74 Wednesday, March 14, 12

  90. Charles 75 Wednesday, March 14, 12

  91. 76 Wednesday, March 14, 12

  92. Fiddler 77 Wednesday, March 14, 12

  93. 78 Wednesday, March 14, 12

  94. Network Analysis Tools Wireshark Eavesdrop (Mac OS X) tcpdump snoop

    (Solaris) 79 Wednesday, March 14, 12
  95. 80 Wednesday, March 14, 12

  96. 81 Wednesday, March 14, 12

  97. 81 Wednesday, March 14, 12

  98. 81 Wednesday, March 14, 12

  99. 81 Wednesday, March 14, 12

  100. 81 Wednesday, March 14, 12

  101. 81 Wednesday, March 14, 12

  102. Connection: close 82 Wednesday, March 14, 12

  103. 298158373_a47d6db5cf_b.jpg (flickr: sbisson) HTTP Status Cats: http:/ /httpcats.herokuapp.com/ Images from

    GirlieMac Picture Credits 83 Wednesday, March 14, 12