HTTP Headers
In simplest form, an HTTP request is a URL to which a message is sent. The URL identifies a particular resource and the message consists of a number of headers that describe the body of the message, followed by the message body. A response has the same structure.
HTTP headers are used to transfer HTTP protocol information between the HTTP client and the HTTP server. The headers are sent as part of each HTTP request and response, and contain HTTP protocol information about the user agent, the request, and the response.
An HTTP request may be for a resource (such as an HTML page or a file) or an instruction to perform some type of action. The response will contain the requested resource and status information about the request.
Each request message consists of a request line, a number of headers, and an optional message body. Similarly, each response consists of a status line, a number of headers, and an optional message body.
Uniface provides Proc functions to read and write HTTP headers. You can read the HTTP request headers using $webinfo("httprequestheaders"). You can set the HTTP response header using $webinfo("httpresponseheaders").
Request Headers
HTTP request headers can be used to tailor the user experience. Typical request headers include:
-
host
-
connection
-
upgrade-insecure-requests
-
user-agent
-
accept
-
accept-encoding
-
accept-language
Using Request Headers for Conditional Processing
HTTP request headers contain a
user-agent
header that identifies the client browser or application. Uniface
mobile apps automatically add a string to this header, for example
UnifaceMobile/0
.
This header can be read and parsed to provide conditional processing, perhaps to add different authentication routines or server-side processing. For example:
variables string vUserAgents endvariables vUserAgents = $replace($item("user-agent", $webinfo("HTTPREQUESTHEADERS")), 1, " ", "", -1) if ($scan(vUserAgents,"UnifaceMobile") > 0) webmessage "Client is a Uniface mobile App" else webmessage "Client is a DSP" endif
Response Headers
You can set the HTTP response header using $webinfo("httpresponseheaders").
When Uniface sends a response page to the browser,
it puts all formatted HTTP headers from the HTTPRESPONSEHEADERS
in front of the
response page, and puts the status code and reason ($webinfo("status") and
$webinfo("statusreason")) in the first line of the response page.
By default, the following HTTP headers are sent:
-
Mimetype=text/html
-
Expires=0
-
Cache-Control=no-cache
By controlling HTTP headers you can influence the behavior of web pages in a client browser. For example, you can use HTTP headers to do the following:
-
Target a window instead of a frame
-
Influence the way a document is cached on the Web browser or proxy server
-
Set individual expiration times for documents (specific cache-control)
-
Redirect pages using ProcScript instead of static HTTP (equivalent tags)
-
Define a logon dialog.
Using Response Headers for Authentication
The following example shows code for a static server page (USP) that creates a dynamic pop-up logon box in the browser using a HTTP response header.
- Define a component variable
vLogonAttempts
with a numeric data type. It records how many times the user tries to log on. If the user tries to logon 3 times with the wrong logon information, an HTTP error page is displayed. - Set the State Managed
by property as
Cookie
on the Server Page properties. This is for keeping the state of the component variable TRIES. - Add code in the execution trigger of the
server page, for example:
webget if($user !="correct-user" | $password != "password-for-the-correct-user") $vLogonAttempts$=$vLogonAttempts$+1 ; pop-up a logon box, $webinfo("httpresponseheaders")="%\ WWW-Authenticate: basic realm=%%"Administrator log-in(%%$vLogonAttempts$%%%)%%"·;%\ Expires=0·;Cache-Control=no-cache" $webinfo("status")="401" $webinfo("statusreason")="Unauthorized" $webinfo("output")="<html><title>401 - Unauthorized</title>%\ <body><h1>401- Unauthorized to view this page</h1></body></html>" else $vLogonAttempts$=0 webgen endif
Note: The correct-user
and the
password-for-the-correct-user
are only for demonstration purposes.