Web server design week 14
This presentation is the property of its rightful owner.
Sponsored Links
1 / 11

Web Server Design Week 14 PowerPoint PPT Presentation


  • 65 Views
  • Uploaded on
  • Presentation posted in: General

Web Server Design Week 14. Old Dominion University Department of Computer Science CS 495/595 Spring 2010 Martin Klein <[email protected]> 4/14/10. GET /foo.cgi HTTP/1.1. foo.cgi. 200 OK. Common Gateway Interface. A method for remotely invoking executable programs on a server

Download Presentation

Web Server Design Week 14

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Web server design week 14

Web Server DesignWeek 14

Old Dominion University

Department of Computer Science

CS 495/595 Spring 2010

Martin Klein <[email protected]>

4/14/10


Common gateway interface

GET /foo.cgi HTTP/1.1

foo.cgi

200 OK

Common Gateway Interface

  • A method for remotely invoking executable programs on a server

    • A long-time convention

      • http://web.archive.org/web/20071023072800/http://hoohoo.ncsa.uiuc.edu/cgi/

    • finally defined in RFC 3875

client

server


Cgi invocation

CGI Invocation

  • How Apache does it:

    • http://httpd.apache.org/docs/2.0/mod/mod_cgi.html

  • We’ll live slightly more dangerously:

    • any executable (non-directory) file can be invoked as CGI with:

      • POST

      • GET w/ query string

        • e.g. /a/b/c.cgi?var1=foo&var2=bar


Cgi operation

CGI Operation

  • The CGI program is responsible for returning (on STDOUT) some combination of its own headers:

    • Content-type

    • Location

    • Status

    • and other locally-defined headers

  • Script-returned headers are:

    • collected by the server

    • processed; e.g.:

      • “Location” -> HTTP/1.1 302 Found

      • Status -> HTTP response code line

    • combined with the server’s headers

  • Resulting headers are returned to the client


Status

Status

% more status.cgi

#!/usr/bin/perl

print "Status: 678 This is not a real HTTP status code\n\n";

mk$ telnet www.cs.odu.edu 80

Trying 128.82.4.2...

Connected to xenon.cs.odu.edu.

Escape character is '^]'.

GET /~mklein/teaching/cs595-s10/cgi/status.cgi HTTP/1.1

Host: www.cs.odu.edu

Connection: close

HTTP/1.1 678 This is not a real HTTP status code

Date: Wed, 14 Apr 2010 13:55:05 GMT

Server: Apache/2.2.14 (Unix) DAV/2 PHP/5.2.11

Content-Length: 0

Connection: close

Content-Type: text/plain

Connection closed by foreign host.


Location

Location

% more location.cgi

#!/usr/bin/perl

print "Location: http://www.cs.odu.edu/~mklein/\n\n";

mk$ telnet www.cs.odu.edu 80

Trying 128.82.4.2...

Connected to xenon.cs.odu.edu.

Escape character is '^]'.

GET /~mklein/teaching/cs595-s10/cgi/location.cgi HTTP/1.1

Host: www.cs.odu.edu

Connection: close

HTTP/1.1 302 Found

Date: Wed, 14 Apr 2010 13:58:01 GMT

Server: Apache/2.2.14 (Unix) DAV/2 PHP/5.2.11

Location: http://www.cs.odu.edu/~mklein/

Content-Length: 309

Connection: close

Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">

<html><head>

<title>302 Found</title>

</head><body>

<h1>Found</h1>

<p>The document has moved <a href="http://www.cs.odu.edu/~mklein/">here</a>.</p>

<hr>

<address>Apache/2.2.14 (Unix) DAV/2 PHP/5.2.11 Server at www.cs.odu.edu Port 80</address>

</body></html>

Connection closed by foreign host.


Content type

Content-type

% more ls.cgi

#!/usr/bin/perl

print "Content-type: text/plain\n\n";

$ls = `ls -alR`;

print "$ls\n";

mk$ telnet www.cs.odu.edu 80

Trying 128.82.4.2...

Connected to xenon.cs.odu.edu.

Escape character is '^]'.

HEAD /~mklein/teaching/cs595-s10/cgi/ls.cgi HTTP/1.1

Host: www.cs.odu.edu

Connection: close

HTTP/1.1 200 OK

Date: Wed, 14 Apr 2010 14:01:57 GMT

Server: Apache/2.2.14 (Unix) DAV/2 PHP/5.2.11

Connection: close

Content-Type: text/plain

Connection closed by foreign host.


Cgi environment

CGI Environment

  • Section 4.1, RFC 3875

    • AUTH_TYPE, CONTENT_LENGTH, CONTENT_TYPE, GATEWAY_INTERFACE, 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

  • In practice, slightly different:

    • http://www.cs.odu.edu/~mklein/teaching/cs595-s10/cgi/env.cgi


How to customize the environment

How to Customize the Environment?

  • C:

    • fork() & execve()

  • Perl:

    • set %ENV

    • fork() & exec()

  • Python:

    • set %ENV

    • fork () & execve()

  • Others???

    • please share w/ the list


Env cgi examples

ENV & CGI Examples

#!/usr/bin/perl

print "Content-type: text/html\n\n";

foreach $key (keys (%ENV)) {

print "$key = $ENV{$key} <br>\n";

}

while (<STDIN>) {

print "$_<br>\n";

}

{GET, POST}

X

{multipart/form-data,

application/x-form-www-urlencoded}

http://www.cs.odu.edu/~mklein/teaching/cs595-s10/cgi/


Advanced topics soft 404s

Advanced Topics: “Soft 404s”

  • foo.edu/lookup.php?key=123456

  • what http status code do you return if:

    • script “lookup.php” exists and has no syntax errors

    • but key 123456 is deleted or invalid

  • Semantic events:

    • http - 200

    • database - bad key

  • reading:

    • “Sic Transit Gloria Telae: Towards an Understanding of the Web’s Decay”

      • http://doi.acm.org/10.1145/988672.988716


  • Login