210 likes | 370 Views
Fun Fun Project One. Building Your Very Own Web Server. What is a Web Server?. Program that understands the HTTP protocol and generates appropriate responses Clients “connect” to the machine Clients send a “request” Server reads request, generates “response”
E N D
Fun Fun Project One Building Your Very Own Web Server Fun Fun Project One
What is a Web Server? • Program that understands the HTTP protocol and generates appropriate responses • Clients “connect” to the machine • Clients send a “request” • Server reads request, generates “response” • Client interprets response appropriately Fun Fun Project One
A Simplified Web Server • Client asks for file • Server finds appropriate file • Server sends back a response header followed by the file’s data • Server closes connection Fun Fun Project One
What Does Connect Mean? • For all practical purposes, it looks like there’s data available via a file descriptor • Stream of bytes • Can be treated like any other file descriptor • Not a FILE * (like stdio, stderr) • Must use read() and write() system calls Fun Fun Project One
How Do You Identify Machines • Names or numbers and ports • http://www.domain.com implies a machine named www.domain.com and a default port of 80 • http://127.0.0.1:31415/index.html • Refers to current box (127.0.0.1 is me) • Port # is 31415 (used for this project) • File is named index.html Fun Fun Project One
How Do You Identify Files? • File name is specified in request • Server maps that name to a real file • Mapping can be whatever server wants • For example, /~vivek/index.html is really /n/fs/fac/vivek/public_html/index.html Fun Fun Project One
What’s In A Request? GET /index.html HTTP/1.0\r\n Connection: Keep-Alive\r\n User-Agent: Mozilla/4.72 [en] (X11..)\r\n Host: 127.0.0.1:31415\r\n Accept: image/gif, image/jpeg, */*\r\n Accept-Encoding: gzip\r\n Accept-Language: en\r\n Accept-Charset: iso-8859-1,*,utf-8\r\n \r\n Fun Fun Project One
What Do You Care About? GET /index.html HTTP/1.0 In particular, just index.html Assume “/” means “/index.html” Fun Fun Project One
What Could They Want? • An honest-to-goodness file (me.jpg) • An indirect request for such a file (such as “/” meaning index.html) • An implied directory with index (/home/vivek instead of /home/vivek/) • Just a directory listing • A query (we don’t care about these) • An invalid/nonexistent file Fun Fun Project One
What’s In A Response? HTTP/1.0 200 OK\r\n Date: blah-blah-blah\r\n Server: blah-blah-blah\r\n Content-Type: important\r\n Last-Modified: blah-blah-blah\r\n \r\n Raw data Fun Fun Project One
HTTP/1.0 200 OK\r\n Content-Type: stuff\r\n \r\n Data HTTP/1.0 302 Moved\r\n Location: newurl\r\n \r\n HTTP/1.0 404 Not Found\r\n \r\n But also Connection: close\r\n Content-Length: yyy\r\n What’s a Minimal Response? Fun Fun Project One
How Do You Decide? • File exists? Send it • Directory without “/” suffix? Redirect • Directory with index.html? Send it • Directory with no index.html? List it • For each list entry, add “/” if needed • Failure? Send 404 Fun Fun Project One
How Do You Test It? • Use a browser • Use “wget” or create hierarchy • Include some big images Fun Fun Project One
What is Content-Type? text/html image/gif image/jpeg Others not needed Fun Fun Project One
Where Can I Find More? Google: HTTP 1.1 Specification - painful man pages man man man –k blah read( ), write( ), open( ), close( ) Fun Fun Project One
Why open instead of fopen? • Compare fopen, fread, etc., with open, read, etc • We’re dealing with functions closer to the OS – easier to use in some cases • Practice Fun Fun Project One
What’s a File Descriptor? • Sort of like a FILE * • It’s an integer provided by OS • Used to represent a stream of bytes • Can represent file or network connection • Behavior is slightly different • Especially when reading/writing network Fun Fun Project One
General Steps Setup, and then • Get next connection • If file, read from disk • If directory, generate listing • Send all to client • Close connection, wait for next one Fun Fun Project One
What Am I Given? • Setup function • Makes server available for connections • Accept function • Gets a connection from a client • File type function • Tells you what kind of file, if it exists • Tells you how many bytes if a regular file • Directory listing functions • Gives you the file names one at a time Fun Fun Project One
Help! I’m Lost! • Don’t know HTML? • Use Netscape composer to see what to do • View page source for various pages • Do “telnet www.domain.com 80” and issue the GET manually (need to add “Host: www.domain.com” header) • Ask Fun Fun Project One
Why Are We Doing This? • Infrastructure for future projects • Some OS/Networking interaction • It’s fun, and not too bad Fun Fun Project One