fun fun project one

21
Fun Fun Project One 1 Fun Fun Project One Building Your Very Own Web Server

Upload: blaze

Post on 18-Feb-2016

42 views

Category:

Documents


3 download

DESCRIPTION

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” - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Fun Fun Project One

Fun Fun Project One 1

Fun Fun Project One

Building Your Very Own Web Server

Page 2: Fun Fun Project One

Fun Fun Project One 2

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

Page 3: Fun Fun Project One

Fun Fun Project One 3

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

Page 4: Fun Fun Project One

Fun Fun Project One 4

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

Page 5: Fun Fun Project One

Fun Fun Project One 5

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

Page 6: Fun Fun Project One

Fun Fun Project One 6

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

Page 7: Fun Fun Project One

Fun Fun Project One 7

What’s In A Request?GET /index.html HTTP/1.0\r\nConnection: Keep-Alive\r\nUser-Agent: Mozilla/4.72 [en] (X11..)\r\nHost: 127.0.0.1:31415\r\nAccept: image/gif, image/jpeg, */*\r\nAccept-Encoding: gzip\r\nAccept-Language: en\r\nAccept-Charset: iso-8859-1,*,utf-8\r\n\r\n

Page 8: Fun Fun Project One

Fun Fun Project One 8

What Do You Care About?GET /index.html HTTP/1.0

In particular, just index.html

Assume “/” means “/index.html”

Page 9: Fun Fun Project One

Fun Fun Project One 9

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

Page 10: Fun Fun Project One

Fun Fun Project One 10

What’s In A Response?HTTP/1.0 200 OK\r\nDate: blah-blah-blah\r\nServer: blah-blah-blah\r\nContent-Type: important\r\nLast-Modified: blah-blah-blah\r\n\r\nRaw data

Page 11: Fun Fun Project One

Fun Fun Project One 11

What’s a Minimal Response?

HTTP/1.0 200 OK\r\nContent-Type: stuff\r\n\r\nData

HTTP/1.0 302 Moved\r\nLocation: newurl\r\n\r\n

HTTP/1.0 404 Not Found\r\n

\r\n

But alsoConnection: close\r\nContent-Length: yyy\r\n

Page 12: Fun Fun Project One

Fun Fun Project One 12

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

Page 13: Fun Fun Project One

Fun Fun Project One 13

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

Page 14: Fun Fun Project One

Fun Fun Project One 14

What is Content-Type?text/htmlimage/gifimage/jpeg

Others not needed

Page 15: Fun Fun Project One

Fun Fun Project One 15

Where Can I Find More?Google: HTTP 1.1 Specification -

painfulman pagesman manman –k blahread( ), write( ), open( ), close( )

Page 16: Fun Fun Project One

Fun Fun Project One 16

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

Page 17: Fun Fun Project One

Fun Fun Project One 17

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

Page 18: Fun Fun Project One

Fun Fun Project One 18

General StepsSetup, and then Get next connection If file, read from disk If directory, generate listing Send all to client Close connection, wait for next one

Page 19: Fun Fun Project One

Fun Fun Project One 19

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

Page 20: Fun Fun Project One

Fun Fun Project One 20

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

Page 21: Fun Fun Project One

Fun Fun Project One 21

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