Web$Content$Delivery$$Reading:$Sec6on$9.1.2$and$9.4.3$COS$461:$Computer$Networks$Spring$2009$(MW$1:30‐2:50$in$CS105)$Mike$Freedman$Teaching$Assistants:$$WyaP$Lloyd$and$Jeff$Terrace$hPp://www.cs.princeton.edu/courses/archive/spring09/cos461/$1Outline$• HTTP$review$• Persistent$HTTP$• HTTP$caching$• Proxying$and$content$distribu6on$networks$– Web$proxies$– Hierarchical$networks$and$Internet$Cache$Protocol$(ICP)$– Modern$distributed$CDNs$(Akamai)$2HTTP$Basics$(Review)$• HTTP$layered$over$bidirec6onal$byte$stream$– Almost$always$TCP$• Interac6on$– Client$sends$request$to$server,$followed$by$response$from$server$to$client$– Requests/responses$are$encoded$in$text$• Stateless$– Server$maintains$no$info$about$past$client$requests$3HTTP$Request$• Request$line$– Method$• GET$–$return$URI$• HEAD$–$return$headers$only$of$GET$response$• POST$–$send$data$to$the$server$(forms,$etc.)$– URL$(rela6ve)$• E. g.,$/index.html$– HTTP$version$4HTTP$Request$(cont.)$• Request$headers$– Authoriza6on$–$authen6ca6on$info$– Acceptable$document$types/encodings$– From$–$user$email$– If‐Modified‐Since$– Referrer$–$what$caused$this$page$to$be$requested$– User‐Agent$–$client$socware$• Blank‐line$• Body$5HTTP$Request$6HTTP$Request$Example$GET$/$HTTP/1.1$Accept:$*/*$Accept‐Language:$en‐us$Accept‐Encoding:$gzip,$deflate$User‐Agent:$Mozilla/4.0$(compa6ble;$MSIE$5.5;$Windows$NT$5.0)$Host:$www.intel‐iris.net$Connec6on:$Keep‐Alive$7HTTP$Response$• Status‐line$– HTTP$version$– 3$digit$response$code$• 1XX$–$informa6onal$• 2XX$–$success$– 200$OK$• 3XX$–$redirec6on$– 301$Moved$Permanently$– 303$Moved$Temporarily$– 304$Not$Modified$• 4XX$–$client$error$– 404$Not$Found$• 5XX$–$server$error$– 505$HTTP$Version$Not$Supported$– Reason$phrase$8HTTP$Response$(cont.)$• Headers$– Loca6on$–$for$redirec6on$– Server$–$server$socware$– WWW‐Authen6cate$–$request$for$authen6ca6on$– Allow$–$list$of$methods$supported$(get,$head,$etc)$– Content‐Encoding$–$E.g$x‐gzip$– Content‐Length$– Content‐Type$– Expires$– Last‐Modified$• Blank‐line$• Body$9HTTP$Response$Example$HTTP/1.1$200$OK$Date:$Tue,$27$Mar$2001$03:49:38$GMT$Server:$Apache/1.3.14$(Unix)$$(Red‐Hat/Linux)$mod_ssl/2.7.1$$$OpenSSL/0.9.5a$DAV/1.0.2$PHP/4.0.1pl2$mod_perl/1.24$Last‐Modified:$Mon,$29$Jan$2001$17:54:18$GMT$ETag:$"7a11f‐10ed‐3a75ae4a"$Accept‐Ranges:$bytes$Content‐Length:$4333$Keep‐Alive:$6meout=15,$max=100$Connec6on:$Keep‐Alive$Content‐Type:$text/html$…..$10How$to$Mark$End$of$Message?$$• Content‐Length$– Must$know$size$of$transfer$in$advance$• Close$connec6on$– Only$server$can$do$this$• Implied$length$– E.g.,$304$never$have$body$content$• Transfer‐Encoding:$chunked$(HTTP/1.1)$– Acer$headers,$each$chunk$is$content$length$in$hex,$CRLF,$then$body.$Final$chunk$is$length$0.$11Outline$• HTTP$review$• Persistent$HTTP$• HTTP$caching$• Proxying$and$content$distribu6on$networks$– Web$proxies$– Hierarchical$networks$and$Internet$Cache$Protocol$(ICP)$– Modern$distributed$CDNs$(Akamai)$12Single$Transfer$Example$Client'13 Server SYN SYN SYN SYN ACK ACK ACK ACK ACK DAT DAT DAT DAT FIN ACK 0 RTT 1 RTT 2 RTT 3 RTT 4 RTT Server reads from disk FIN Server reads from disk Client opens TCP connection Client sends HTTP request for HTML Client parses HTML Client opens TCP connection Client sends HTTP request for image Image begins to arriveProblems$with$simple$model$• Mul6ple$connec6on$setups$– Three‐way$handshake$each$6me$• Short$transfers$are$hard$on$TCP$– Stuck$in$slow$start$– Loss$recovery$is$poor$when$windows$are$small$• Lots$of$extra$connec6ons$– Increases$server$state/processing$– Server$forced$to$keep$TIME_WAIT$connec6on$state$14TCP$Interac6on:$Short$Transfers$• Mul6ple$connec6on$setups$– Three‐way$handshake$each$6me$• Round‐trip$6me$es6ma6on$– Maybe$large$at$the$start$of$a$connec6on$(e.g.,$3$seconds)$– Leads$to$latency$in$detec6ng$lost$packets$• Conges6on$window$– Small$value$at$beginning$of$connec6on$(e.g.,$1$MSS)$– May$not$reach$a$high$value$before$transfer$is$done$• Detec6ng$packet$loss$– Timeout:$slow$$– Duplicate$ACK$$• Requires$many$packets$in$flight$• Which$doesn’t$happen$for$very$short$transfers$$15Persistent$Connec6on$Example$Client'16 Server ACK ACK DAT DAT ACK 0 RTT 1 RTT 2 RTT Server reads from disk Client sends HTTP request for HTML Client parses HTML Client sends HTTP request for image Image begins to arrive DAT Server reads from disk DATPersistent$HTTP$Non‐persistent$HTTP$issues:$• Requires$2$RTTs$per$object$• OS$must$allocate$resources$for$each$TCP$connec6on$• But$browsers$ocen$open$parallel$TCP$connec6ons$to$fetch$referenced$objects$Persistent$HTTP:$• Server$leaves$connec6on$open$acer$sending$response$• Subsequent$HTTP$messages$$between$same$client/server$are$sent$over$connec6on$Persistent$without$pipelining:$• Client$issues$new$request$only$when$previous$response$has$been$received$• One$RTT$for$each$object$Persistent$with$pipelining:$• Default$in$HTTP/1.1$• Client$sends$requests$as$soon$as$it$encounters$referenced$object$• As$liPle$as$one$RTT$for$all$the$referenced$objects$17Outline$• HTTP$review$• Persistent$HTTP$• HTTP$caching$• Proxying$and$content$distribu6on$networks$– Web$proxies$– Hierarchical$networks$and$Internet$Cache$Protocol$(ICP)$– Modern$distributed$CDNs$(Akamai)$18HTTP$Caching$• Clients$ocen$cache$documents$– When$should$origin$be$checked$for$changes?$– Every$6me?$$Every$session?$$Date?$• HTTP$includes$caching$informa6on$in$headers$– HTTP$0.9/1.0$used:$$“Expires:$$<date>”;$$“Pragma:$no‐cache”$– HTTP/1.1$has$“Cache‐Control”$• “No‐Cache”,$“Private”,$“Max‐age:$<seconds>”$• “E‐tag:$$<opaque$value>”$• If$not$expired,$use$cached$copy$• If$expired,$use$condi6on$GET$request$to$origin$– “If‐Modified‐Since:$$<date>”,$$“If‐None‐Match:$$<etag>”$–
View Full Document