Javascript plus SSI demo

Client and server work together.
  1. SSI is used to access environment variables on the server.
  2. These are sent to the client already encoded into JS variables.
  3. So it looks like JS can access, for example, the IP address, but in fact it cannot by itself. It is client and server working together to get IP address into the JS code.

The following code is sent to the client with the environment variables already hard-coded.
(View Source to see that.)

  
This JS plus SSI:


var servername = '<!--#echo var="SERVER_NAME"-->';
var serverip   = '<!--#echo var="SERVER_ADDR"-->';

var clientip   = '<!--#echo var="REMOTE_ADDR"-->';
var clientname = '<!--#echo var="REMOTE_HOST"-->';
var clientip2  = '<!--#echo var="HTTP_X_FORWARDED_FOR"-->';

var lastmod    = '<!--#echo var="LAST_MODIFIED"-->';
var referrer   = '<!--#echo var="HTTP_REFERER"-->';
var useragent  = '<!--#echo var="HTTP_USER_AGENT"-->';

document.write ( "Server name: <br> " + servername + " <p>" );

document.write ( "Server IP:   <br> <a href=http://whois.domaintools.com/" + serverip + ">" + serverip + "</a> <p>" );
document.write ( "Client IP:   <br> <a href=http://whois.domaintools.com/" + clientip + ">" + clientip + "</a> <p>" );

if ( clientname == "(none)" ) document.write ( "Client name: <br> none <p>" );
else                          document.write ( "Client name: <br> <a href=http://whois.domaintools.com/" + clientname + ">" + clientname + "</a> <p>" );

if ( clientip2 == "(none)" )  document.write ( "Client original IP: <br> none <p>" );
else                          document.write ( "Client original IP: <br> <a href=http://whois.domaintools.com/" + clientip2 + ">" + clientip2 + "</a> <p>" );

document.write ( "This page last modified: <br> " + lastmod + " <p>" );

if ( referrer == "(none)" )   document.write ( "Referring page: <br> none <p>" );
else                          document.write ( "Referring page: <br> <a href=" + referrer + ">" + referrer + "</a> <p>" );

document.write ( "User agent string as seen by server: <br> " + useragent + " <p>" );

Displays: