Device Independent Web Server
Synopsis
A web server which uses content negotiation to return different representations of a web resource depending on the HTTP Accept header passed from a user agent.
Rationale
The web is often assumed to be a collection of web pages, but really it is a collection of resources identified by Universal Resource Identifiers (URIs), a web page is only one representation of an abstract resource.
Other possible representations include plain text, a snythesised voice, a vector image or a 3D environment. The user agent should be able to specify preference of a particular representation format based on its own capabilities or the user's choice.
Features
Each representation of a resource could be stored as static files or dynamically generated. The dynamic generation could use a generic XML format as a base (e.g. DIAL), and use XSLT to transform that base format into different representations based on XSL stylesheets.
The preferred representation or a list of accepted formats in order of preference can be specified by MIME type by the user agent with content negotiation using an HTTP Accept header. When the device independent web server receives a request, it parses this Accept header, chooses the most appropriate response format and either transforms a representation from a base format or returns a static or cached version of the resource.
Developer Resources
- Device Independence Principles (W3C)
- Delivery Context Overview for Device Independence (W3C)
- Composite Capability/Preference Profiles: Structure and Vocabularies (W3C)
- Device Independent Authoring Language (W3C)
- Authoring Challenges for Device Independence
- Content negotiation in HTTP (W3C)
- Accept- headers in HTTP (W3C)
- RFC 2295 - Transparent Content Negotiation in HTTP
- RFC 2296 - HTTP Remote Variant Selection Algorithm -- RVSA/1.0
- Fielding's dissertation on REST
Implementation
- Content negotiation in Apache
- mod_negotiation
- mod_transform
- Applications Development with Apache [PDF] Book demonstrates a module that inserts mod_transform with an appropriate stylesheet.
- HTTP-events
