cgi. xml2 common gateway interface n georgia tech 1995 web usage survey –perl - 46.7% –c - 12.5%...

Post on 20-Dec-2015

220 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

CGICGI

XML 2

Common Gateway Common Gateway InterfaceInterface

Georgia Tech 1995 Web Usage SurveyGeorgia Tech 1995 Web Usage Survey– Perl - 46.7%Perl - 46.7%– C - 12.5%C - 12.5%– Shell Scripts - 8.1%Shell Scripts - 8.1%– Tcl - Tool Commercial LanguageTcl - Tool Commercial Language– Visual BasicVisual Basic– JavaJava– C++C++– AppleScriptAppleScript

XML 3

Example Shell ScriptExample Shell Script

#!/bin/sh#!/bin/sh

#Filename: hello.sh.cgi#Filename: hello.sh.cgi

echo "Content-type: text/html"echo "Content-type: text/html"

echoecho

echo echo "<html><head><title>Hello!</title>"<html><head><title>Hello!</title></head>"</head>"

echo "<body> Hello World! </body> echo "<body> Hello World! </body> </html>"</html>"

XML 4

Hello World!Hello World! in Perl in Perl

#!/usr/bin/perl#!/usr/bin/perl

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

print print "<html><head><title>Hello!</title> "<html><head><title>Hello!</title> </head> \n";</head> \n";

print "<body> Hello, World! </body> print "<body> Hello, World! </body> <html>\n";<html>\n";

XML 5

Hello World!Hello World! in C in C

#include <stdio.h>#include <stdio.h>

main( )main( )

{{

printf("Content-type: text/html\n\n");printf("Content-type: text/html\n\n");

printf("<html><head><title>Hello!</printf("<html><head><title>Hello!</title>title>

</head>\n");</head>\n");

printf("<body>Hello, printf("<body>Hello, World!</body><html>\n");World!</body><html>\n");

}}

XML 6

Environment Variables Environment Variables Using a Shell ScriptUsing a Shell Script

#!/bin/sh#!/bin/shecho Content-type: text/plainecho Content-type: text/plainechoecho

echo GATEWAY_INTERFACE = echo GATEWAY_INTERFACE = $GATEWAY_INTERFACE$GATEWAY_INTERFACE

echo REQUEST_METHOD = $REQUEST_METHODecho REQUEST_METHOD = $REQUEST_METHODecho SCRIPT_NAME = $SCRIPT_NAMEecho SCRIPT_NAME = $SCRIPT_NAMEecho QUERY_STRING = $QUERY_STRINGecho QUERY_STRING = $QUERY_STRINGecho SERVER_SOFTWARE = $SERVER_SOFTWAREecho SERVER_SOFTWARE = $SERVER_SOFTWAREecho SERVER_NAME = $SERVER_NAME echo SERVER_NAME = $SERVER_NAME echo SERVER_PROTOCOL = $SERVER_PROTOCOL echo SERVER_PROTOCOL = $SERVER_PROTOCOL echo SERVER_PORT = $SERVER_PORT echo SERVER_PORT = $SERVER_PORT echo HTTP_USER_AGENT = $HTTP_USER_AGENT echo HTTP_USER_AGENT = $HTTP_USER_AGENT echo HTTP_ACCEPT = $HTTP_ACCEPTecho HTTP_ACCEPT = $HTTP_ACCEPT

XML 7

Environment Variables Environment Variables Using a Shell ScriptUsing a Shell Script

echo PATH_INFO = $PATH_INFO echo PATH_INFO = $PATH_INFO echo PATH_TRANSLATED = echo PATH_TRANSLATED =

$PATH_TRANSLATED$PATH_TRANSLATEDecho REMOTE_HOST = $REMOTE_HOSTecho REMOTE_HOST = $REMOTE_HOSTecho REMOTE_ADDR = $REMOTE_ADDRecho REMOTE_ADDR = $REMOTE_ADDRecho REMOTE_USER = $REMOTE_USERecho REMOTE_USER = $REMOTE_USERecho REMOTE_IDENT = $REMOTE_IDENTecho REMOTE_IDENT = $REMOTE_IDENTecho AUTH_TYPE = $AUTH_TYPEecho AUTH_TYPE = $AUTH_TYPEecho CONTENT_TYPE = $CONTENT_TYPEecho CONTENT_TYPE = $CONTENT_TYPEecho CONTENT_LENGTH = $CONTENT_LENGTHecho CONTENT_LENGTH = $CONTENT_LENGTH

XML 8

Environment Variables in Environment Variables in PerlPerl

#!/usr/bin/perl#!/usr/bin/perlprint "Content-type: text/plain\n\n"print "Content-type: text/plain\n\n"

print "GATEWAY_INTERFACE = print "GATEWAY_INTERFACE = $ENV{'GATEWAY_INTERFACE'}\n"$ENV{'GATEWAY_INTERFACE'}\n"

print "REQUEST_METHOD = print "REQUEST_METHOD = $ENV{'REQUEST_METHOD'}\n"$ENV{'REQUEST_METHOD'}\n"

print "SCRIPT_NAME = $ENV{'SCRIPT_NAME'}\n"print "SCRIPT_NAME = $ENV{'SCRIPT_NAME'}\n"print "QUERY_STRING = $ENV{'QUERY_STRING'}\print "QUERY_STRING = $ENV{'QUERY_STRING'}\

n"n"print "SERVER_SOFTWARE = print "SERVER_SOFTWARE =

$ENV{'SERVER_SOFTWARE'}\n"$ENV{'SERVER_SOFTWARE'}\n"print "SERVER_NAME = $ENV{'SERVER_NAME'}\n" print "SERVER_NAME = $ENV{'SERVER_NAME'}\n" print "SERVER_PROTOCOL = print "SERVER_PROTOCOL =

$ENV{'SERVER_PROTOCOL'}\n"$ENV{'SERVER_PROTOCOL'}\n"

XML 9

Environment Variables in Environment Variables in PerlPerl

print "SERVER_PORT = $ENV{'SERVER_PORT'}\n"print "SERVER_PORT = $ENV{'SERVER_PORT'}\n"print "HTTP_USER_AGENT = print "HTTP_USER_AGENT =

$ENV{'HTTP_USER_AGENT'}\n"$ENV{'HTTP_USER_AGENT'}\n"print "HTTP_ACCEPT = $ENV{'HTTP_ACCEPT'}\n" print "HTTP_ACCEPT = $ENV{'HTTP_ACCEPT'}\n" print "PATH_INFO = $ENV{'PATH_INFO'}\n" print "PATH_INFO = $ENV{'PATH_INFO'}\n" print "PATH_TRANSLATED = print "PATH_TRANSLATED =

$ENV{'PATH_TRANSLATED'}\n"$ENV{'PATH_TRANSLATED'}\n"print "REMOTE_HOST = $ENV{'REMOTE_HOST'}\n"print "REMOTE_HOST = $ENV{'REMOTE_HOST'}\n"print "REMOTE_ADDR = $ENV{'REMOTE_ADDR'}\n"print "REMOTE_ADDR = $ENV{'REMOTE_ADDR'}\n"print "REMOTE_USER = $ENV{'REMOTE_USER'}\n"print "REMOTE_USER = $ENV{'REMOTE_USER'}\n"print "REMOTE_IDENT = $ENV{'REMOTE_IDENT'}\n"print "REMOTE_IDENT = $ENV{'REMOTE_IDENT'}\n"

XML 10

Environment Variables in Environment Variables in PerlPerl

print "AUTH_TYPE = $ENV{'AUTH_TYPE'}\n"print "AUTH_TYPE = $ENV{'AUTH_TYPE'}\n"

print "CONTENT_TYPE = print "CONTENT_TYPE = $ENV{'CONTENT_TYPE'}\n"$ENV{'CONTENT_TYPE'}\n"

print "CONTENT_LENGTH = print "CONTENT_LENGTH = $ENV{'CONTENT_LENGTH'}\n"$ENV{'CONTENT_LENGTH'}\n"

XML 11

Environment Variables in Environment Variables in CC

#include <stdio.h>#include <stdio.h>#include <stdlib.h>#include <stdlib.h>char *cp;char *cp;char *empty = "[empty]"char *empty = "[empty]"main( )main( ){{printf ("Content-type: text/plain\n\n");printf ("Content-type: text/plain\n\n");

#define safenv(a) ((cp = getenv(a)) ? cp : #define safenv(a) ((cp = getenv(a)) ? cp : empty)empty)

printf("GATEWAY_INTERFACE = %s\n", printf("GATEWAY_INTERFACE = %s\n", safenv("GATEWAY_INTERFACE"));safenv("GATEWAY_INTERFACE"));

XML 12

Environment Variables in Environment Variables in CC

printf("REQUEST_METHOD = %s\n", printf("REQUEST_METHOD = %s\n", safenv("REQUEST_METHOD"));safenv("REQUEST_METHOD"));

printf("SCRIPT_NAME = %s\n", printf("SCRIPT_NAME = %s\n", safenv("SCRIPT_NAME"));safenv("SCRIPT_NAME"));

printf("QUERY_STRING = %s\n", printf("QUERY_STRING = %s\n", safenv("QUERY_STRING"));safenv("QUERY_STRING"));

printf("SERVER_SOFTWARE = %s\n" printf("SERVER_SOFTWARE = %s\n" safenv("SERVER_SOFTWARE"));safenv("SERVER_SOFTWARE"));

printf("SERVER_NAME = %s\n", printf("SERVER_NAME = %s\n", safenv("SERVER_NAME"));safenv("SERVER_NAME"));

printf("SERVER_PROTOCOL = %s\n", printf("SERVER_PROTOCOL = %s\n", safenv("SERVER_PROTOCOL"));safenv("SERVER_PROTOCOL"));

printf("SERVER_PORT = %s\n", printf("SERVER_PORT = %s\n", safenv("SERVER_PORT"));safenv("SERVER_PORT"));

printf("HTTP_USER_AGENT = %s\n", printf("HTTP_USER_AGENT = %s\n", safenv("HTTP_USER_AGENT"));safenv("HTTP_USER_AGENT"));

XML 13

Environment Variables in Environment Variables in CC

printf("HTTP_ACCEPT = %s\n", printf("HTTP_ACCEPT = %s\n", safenv("HTTP_ACCEPT")); safenv("HTTP_ACCEPT"));

printf("PATH_INFO = %s\n", printf("PATH_INFO = %s\n", safenv("PATH_INFO")); safenv("PATH_INFO"));

printf("PATH_TRANSLATED = %s\n", printf("PATH_TRANSLATED = %s\n", safenv("PATH_TRANSLATED"));safenv("PATH_TRANSLATED"));

printf("REMOTE_HOST = %s\n", printf("REMOTE_HOST = %s\n", safenv("REMOTE_HOST"));safenv("REMOTE_HOST"));

printf("REMOTE_ADDR = %s\n", printf("REMOTE_ADDR = %s\n", safenv("REMOTE_ADDR"));safenv("REMOTE_ADDR"));

printf("REMOTE_USER = %s\n", printf("REMOTE_USER = %s\n", safenv("REMOTE_USER"));safenv("REMOTE_USER"));

XML 14

Environment Variables in Environment Variables in CC

printf("REMOTE_IDENT = %s\n", printf("REMOTE_IDENT = %s\n", safenv("REMOTE_IDENT"));safenv("REMOTE_IDENT"));

printf("AUTH_TYPE = %s\n", printf("AUTH_TYPE = %s\n", safenv("AUTH_TYPE"));safenv("AUTH_TYPE"));

printf("CONTENT_TYPE = %s\n", printf("CONTENT_TYPE = %s\n", safenv("CONTENT_TYPE"));safenv("CONTENT_TYPE"));

printf("CONTENT_LENGTH = %s\n", printf("CONTENT_LENGTH = %s\n", safenv("CONTENT_LENGTH"));safenv("CONTENT_LENGTH"));

}}

XML 15

Standard CGI VariablesStandard CGI Variables

User informationUser information– HTTP_USER_AGENTHTTP_USER_AGENT

Name and version of user's browserName and version of user's browser name/version library/versionname/version library/version Contains information about any proxy Contains information about any proxy

gatewaygateway– Used when firewalls existUsed when firewalls exist

XML 16

Standard CGI VariablesStandard CGI Variables

User informationUser information– HTTP_USER_AGENTHTTP_USER_AGENT

ExamplesExamples– Mozilla/2.0b1J (Windows; I; 32 bit)Mozilla/2.0b1J (Windows; I; 32 bit)– Mozilla/1.22 (Windows; I; 16 bit)Mozilla/1.22 (Windows; I; 16 bit)– Lynx/2.3.7 BETA libwww/2.14Lynx/2.3.7 BETA libwww/2.14– Microsoft Internet Explorer/4.40.308 (Windows Microsoft Internet Explorer/4.40.308 (Windows

95)95)

XML 17

Standard CGI VariablesStandard CGI Variables

User informationUser information– HTTP_ACCEPTHTTP_ACCEPT

Gives MIME formats that the browser can Gives MIME formats that the browser can acceptaccept

– REMOTE_HOSTREMOTE_HOST IP address of userIP address of user Always givenAlways given

– REMOTE_ADDRREMOTE_ADDR Text-equivalent host name of user IP addressText-equivalent host name of user IP address Not always givenNot always given

XML 18

Standard CGI VariablesStandard CGI Variables

Server informationServer information– SERVER_SOFTWARESERVER_SOFTWARE

Name and version of server softwareName and version of server software name/versionname/version

– Apache/0.6.4bApache/0.6.4b

– SERVER_NAMESERVER_NAME Server’s host name or IP addressServer’s host name or IP address

– www.cs.wayne.eduwww.cs.wayne.edu

– GATEWAY_INTERFACEGATEWAY_INTERFACE CGI revisionCGI revision

– CGI/CGI/revisionrevision– CGI/1.1CGI/1.1

XML 19

Standard CGI VariablesStandard CGI Variables

Request-specific informationRequest-specific information– QUERY_STRINGQUERY_STRING

Very importantVery important Most common method of passing Most common method of passing

information to serverinformation to server Suppose URL Suppose URL

http://www.cs.wayne.edu/cgi/code.cgi?x,y http://www.cs.wayne.edu/cgi/code.cgi?x,y is submittedis submitted

– All characters after the All characters after the ? ? will be put into will be put into QUERY_STRINGQUERY_STRING

XML 20

Standard CGI VariablesStandard CGI Variables

Request-specific informationRequest-specific information– SCRIPT_NAMESCRIPT_NAME

File name of the CGI program File name of the CGI program

– SERVER_PROTOCOLSERVER_PROTOCOL Name and revision of the protocol that Name and revision of the protocol that

request came in fromrequest came in from protocol/revisionprotocol/revision

– HTTP/1.0HTTP/1.0

XML 21

Standard CGI VariablesStandard CGI Variables

Request-specific informationRequest-specific information– SERVER_PORTSERVER_PORT

Port on which request came inPort on which request came in Usually 80Usually 80

– PATH_INFOPATH_INFO One can pass another file path to the CGI One can pass another file path to the CGI

program by appending it to the URLprogram by appending it to the URL http://www.cs.wayne.edu/cgi/cgi-http://www.cs.wayne.edu/cgi/cgi-

code.cgi/a/b/ccode.cgi/a/b/c– PATH_INFO will contain the extra path /a/b/cPATH_INFO will contain the extra path /a/b/c

XML 22

Standard CGI VariablesStandard CGI Variables

Request-specific informationRequest-specific information– PATH_TRANSLATEDPATH_TRANSLATED

Contains PATH_INFO appended to the Contains PATH_INFO appended to the document root path of the serverdocument root path of the server– /x/y/z/a/b/c/x/y/z/a/b/c

– CONTENT_TYPECONTENT_TYPE Used for queries that have attached Used for queries that have attached

information, such as POST requestsinformation, such as POST requests MIME content-type of dataMIME content-type of data type/subtypetype/subtype

– application/x-www-form-urlencodedapplication/x-www-form-urlencoded

XML 23

Standard CGI VariablesStandard CGI Variables

Request-specific informationRequest-specific information– CONTENT_LENGTHCONTENT_LENGTH

Number of bytes of dataNumber of bytes of data

– AUTH_TYPEAUTH_TYPE Contains authentication method used to Contains authentication method used to

validate uservalidate user

– REQUEST_METHODREQUEST_METHOD Method used for requestMethod used for request

– Usually either Usually either postpost or or getget

top related