csce 510 - systems programming
DESCRIPTION
CSCE 510 - Systems Programming. Lecture 21 Web Server: CGI -Dynamic Pages. Overview. Last Time Last times slides 22-36 Stream Server skeleton Web server Assignment Software as a Service ( SaaS ) Email ??. Today Tools Survey Web Servers again Web Server Skeleton – Pop Quiz Git - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: CSCE 510 - Systems Programming](https://reader036.vdocuments.net/reader036/viewer/2022062501/56816935550346895de091d0/html5/thumbnails/1.jpg)
CSCE 510 - Systems
Programming
Lecture 21 Web Server: CGI -Dynamic Pages
CSCE March 25, 2013
![Page 2: CSCE 510 - Systems Programming](https://reader036.vdocuments.net/reader036/viewer/2022062501/56816935550346895de091d0/html5/thumbnails/2.jpg)
Overview
Last Time Last times slides 22-36 Stream Server skeleton Web server Assignment Software as a Service
(SaaS) Email ??
Today Tools Survey Web Servers again Web Server Skeleton – Pop
Quiz Git CGI Common Gateway
Interface
![Page 3: CSCE 510 - Systems Programming](https://reader036.vdocuments.net/reader036/viewer/2022062501/56816935550346895de091d0/html5/thumbnails/3.jpg)
How Web Servers Work
- CSCE 510 2013 -3 Web Server-CGI
HowStuffWorks – http://www.howstuffworks.com/web-server1.htm by Marshall Brain
http://computer.howstuffworks.com/web-server1.htm
![Page 4: CSCE 510 - Systems Programming](https://reader036.vdocuments.net/reader036/viewer/2022062501/56816935550346895de091d0/html5/thumbnails/4.jpg)
Saas Book Figure 2.1 (Last Time slide 18 repeat)
- CSCE 510 2013 -4 Web ServerEngineering Long-Lasting Software: An Agile Approach Using SaaS and Cloud Computing (Beta Edition)
![Page 5: CSCE 510 - Systems Programming](https://reader036.vdocuments.net/reader036/viewer/2022062501/56816935550346895de091d0/html5/thumbnails/5.jpg)
Behind the Scenes – Browser Initiates
- CSCE 510 2013 -5 Web Server-CGI
Decompose URL/URI The protocol ("http") The server name ("www.howstuffworks.com") optional :port The path name ("web-server.htm")
Name to IP address translation gethostbyname – now obsolete; use getaddrinfo(3)
and getnameinfo(3) int getaddrinfo(const char *node www.howstuffworks.com
Ref Saas Book
![Page 6: CSCE 510 - Systems Programming](https://reader036.vdocuments.net/reader036/viewer/2022062501/56816935550346895de091d0/html5/thumbnails/6.jpg)
Domain Name Service (DNS)
- CSCE 510 2013 -Slide - 6 - Web Server - CGI
man –k dnshost(1) … no section 3 entries except for pm Name servers
![Page 7: CSCE 510 - Systems Programming](https://reader036.vdocuments.net/reader036/viewer/2022062501/56816935550346895de091d0/html5/thumbnails/7.jpg)
vim /etc/resolv.conf
- CSCE 510 2013 -Slide - 7 - Web Server - CGI
nameserver 129.252.11.15nameserver 129.252.21.12nameserver 129.252.21.13domain cse.sc.edusearch cse.sc.edu
Command Anyone Know????
![Page 8: CSCE 510 - Systems Programming](https://reader036.vdocuments.net/reader036/viewer/2022062501/56816935550346895de091d0/html5/thumbnails/8.jpg)
DNS: nslookup(1)
- CSCE 510 2013 -Slide - 8 - Web Server - CGI
ares> nslookup howstuffworks.com Server: 129.252.11.15 Address: 129.252.11.15#53
Non-authoritative answer: Name: howstuffworks.com Address: 107.21.49.125
host(1) gives similar results
![Page 9: CSCE 510 - Systems Programming](https://reader036.vdocuments.net/reader036/viewer/2022062501/56816935550346895de091d0/html5/thumbnails/9.jpg)
How does nslookup does its thing?
- CSCE 510 2013 -Slide - 9 - Web Server - CGI
Or how does getaddrinfo do its thing? DNS packets
header question answer Authority
look up in local table if not found send DNS (UDP) packet to nameserver At each nameserver:
if it does not know knows somebody else to ask
http://computer.howstuffworks.com/web-server1.htm
![Page 10: CSCE 510 - Systems Programming](https://reader036.vdocuments.net/reader036/viewer/2022062501/56816935550346895de091d0/html5/thumbnails/10.jpg)
Get request + cookies sometimes
- CSCE 510 2013 -Slide - 10 - Web Server - CGI
Static Pages – just return HTML in file get means – give me the file
Stateless connect to sever Send “Get page.html” Server: return page.html in HTML packet Server close connection
session info / logins etc how does the server remember? It doesn’t it send a cookie to the browser the browser returns it with later requests
![Page 11: CSCE 510 - Systems Programming](https://reader036.vdocuments.net/reader036/viewer/2022062501/56816935550346895de091d0/html5/thumbnails/11.jpg)
Domain Names
- CSCE 510 2013 -Slide - 11 - Web Server - CGI
.com, .org, .net, .edu top of the food chain for nameservers
![Page 12: CSCE 510 - Systems Programming](https://reader036.vdocuments.net/reader036/viewer/2022062501/56816935550346895de091d0/html5/thumbnails/12.jpg)
Dynamic Pages
- CSCE 510 2013 -Slide - 12 - Web Server - CGI
Web 2.0 ? Dynamic pages – html pages generated on server and
then sent to the browser
Access Database process form …
java servlets cgi
![Page 13: CSCE 510 - Systems Programming](https://reader036.vdocuments.net/reader036/viewer/2022062501/56816935550346895de091d0/html5/thumbnails/13.jpg)
CGI – Common Gateway Interface
- CSCE 510 2013 -Slide - 13 - Web Server - CGI
chroot for static pages “webroot” cgi-bin – place for executables cgi scripts
typically perl or C or ….
![Page 14: CSCE 510 - Systems Programming](https://reader036.vdocuments.net/reader036/viewer/2022062501/56816935550346895de091d0/html5/thumbnails/14.jpg)
A simple CGI script
- CSCE 510 2013 -Slide - 14 - Web Server - CGI
A simple HTMl page <html> <body> <h1>Hello
there!</h1> </body> </html>
cgi program to generate #include <stdio.h> int main() { printf("Content-type:
text/html\n\n"); printf("<html>\n"); printf("<body>\n"); printf("<h1>Hello
there!</h1>\n"); printf("</body>\n"); printf("</html>\n"); return 0; }
http://computer.howstuffworks.com/cgi.htm
compile with gcc simplest.c -o simplest.cgi
![Page 15: CSCE 510 - Systems Programming](https://reader036.vdocuments.net/reader036/viewer/2022062501/56816935550346895de091d0/html5/thumbnails/15.jpg)
Perl version
- CSCE 510 2013 -Slide - 15 - Web Server - CGI
#! /usr/bin/perl print "Content-type: text/html\n\n"; print "<html><body><h1>Hello World!"; print "</h1></body></html>\n";
http://computer.howstuffworks.com/cgi.htm
![Page 16: CSCE 510 - Systems Programming](https://reader036.vdocuments.net/reader036/viewer/2022062501/56816935550346895de091d0/html5/thumbnails/16.jpg)
Counter
- CSCE 510 2013 -Slide - 16 - Web Server - CGI
#include <stdio.h> int incrementcount() { FILE *f; int i; f=fopen("count.txt", "r+"); if (!f) { sleep(1); f=fopen("count.txt", "r+"); if (!f) return -1; }
fscanf(f, "%d", &i); i++; fseek(f,0,SEEK_SET); fprintf(f, "%d", i); fclose(f); return i; } int main() { printf("Content-type: text/html\n\n"); printf("<html>\n"); printf("<body>\n"); printf("<h1>The current count is: ") printf("%d</h1>\n",
incrementcount()); printf("</body>\n"); printf("</html>\n"); return 0; }
http://computer.howstuffworks.com/cgi.htm
![Page 17: CSCE 510 - Systems Programming](https://reader036.vdocuments.net/reader036/viewer/2022062501/56816935550346895de091d0/html5/thumbnails/17.jpg)
Forms: Sending Input
- CSCE 510 2013 -Slide - 17 - Web Server - CGI
lycos search: http://www.lycos.com/cgi-bin/pursuit?matchmode=and &cat=lycos&query=test&x=10&y=9
http://computer.howstuffworks.com/cgi.htm
![Page 18: CSCE 510 - Systems Programming](https://reader036.vdocuments.net/reader036/viewer/2022062501/56816935550346895de091d0/html5/thumbnails/18.jpg)
HTML form
- CSCE 510 2013 -Slide - 18 - Web Server - CGI
<html><body> <h1>A super-simple form<h1> <FORM METHOD=GET ACTION="http://www.howstuffworks.com/cgi-bin/simpleform.cgi"> Enter Your Name: <input name="Name" size=20 maxlength=50> <P> <INPUT TYPE=submit value="Submit"> <INPUT TYPE=reset value="Reset"> </FORM></body></html>
http://computer.howstuffworks.com/cgi.htm
![Page 19: CSCE 510 - Systems Programming](https://reader036.vdocuments.net/reader036/viewer/2022062501/56816935550346895de091d0/html5/thumbnails/19.jpg)
Process Query String
- CSCE 510 2013 -Slide - 19 - Web Server - CGI
#include <stdio.h>#include <stdlib.h> int main(){ printf("Content-type: text/html\n\n"); printf("<html>\n"); printf("<body>\n"); printf("<h1>The value entered was: ") printf("%s</h1>\n", getenv("QUERY_STRING")); printf("</body>\n"); printf("</html>\n"); return 0;}
http://computer.howstuffworks.com/cgi.htm
![Page 20: CSCE 510 - Systems Programming](https://reader036.vdocuments.net/reader036/viewer/2022062501/56816935550346895de091d0/html5/thumbnails/20.jpg)
Environment passed to scripts
- CSCE 510 2013 -Slide - 20 - Web Server - CGI
AUTH_TYPE CONTENT_LENGTH CONTENT_TYPE GATEWAY_INTERFACE HTTP_ACCEPT HTTP_USER_AGENT PATH_INFO PATH_TRANSLATED QUERY_STRING REMOTE_ADDR REMOTE_HOST
REMOTE_IDENT REMOTE_USER REQUEST_METHOD SCRIPT_NAME SERVER_NAME SERVER_PORT SERVER_PROTOCOL SERVER_SOFTWARE
http://computer.howstuffworks.com/cgi.htm
![Page 21: CSCE 510 - Systems Programming](https://reader036.vdocuments.net/reader036/viewer/2022062501/56816935550346895de091d0/html5/thumbnails/21.jpg)
A real Form
- CSCE 510 2013 -Slide - 21 - Web Server - CGI
<html> <body> <h1>HSW Survey Form<h1> <FORM METHOD=POST ACTION="http://www.howstuffworks.com/cgi-bin/survey.cgi"> Enter Your Name: <input name="Name" size=20 maxlength=50> <P>Enter your sex: <input type=radio CHECKED name=sex value=MALE>Male <input type=radio name=sex value=FEMALE>Female <P>Select your age<br> </SELECT>
<SELECT size=2 NAME=age> <OPTION> 1-10 <OPTION> 11-20 <OPTION> 21-30 <OPTION> 31-40 <OPTION> 41-50 <OPTION> 51-60 <OPTION> 61 and up </SELECT> <P>Enter Your Comment: <input name="Name" size=40 maxlength=100>