[0001]
[0002]
[0003]
[0004]
[0005]
[0006]
[0007]
[0008]
[0009]
[0010]
[0011]
[0012]
[0013]
[0014]
[0015]
[0016]
[0017]
[0018]
[0019]
[0020]
[0021]
[0022]
[0023]
[0024]
[0025]
[0026]
[0027]
[0028]
[0029]
[0030]
[0031]
[0032]
[0033]
[0034]
[0035]
[0036]
[0037]
[0038]
[0039]
[0040]
[0041]
[0042]
[0043]
[0044]
[0045]
[0046]
[0047]
[0048]
[0049]
[0050]
[0051]
[0052]
[0053]
[0054]
[0055]
[0056]
[0057]
[0058]
[0059]
[0060]
[0061]
[0062]
[0063]
[0064]
[0065]
[0066]
[0067]
[0068]
[0069]
[0070]
[0071]
[0072]
[0073]
[0074]
[0075]
[0076]
[0077]
[0078]
[0079]
[0080]
[0081]
[0082]
[0083]
[0084]
[0085]
[0086]
[0087]
[0088]
[0089]
[0090]
[0091]
[0092]
[0093]
[0094]
[0095]
[0096]
[0097]
[0098]
[0099]
[0100]
[0101]
[0102]
[0103]
[0104]
[0105]
[0106]
[0107]
[0108]
[0109]
[0110]
[0111]
[0112]
[0113]
[0114]
[0115]
[0116]
[0117]
[0118]
[0119]
[0120]
[0121]
[0122]
[0123]
[0124]
[0125]
[0126]
[0127]
[0128]
[0129]
[0130]
[0131]
[0132]
[0133]
[0134]
[0135]
[0136]
[0137]
[0138]
[0139]
[0140]
[0141]
[0142]
[0143]
[0144]
[0145]
[0146]
[0147]
[0148]
[0149]
[0150]
[0151]
[0152]
[0153]
[0154]
[0155]
[0156]
[0157]
[0158]
[0159]
[0160]
[0161]
[0162]
[0163]
[0164]
[0165]
[0166]
[0167]
[0168]
[0169]
[0170]
[0171]
[0172]
[0173]
[0174]
[0175]
[0176]
[0177]
[0178]
[0179]
[0180]
[0181]
[0182]
[0183]
[0184]
[0185]
[0186]
[0187]
[0188]
[0189]
[0190]
[0191]
[0192]
[0193]
[0194]
[0195]
[0196]
[0197]
[0198]
[0199]
[0200]
[0201]
[0202]
[0203]
[0204]
[0205]
[0206]
[0207]
[0208]
[0209]
[0210]
[0211]
[0212]
[0213]
[0214]
[0215]
[0216]
[0217]
[0218]
[0219]
[0220]
[0221]
[0222]
[0223]
[0224]
[0225]
[0226]
[0227]
[0228]
[0229]
[0230]
[0231]
[0232]
[0233]
[0234]
[0235]
[0236]
[0237]
[0238]
[0239]
[0240]
[0241]
[0242]
[0243]
[0244]
[0245]
[0246]
[0247]
[0248]
[0249]
[0250]
[0251]
[0252]
[0253]
[0254]
[0255]
[0256]
[0257]
[0258]
[0259]
[0260]
[0261]
[0262]
[0263]
[0264]
[0265]
[0266]
[0267]
[0268]
[0269]
[0270]
[0271]
[0272]
[0273]
[0274]
[0275]
[0276]
[0277]
[0278]
[0279]
[0280]
[0281]
[0282]
[0283]
[0284]
[0285]
[0286]
[0287]
[0288]
[0289]
[0290]
[0291]
[0292]
[0293]
[0294]
[0295]
[0296]
[0297]
[0298]
[0299]
[0300]
[0301]
[0302]
[0303]
[0304]
[0305]
[0306]
[0307]
[0308]
[0309]
[0310]
[0311]
[0312]
[0313]
[0314]
[0315]
[0316]
[0317]
[0318]
[0319]
[0320]
[0321]
[0322]
[0323]
[0324]
[0325]
[0326]
[0327]
[0328]
[0329]
[0330]
[0331]
[0332]
[0333]
[0334]
[0335]
[0336]
[0337]
[0338]
[0339]
[0340]
[0341]
[0342]
[0343]
[0344]
[0345]
[0346]
[0347]
[0348]
[0349]
[0350]
[0351]
[0352]
[0353]
[0354]
[0355]
[0356]
[0357]
[0358]
[0359]
[0360]
[0361]
[0362]
[0363]
[0364]
[0365]
[0366]
[0367]
[0368]
[0369]
[0370]
[0371]
[0372]
[0373]
[0374]
[0375]
[0376]
[0377]
[0378]
[0379]
[0380]
[0381]
[0382]
[0383]
[0384]
[0385]
[0386]
[0387]
[0388]
[0389]
[0390]
[0391]
[0392]
[0393]
[0394]
[0395]
[0396]
[0397]
[0398]
[0399]
[0400]
[0401]
[0402]
[0403]
[0404]
[0405]
[0406]
[0407]
[0408]
[0409]
[0410]
[0411]
[0412]
[0413]
[0414]
[0415]
[0416]
[0417]
[0418]
[0419]
[0420]
[0421]
[0422]
[0423]
[0424]
[0425]
[0426]
[0427]
[0428]
[0429]
[0430]
[0431]
[0432]
[0433]
[0434]
[0435]
[0436]
[0437]
[0438]
[0439]
[0440]
[0441]
[0442]
[0443]
[0444]
[0445]
[0446]
[0447]
[0448]
[0449]
[0450]
[0451]
[0452]
[0453]
[0454]
[0455]
[0456]
[0457]
[0458]
[0459]
[0460]
[0461]
[0462]
[0463]
[0464]
[0465]
[0466]
[0467]
[0468]
[0469]
[0470]
[0471]
[0472]
[0473]
[0474]
[0475]
[0476]
[0477]
[0478]
[0479]
[0480]
[0481]
[0482]
[0483]
[0484]
[0485]
[0486]
[0487]
[0488]
[0489]
[0490]
[0491]
[0492]
[0493]
[0494]
[0495]
[0496]
[0497]
[0498]
[0499]
[0500]
[0501]
[0502]
[0503]
[0504]
[0505]
[0506]
[0507]
[0508]
[0509]
[0510]
[0511]
[0512]
[0513]
[0514]
[0515]
[0516]
[0517]
[0518]
[0519]
[0520]
[0521]
[0522]
[0523]
[0524]
[0525]
[0526]
[0527]
[0528]
[0529]
[0530]
[0531]
[0532]
[0533]
[0534]
[0535]
[0536]
[0537]
[0538]
[0539]
[0540]
[0541]
[0542]
[0543]
[0544]
[0545]
[0546]
[0547]
[0548]
[0549]
[0550]
[0551]
[0552]
[0553]
[0554]
[0555]
[0556]
[0557]
[0558]
[0559]
[0560]
[0561]
[0562]
[0563]
[0564]
[0565]
[0566]
[0567]
[0568]
[0569]
[0570]
[0571]
[0572]
[0573]
[0574]
[0575]
[0576]
[0577]
[0578]
[0579]
[0580]
[0581]
[0582]
[0583]
[0584]
[0585]
[0586]
[0587]
[0588]
[0589]
[0590]
[0591]
[0592]
[0593]
[0594]
[0595]
[0596]
<!DOCTYPE html>
<!-- WASDOC AXP-2.0.0 (CGILIB AXP-1.9.9) -->
<!-- wasDOC Copyright (C) 2019,2020 Mark G.Daniel - Apache-2.0 licenced -->
<!--  3-NOV-2021 02:50 -->
<noscript>NOTE: SOME FUNCTIONALITY EMPLOYS JAVASCRIPT</noscript>
<div id="erreport1" style="display:none;"></div>
<script>
function errorReport(string) {
   for (var cnt = 1; cnt <= 2; cnt++) {
      var err = document.getElementById('erreport'+cnt);
      err.style.display = 'block';
      err.innerHTML += string;
   }
}
</script>
<style type="text/css">
html { font-family: arial, verdana, sans-serif; font-size:12pt; margin:1em; }
h1 { font-size:124%; font-style:bold;
     margin-top:1em; margin-bottom:0.5em; }
h2 { font-size:120%; font-style:bold;
     margin-top:1.1em; margin-bottom:0.4em; }
h3 { font-size:116%; font-style:bold;
     margin-top:1.0em; margin-bottom:0.3em; }
h4 { font-size:112%; font-style:bold;
     margin-top:1.1em; margin-bottom:0.3em; }
h5 { font-size:112%; font-style:bold; 
     margin-top:1.1em; margin-bottom:0.3em; }
h6 { font-size:112%; font-style:bold; padding:0; margin:0; }

h1 .text { text-decoration:underline; }
h1 .numb { padding-right:0.8em; }
h1 .numb:empty { display:none; padding-right:0; }
h2 .numb { padding-right:0.8em; }
h2 .numb:empty { display:none; padding-right:0; }
h3 .numb { padding-right:0.8em; }
h3 .numb:empty { display:none; padding-right:0; }
h4 .numb { padding-right:0.8em; }
h4 .numb:empty { display:none; padding-right:0; }
h5 .numb { display:none; padding-right:0; }
h6 .numb { display:none; padding-right:0; }

kbd { font-family:monospace; }

noscript { font-size:1.2em; }

p { line-height:1.1em; margin-top:1em; margin-bottom:1em; }

.chunk { font-size:130%; text-decoration:underline; }
.head {}
.high {}
.bold { font-weight:bold; }
.center { text-align:center; }
.italic { font-style:italic; }
.left { text-align:left; }
.nowrap { white-space:nowrap; }
.prewrap { white-space:pre; }
.right { text-align:right; }
.strike { text-decoration:line-through; }
.under { text-decoration:underline; }

.backlight { background-color:#f2f2f2; }
.display0 { display:none; }

img { max-width:100%; }
.imglink { }

.link { }
.blank { }

.list { margin-bottom:1em; }
.list li { margin-top:0.5em; }
.list0 li { margin-top:0; }
.item {}

.tabl { border-collapse:collapse; text-align:left; margin:0.4em 2em 0.5em 2em; }
.tabu { border-collapse:collapse; text-align:right; margin:0.4em 2em 0.5em 2em; }

.tabr { vertical-align:top; }
.tabh { padding:0.2em 0 0 2em; margin:0; }
.tabd { padding:0.1em 0 0 2em; margin:0; }
.tabh:first-of-type, td:first-of-type { padding-left:0; }

.tabu .tabh,
.tabu .tabd { border:1px solid gray; padding:0.2em 0.3em 0.2em 0.3em; }
.tab0 { border:none; visibility:hidden; max-width:1em; 
        white-space:nowrap; overflow:hidden; }

.tabauto { margin-left:auto; margin-right:auto; }

.tabr:empty { height:0.2em; }
.tabu .tabh:empty, .tabu .tabd:empty { border:none; visibility:hidden; }

.error { font-size:110%; color:black; background-color:yellow;
         font-family:sans-serif; font-weight:bold; font-style:normal;
         width:95%; border:solid 1px gray; padding:0.5em 1em 0.5em 1em; }
.error::before { content:'\026a0\00a0'; }
.image { }
.page { width:98%; border:1px dashed gray; margin:1.5em 0 1.8em 0; }
.epage { width:98%; border:1px dashed black; margin:1.5em 0 1.8em 0; }
.monosp { font-family:monospace; }
.ppage { display:none; }
.simple { list-style-type:none; }
.valtop { vertical-align:top; }
.valmid { vertical-align:middle; }
.valbot { vertical-align:bottom; }

.code { border-style:solid; border-width:0 0 0 1px; padding-left:1em;
        font-family:monospace; white-space:pre; }
.block { }
.blockof { margin:0.4em 2em 0.5em 2em; }
.example { border-style:dashed; border-width:0 0 0 1px; padding-left:1em;
           margin-top:0.5em; margin-bottom:0.5em; white-space:pre; }
.indent { margin-left:2em; margin-right:2em; }
.noindent { margin-left:0; margin-right:0; }
.inblock { display:inline-block; }
.mono { white-space:pre; font-family:monospace; }
.note { margin:0.4em 2em 0.5em 2em; page-break-inside:avoid; }
.note h5 { margin-top:0 }
.note_hr { width:80%; border:1px solid gray; }
.prop { padding-left:1em; margin-top:0.5em; margin-bottom:0.5em; }
.quote { border-style:dashed; border-width:0 0 0 1px; padding-left:1em;
         margin-top:0.5em; margin-bottom:0.5em; }
.this { display:none; }

a:link,a:visited { color:black; text-decoration:none; }
a:hover,a:active { text-decoration:underline; }
a:focus { outline:0; } 

:target:before { content:''; display:block; height:0.1em; margin:-0.1em; }
a.link:link, a.link:visited,a.link:active 
{ color:midnightBlue; text-decoration:underline; text-decoration-style:solid; }

.TOC1cols1 { width:80%; max-width:80%; }
.TOC1cols2 { column-count:2; width:80%; max-width:80%; }
.TOC1cols3 { column-count:3; max-width:90%; max-width:90%; }
.TOC1cols4 { column-count:4; max-width:100%; max-width:100%; }
.TOC1table { margin-left:2em; white-space:nowrap; break-inside:auto; }
.TOC1table tr { vertical-align:top; text-align:left; break-inside:avoid; break-after:auto; }
.TOC1table td+td { padding:0 0 0 0.5em; }
.TOC1table .numb { width:3em; max-width:3em; }
.TOC1table .sepr { width:5em; max-width:6em; overflow:hidden; }
.TOC1table .majr { font-weight:bold; }
.TOC1table .text { white-space:normal; }

/* These are due to Firefox (at least <= 76) recalcitrant multi-column handling.
   Web search "Split table into css columns, issue in Firefox" (stackoverflow).
   "Good grief, Charlie Brown!" */
 
.TOC1cols2 table,
.TOC1cols2 tbody,
.TOC1cols2 tr,
.TOC1cols3 table,
.TOC1cols3 tbody,
.TOC1cols3 tr,
.TOC1cols4 table,
.TOC1cols4 tbody,
.TOC1cols4 tr { display:block; padding:0; }

.TOC2cols1 { width:60%; max-width:60%; }
.TOC2cols2 { column-count:2; width:70%; max-width:70%; }
.TOC2cols3 { column-count:3; width:80%; max-width:80%; }
.TOC2cols4 { column-count:4; width:90%; max-width:90%; }
.TOC2table { margin-left:2em; white-space:nowrap; break-inside:auto; }
.TOC2table tr { vertical-align:top; text-align:left; break-inside:avoid; break-after:auto; }
.TOC2table .numb { font-weight:bold; padding-right:0.5em; }
.TOC2table .text { width:100%; white-space:normal; }

/* see "recalcitrant" above */
.TOC2cols2 table,
.TOC2cols2 tbody,
.TOC2cols2 tr,
.TOC2cols3 table,
.TOC2cols3 tbody,
.TOC2cols3 tr,
.TOC2cols4 table,
.TOC2cols4 tbody,
.TOC2cols4 tr { display:block; padding:0; }

.NAVtable { margin:0.1em 0 0 2em; }
.NAVtable td { font-size:110%; font-weight:bold; padding:0; margin:0; }
.NAVtable a { padding:0 0.5em 0 0.5em; text-decoration:none; }

.IDXcols1 { width:80%; max-width:80%; }
.IDXcols2 { column-count:2; width:90%; max-width:90%; }
.IDXcols3 { column-count:3; width:95%; max-width:95%;  }
.IDXcols4 { column-count:4; width:100%; max-width:100%;  }
.IDXtable { margin:1em 0 1em 2em; white-space:nowrap; break-inside:auto; }
.IDXtable tr { vertical-align:top; text-align:left; break-inside:avoid; break-after:auto; }
.IDXtable .alpha { font-weight:bold; min-width:2em; }
.IDXtable .text  { width:100%; white-space:normal; }
.IDXtable .para:before { content:'\00b6\00a0'; }

/* see "recalcitrant" above */
.IDXcols2 table,
.IDXcols2 tbody,
.IDXcols2 tr,
.IDXcols3 table,
.IDXcols3 tbody,
.IDXcols3 tr,
.IDXcols4 table,
.IDXcols4 tbody,
.IDXcols4 tr { display:block; padding:0; }

.insight { background-color:cyan; font-family:monospace;
           padding:0 0.2em 0 0.2em; margin:0 0.2em 0 0.2em;
           font-size:100%; font-style:normal; font-weight:normal;
           text-decoration:none; }

.wasdoc { font-family: "Lucida Console", Monaco, monospace; 
          letter-spacing:-0.07em; }

@media screen { .blank::after { content:"\2924"; } 
                .print { display:none; }
}

@media print {
   table { page-break-inside:avoid; }
   .noprint { display:none; }
   .page { border:none; page-break-after: always; }
   .epage { display:none; }
   .ppage { page-break-after:always; }
   .NAVtable { display:none; }
   .NAVprint { display:block!important; }
}

@page { margin:2cm 1cm 2cm 1cm;  }
</style>
<!-- source:0000_env.wasdoc -->

<style type="text/css">._smiley::after { font-size:150%; vertical-align:middle; content:'\263a' }</style>
<style type="text/css">._frowny::after { font-size:150%; vertical-align:middle; content:'\2639' }</style>

<a id="0." href="#"></a>
<title>WASD Web Environment &ndash; Document Access and Specification</title>
<a id="2." href="#"></a>
<a id="2.documentaccessandspecification" href="#"></a>
<a id="documentaccessandspecification" href="#"></a>
<h1 class="head chunk">WASD Web Environment</h1>
<h1 class="head"><span class="numb">2.</span><span class="text">Document Access and Specification</span></h1>

<div class="TOC2cols2">
<table class="TOC2table">
<tr><td><a href="env002.html#2.1.documentcontenttype"><span class="numb">2.1</span><span class="text">Document Content Type</span></a>
<tr><td><a href="env002.html#2.2.explicitlyspecifyingcontenttype"><span class="numb">2.2</span><span class="text">Explicitly Specifying Content-Type</span></a>
<tr><td><a href="env002.html#2.3.documentspecification"><span class="numb">2.3</span><span class="text">Document Specification</span></a>
<tr><td><a href="env002.html#2.3.1.absolutefilepath"><span class="numb">2.3.1</span><span class="text">Absolute File Path</span></a>
<tr><td><a href="env002.html#2.3.2.partialorrelativefilepath"><span class="numb">2.3.2</span><span class="text">Partial (or Relative) File Path</span></a>
<tr><td><a href="env002.html#2.4.extendedfilespecificationsods5"><span class="numb">2.4</span><span class="text">Extended File Specifications (ODS-5)</span></a>
<tr><td><a href="env002.html#2.4.1.charactersinrequestpaths"><span class="numb">2.4.1</span><span class="text">Characters In Request Paths</span></a>
<tr><td><a href="env002.html#2.4.2.charactersinservergeneratedpaths"><span class="numb">2.4.2</span><span class="text">Characters In Server-Generated Paths</span></a>
<tr><td><a href="env002.html#2.4.3.documentcache"><span class="numb">2.4.3</span><span class="text">Document Cache</span></a>
</table>
</div>

<table class="NAVtable NAVprint"><tr>
<td><a href="javascript:window.history.back();">&#8617;&#xFE0E;</a>
<td><a href="env001.html#1.">&#8598;&#xFE0E;</a>
<td><a href="env000.html#0.">&#8593;&#xFE0E;</a>
<td><a href="env003.html#3.">&#8600;&#xFE0E;</a>
<td><a href="javascript:window.history.forward();">&#8618;&#xFE0E;</a>
</table>

<p> <span class="high bold">Arbitrary documents may not be accessed.</span>

<p> The server can only access files where the path is allowed according to a 
specified set of rules specified within the web environment.

<p> <span class="high bold">Documents must be read-accessible.</span>

<p> The server can only access files that are world readable, or that have an 
ACL specifically controlling access for &quot;HTTP&dollar;SERVER&quot;, the server 
account. 

<a id="2.1" href="#"></a>
<a id="2.1.documentcontenttype" href="#"></a>
<a id="documentcontenttype" href="#"></a>
<h2 class="head"><span class="numb">2.1</span><span class="text">Document Content Type</span></h2>

<p> Document (file) retrieval is initiated by providing the server with the 
file specification as a URL path.  Server configuration determines the format 
in which the file is returned to the client.  It may contain text or images 
immediately diplayable by the browser, or by a viewer external to the browser 
may be spawned.  The server may automatically activate a script to provide a 
gateway to non-native information (see description of [AddType] configuration
directive in the Technical Overview).  The  file type (extension) determines
the content type by which the server returns  (and/or interprets) the file. 

<p> The following table lists some of the current file types (as examples) and 
their associated MIME-style content type.  HTML documents are presented
layed-up according to the full HTML-capabilities of the browser.  Plain-text 
documents are presented in a fixed-font format.  Other types require an 
external viewer to be activated.  Here are a few examples.

<div class="blockof code">.BKB        Bookreader document (BNU)   text/html, gateway script activated
.BKS        Bookreader shelf (BNU)      text/html, gateway script activated
.C          C source                    text/plain
.COM        DCL procedure               text/plain
.CONF       configuration file          text/plain
.CPP        C++ source                  text/plain
.DECW&dollar;BOOK  Bookreader document         text/html, gateway script activated
.FOR        Fortran source              text/plain
.GIF        GIF image                   image/gif
.H          C header                    text/plain
.HLB        VMS Help library            text/html, gateway script activated
.HTML       HyperText Markup Language   text/html
.HTM        HyperText Markup Language   text/html
.JPG        JPEG image                  image/jpeg
.LIS        Listing                     text/plain
.MAR        Macro source                text/plain
.PAS        Pascal source               text/plain
.PRO        IDL source                  text/plain
.PS         PostScript                  application/PostScript
.TEXT       Text                        text/plain
.TLB        VMS text library            text/html, gateway script activated
.TXT        Text                        text/plain
.SHTML      HyperText Markup Language   pre-processed text/html
.ZIP        zipped file                 application/binary
</div>

<p> If other file types are required to be defined contact the Web
administrator.

<a id="2.2" href="#"></a>
<a id="2.2.explicitlyspecifyingcontenttype" href="#"></a>
<a id="explicitlyspecifyingcontenttype" href="#"></a>
<h2 class="head"><span class="numb">2.2</span><span class="text">Explicitly Specifying Content-Type</span></h2>

<p> When accessing files it is possible to explicitly specify the identifying
content-type to be returned to the browser in the HTTP response header.  Of
course this does not change the actual content of the file, just the header
content-type!  This is primarily provided to allow access to plain-text
documents that have obscure, non-&quot;standard&quot; or non-configured file
extensions.

<p> It could also be used for other purposes, &quot;forcing&quot; the browser to accept a
particular file as a particular content-type.  This can be useful if the
extension is not configured (as mentioned above) or in the case where the file
contains data of a known content-type but with an extension conflicting with an
already configured extension specifying data of a different content-type.

<p> Enter the file path into the browser's URL specification field (&quot;Location:&quot;,
&quot;Address:&quot;).  Then, for plain-text, append the following query string:

<div class="blockof code">?httpd=content&amp;type=text/plain
</div>

<div class="blockof mono prewrap"><a class="link blank" target="_blank" href="/wasd_root/wasdoc/env/file.unknown">/wasd_root/wasdoc/env/file.unknown</a>
</div>

<p> For another content-type substitute it appropriately.  For example, to
retrieve a text file in binary (why I can't imagine :^) use

<div class="blockof code">?httpd=content&amp;type=application/octet-stream
</div>

<div class="blockof mono prewrap"><a class="link blank" target="_blank" href="/wasd_root/wasdoc/env/file.unknown?httpd=content&amp;type=text/plain">/wasd_root/wasdoc/env/file.unknown?httpd=content&amp;type=text/plain</a>
</div>

<p> It is also posssible to &quot;force&quot; the content-type for all files in a
particular directory. See <a class="link" href="env003.html#3.3.15.specifyingcontenttype">3.3.15 Specifying Content-Type</a>.

<a id="2.2.0.0.1" href="#"></a>
<a id="2.2.ignoredcontenttype" href="#"></a>
<a id="ignoredcontenttype" href="#"></a>
<h5 class="head"><span class="text">Ignored Content-Type</span></h5>

<p> Even then some browsers and/or some operating systems and/or some version
combinations insist on ignoring the response header specified content-type and
instead seem to second-guess (often incorrectly) based on the file name
extension.  A common example is the content of DCL procedures on Windows and
up-until-fairly-recent versions of Internet Explorer.

<a id="2.2.0.0.2" href="#"></a>
<a id="2.2.fauxextension" href="#"></a>
<a id="fauxextension" href="#"></a>
<h5 class="head"><span class="text">Faux Extension</span></h5>

<p> Notwithstanding, if a '&dollar;' and then a second extension is appended
to the URI this is often sufficient to coerce the browser into displaying the
content associated with the bogus extension.  In the case of DCL procedure
access on a Windows platform try using &quot;&dollar;.txt&quot;, or for other purposes
whatever extension fits the requirement, as in the following examples.

<div class="blockof mono prewrap"><a class="link blank" target="_blank" href="/wasd_root/src/build_all.com$.txt">/wasd_root/src/build_all.com&dollar;.txt</a>
<a class="link blank" target="_blank" href="/wasd_root/src/build_all.com$.anythingatall">/wasd_root/src/build_all.com&dollar;.anythingatall</a>
</div>

WASD specially handles a URI in this format when the requested resource is
not found by internally stripping the &quot;&dollar;.&quot; extension and attempting to
access the resultant file name again.  This technique works for file based
resources and not for scripts, etc.

<a id="2.3" href="#"></a>
<a id="2.3.documentspecification" href="#"></a>
<a id="documentspecification" href="#"></a>
<h2 class="head"><span class="numb">2.3</span><span class="text">Document Specification</span></h2>

<p> For the &quot;http:&quot; protocol, file and directory locations are specified using
URL path syntax where slash-separated (&quot;/&quot;) elements delineate a hierarchy
leading to a data item.  Anyone familiar with the syntax of the Unix file
system, or the MS-DOS file system (where back-slashes are hierarchy
delimiters), will feel at home with URL syntax.  Specifications under VMS are
not case-sensitive. 

<p> A VMS directory specification 

<div class="blockof code">WEB:[TECHNICAL.HTML-PRIMER]
</div>

would be represented in URL syntax as

<div class="blockof code">/web/technical/html-primer/
</div>
 and a VMS file specification 

<div class="blockof code">WEB:[TECHNICAL.HTML-PRIMER]HTML-PRIMER.HTML
</div>

represented as

<div class="blockof code">/web/technical/html-primer/html-primer.html
</div>

<a id="2.3.0.0.0.1" href="#"></a>
<a id="2.3.masterfiledirectory000000" href="#"></a>
<a id="masterfiledirectory000000" href="#"></a>
<h6 class="head display0"><span class="text">Master file directory [000000]</span></h6>
<div class="note">
<a id="2.3.0.0.1" href="#"></a>
<a id="2.3.000000" href="#"></a>
<a id="000000" href="#"></a>
<h5 class="head center"><span class="text">[000000]</span></h5>
<hr class="note_hr">
It is not required (although not forbidden) to supply a VMS <span class="high italic">master 
file directory</span> component (&quot;[000000]&quot;, &quot;[000000.&quot;, etc.) in a 
URL specification.  Hence the file specification 
<div class="blockof code">WEB:[000000]HOME.HTML
</div>
should be represented as
<div class="blockof code">/web/home.html
</div>
<hr class="note_hr">
</div>
 
<a id="2.3.1" href="#"></a>
<a id="2.3.1.absolutefilepath" href="#"></a>
<a id="absolutefilepath" href="#"></a>
<h3 class="head"><span class="numb">2.3.1</span><span class="text">Absolute File Path</span></h3>

<p> A file may be specified using an <span class="high italic">absolute</span>, or full path.  This 
must specify the location of the file exactly.  Absolute paths 
<span class="high bold">always</span> begin with a forward-slash (&quot;/&quot;).  For example: 

<div class="blockof code">/web/committee/minutes/1994/1994-09-27.txt
/web/committee/constitution.txt
/web/committee/membership/fred-bloggs.txt
</div>

<a id="2.3.2" href="#"></a>
<a id="2.3.2.partialorrelativefilepath" href="#"></a>
<a id="partialorrelativefilepath" href="#"></a>
<h3 class="head"><span class="numb">2.3.2</span><span class="text">Partial (or Relative) File Path</span></h3>

<p> <span class="high italic">(Strictly speaking, it is a function of the client to 
construct a full URL from such a relative URL before sending the request to 
the server.)</span>

<p> A file may be specified <span class="high italic">relative</span> to its current location.  
That is, a current document (or menu) may specify another document file 
relative to itself.  This may be at the current level, a subdirectory, or in 
another part of the directory tree related to the current.  Relative paths 
<span class="high bold">never</span> begin with forward-slash (&quot;/&quot;). 

<p> For example, documents at the same level as the current may be specified 
without any hierachy being indicated: 

<div class="blockof code">1994-07-22.txt
1994-08-24.txt
1994-09-27.txt
</div>

<p> Documents at an inferior point in the hierarchy may be specified as in the 
following example: 

<div class="blockof code">1993/1993-02-17.txt
1993/reports/membership.txt
other/etc.txt
</div>

<p> Documents in a related part of the hierarchy may be referenced using the 
&quot;<span class="high bold">./</span>&quot; construct.  As with MS-DOS and Unix this syntax 
indicates the immediately superior directory. 

<div class="blockof code">../other_committee/1993/1993-02-17.txt
../other_committee/1993/reports/balance-sheet.txt
../../other_section/committee/constitution.txt
</div>

<a id="2.4" href="#"></a>
<a id="2.4.extendedfilespecificationsods5" href="#"></a>
<a id="extendedfilespecificationsods5" href="#"></a>
<h2 class="head"><span class="numb">2.4</span><span class="text">Extended File Specifications (ODS-5)</span></h2>

<p> OpenVMS Alpha V7.2 introduced a new on-disk file system structure, ODS-5. 
This brings to VMS in general, and WASD and other Web servers in particular, a
number of issues regarding the handling of characters previously not
encountered during (ODS-2) file system activities.

<a id="2.4.1" href="#"></a>
<a id="2.4.1.charactersinrequestpaths" href="#"></a>
<a id="charactersinrequestpaths" href="#"></a>
<h3 class="head"><span class="numb">2.4.1</span><span class="text">Characters In Request Paths</span></h3>

<p> There is a standard for characters used in HTTP requests paths and query
strings (URLs).  This includes conventions for the handling of reserved
characters, for example &quot;?&quot;, &quot;+&quot;, &quot;&amp;&quot;, &quot;=&quot; that have specific meanings in a
request,  characters that are completely forbidden, for example white-space,
control characters (0x00 to 0x1f), and others that have usages by convention,
for example the &quot;~&quot;, commonly used to indicate a username mapping.  The request
can otherwise contain these characters provided they are URL-encoded (i.e. a
percentage symbol followed by two hexadecimal digits representing the
hexadecimal-encoded character value).

<p> There is also an RMS standard for handling characters in extended file
specifications, some of which are forbidden in the ODS-2 file naming
conventions, and others which have a reserved meaning to either the
command-line interpreter (e.g. the space) or the file system structure (e.g.
the &quot;:&quot;, &quot;[&quot;, &quot;]&quot; and &quot;.&quot;).  Generally the allowed but reserved characters can
be used in ODS-5 file names if escaped using the &quot;^&quot; character.  For example,
the ODS-2 file name &quot;THIS_AND_THAT.TXT&quot; could be named &quot;This^_^&amp;^_That.txt&quot; on
an ODS-5 volume.  More complex rules control the use of character combinations
with significance to RMS, for instance multiple periods.  The following file
name is allowed on an ODS-5 volume, &quot;A-GNU-zipped-TAR-archive^.tar.gz&quot;, where
the non-significant period has been escaped making it acceptable to RMS.

<p> The WASD server will accept request paths for file specifications in both
formats, URL-encoded and RMS-escaped.  Of course characters absolutely
forbidden in request paths must still be URL-encoded, the most obvious example
is the space.  RMS will accept the file name &quot;This^ and^ that.txt&quot; (i.e.
containing escaped spaces) but the request path would need to be specified as
&quot;This%20and%20that.txt&quot;, or possibly &quot;This^%20and^%20that.txt&quot; although the RMS
escape character is basically redundant.

<p> Unlike for ODS-2 volumes, ODS-5 volumes do not have &quot;invalid&quot; characters,
so unlike with ODS-2 no processing is performed by the server to ensure RMS
compliance.

<a id="2.4.2" href="#"></a>
<a id="2.4.2.charactersinservergeneratedpaths" href="#"></a>
<a id="charactersinservergeneratedpaths" href="#"></a>
<h3 class="head"><span class="numb">2.4.2</span><span class="text">Characters In Server-Generated Paths</span></h3>

<p> When the server generates a path to be returned to the browser, either in a
viewable page such as a directory listing or error message, or as a part of the 
HTTP transaction such as a redirection, the path will contain the URL-encoded
equivalent of the <span class="high italic">canonical form</span> of an extended file specification escaped
character.  For example, the file name &quot;This^_and^_that.txt&quot; will be
represented by &quot;This%20and%20that.txt&quot;.

<p> When presenting a file name in a viewable page the general rule is to also
provide this URL-equivalent of the unescaped file name, with a small number of
exceptions.  The first is a directory listing where VMS format has been
requested by including a version component in the request file specification. 
The second is in similar fashion, but with the <span class="high italic">tree</span> facility, displaying a
directory tree.  The third is in the navigation page of the <span class="high italic">UPDate</span> menu. 
In all of the instances the canonical form of the extended file specification
is presented (although any actual reference to the file is URL-encoded as
described above). 

<a id="2.4.3" href="#"></a>
<a id="2.4.3.documentcache" href="#"></a>
<a id="documentcache" href="#"></a>
<h3 class="head"><span class="numb">2.4.3</span><span class="text">Document Cache</span></h3>

<p> The Web server is most commonly set up to cache static documents (files). 
A cache is higher speed storage, in-memory, in the server itself.  Cached
documents are checked periodically for changes when being requested.  Changes
to a file are determined by the comparing the modification date/time and file
length.  A common check period is one minute, though it can set longer or even
disabled.  If a document has changed the old one is discarded from cache
(called invalidation) and the new one loaded into cache while being transfered
to the client.

<p> After making changes to a document it is possible the server will continue
to serve the old one for a short period.  This can be overridden by using the
browser's <span class="high italic">Reload</span> facility.  This directs the server to go and check
the on-disk file regardless, invalidating it if necessary.
<!-- source:0300_DIRECTORY.WASDOC -->

<table class="NAVtable NAVprint"><tr>
<td><a href="javascript:window.history.back();">&#8617;&#xFE0E;</a>
<td><a href="env001.html#1.">&#8598;&#xFE0E;</a>
<td><a href="env000.html#0.">&#8593;&#xFE0E;</a>
<td><a href="env003.html#3.">&#8600;&#xFE0E;</a>
<td><a href="javascript:window.history.forward();">&#8618;&#xFE0E;</a>
</table>