Presentation is loading. Please wait.

Presentation is loading. Please wait.

Fun Fun Project One1 Building Your Very Own Web Server.

Similar presentations


Presentation on theme: "Fun Fun Project One1 Building Your Very Own Web Server."— Presentation transcript:

1 Fun Fun Project One1 Building Your Very Own Web Server

2 Fun Fun Project One2 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

3 Fun Fun Project One3 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

4 Fun Fun Project One4 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

5 Fun Fun Project One5 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://www.domain.comwww.domain.com 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

6 Fun Fun Project One6 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

7 Fun Fun Project One7 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

8 Fun Fun Project One8 What Do You Care About? GET /index.html HTTP/1.0 In particular, just index.html Assume “/” means “/index.html”

9 Fun Fun Project One9 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

10 Fun Fun Project One10 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

11 Fun Fun Project One11 What’s a Minimal Response? 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

12 Fun Fun Project One12 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

13 Fun Fun Project One13 How Do You Test It? Use a browser Use “wget” or create hierarchy Include some big images

14 Fun Fun Project One14 What is Content-Type? text/html image/gif image/jpeg Others not needed

15 Fun Fun Project One15 Where Can I Find More? Google: HTTP 1.1 Specification - painful man pages man man –k blah read( ), write( ), open( ), close( )

16 Fun Fun Project One16 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

17 Fun Fun Project One17 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

18 Fun Fun Project One18 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

19 Fun Fun Project One19 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

20 Fun Fun Project One20 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)www.domain.com Ask

21 Fun Fun Project One21 Why Are We Doing This? Infrastructure for future projects Some OS/Networking interaction It’s fun, and not too bad


Download ppt "Fun Fun Project One1 Building Your Very Own Web Server."

Similar presentations


Ads by Google