Subversion Repositories planix.SVN

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
.TH HTTPD 8
2
.SH NAME
3
httpd, save, imagemap, man2html, webls \- HTTP server
4
.SH SYNOPSIS
5
.B ip/httpd/httpd
6
.RB [ -a
7
.IR srvaddr ]
8
.RB [ -c
9
.I cert
10
.RB [ -C
11
.IR certchain ]]
12
.RB [ -d
13
.IR domain ]
14
.RB [ -n
15
.IR namespace ]
16
.RB [ -w
17
.IR webroot ]
18
.PP
19
.B ip/httpd/save
20
.RB [ -b
21
.IR inbuf ]
22
.RB [ -d
23
.IR domain ]
24
.RB [ -r
25
.IR remoteip ]
26
.RB [ -w
27
.IR webroot ]
28
.RB [ -N
29
.IR netdir ]
30
.I method version uri
31
.RI [ search ]
32
.br
33
.B ip/httpd/imagemap
34
.I ...
35
.br
36
.B ip/httpd/man2html
37
.I ...
38
.br
39
.B ip/httpd/webls
40
.I ...
41
.SH DESCRIPTION
42
.I Httpd
43
serves the
44
.I webroot
45
directory of the file system described by
46
.I namespace
47
(default
48
.BR /lib/namespace.httpd ),
49
using version 1.1 of the HTTP protocol.
50
It announces the service
51
.I srvaddr
52
(default
53
.BR tcp!*!http ),
54
and listens for incoming calls.
55
If an X.509 certificate is supplied with the
56
.B -c
57
option, then the service is instead
58
.BR tcp!*!https .
59
There should already be a factotum
60
holding the corresponding private key.
61
If the specified certificate has been signed
62
by a certificate authority, the
63
.B -C
64
option may be used to specify a file
65
containing a chain of signed certificates.
66
.PP
67
.I Httpd
68
supports only the GET and HEAD methods of the HTTP protocol;
69
some magic programs support POST as well.
70
Persistent connections are supported for HTTP/1.1 or later clients;
71
all connections close after a magic command is executed.
72
The Content-type
73
(default
74
.BR application/octet-stream )
75
and Content-encoding
76
(default
77
.BR binary )
78
of a file are determined by looking for suffixes of the file name in
79
.BR /sys/lib/mimetype .
80
.SS Redirection
81
.PP
82
Each requested URI is looked up in a redirection table, read from
83
.BR /sys/lib/httpd.rewrite .
84
Fields are separated by spaces and tabs.
85
Anything following a
86
.L #
87
is ignored.
88
The first field of each line is a URI;
89
the second a replacement path.
90
If a prefix of the URI matches a redirection path,
91
the URI is rewritten using the corresponding replacement path
92
instead of the prefix,
93
and a temporary redirect is sent to the HTTP client.
94
If the replacement path does not specify a server name,
95
and the request has no explicit host,
96
then
97
.I domain
98
is the host name used in the redirection.
99
The prefix can either be a domain root like
100
.B http://system/
101
(which matches that URL only)
102
or a path like
103
.B /who/rob
104
(which matches that path no matter what
105
the requested server),
106
but not both:
107
.B http://system/who/rob
108
will never match a request.
109
If the first field ends in a slash, this is an exact match;
110
otherwise it is a prefix match.
111
The first field is a literal string, matched against
112
each file prefix of each URL.
113
The most specific, i.e., longest,
114
pattern wins, and is applied once (there is no rescanning),
115
except for the following exceptions.
116
.I Httpd
117
matches only the prefix and not subordinate pages
118
if a replacement is prefixed with 
119
.LR > .
120
.I Httpd
121
omits the unmatched part of the original URI
122
from the rewritten URI if the replacement is prefixed with 
123
.LR * .
124
This permits many-to-one mappings; for example,
125
to send all references to an old subtree to a single error page.
126
.PP
127
.I Httpd
128
handles replacements prefixed with 
129
.L @ 
130
internally,
131
treating the request as if it were for the replacement
132
(without the
133
.BR @ )
134
but not informing the client of the rewritten name.
135
Replacement URLs prefixed with 
136
.L =
137
generate a permanent redirection instead of a temporary one.
138
.I Httpd
139
checks to see if this file has changed once every 50 new TCP connections.
140
HTTP 1.1 persistent connection implies many pages
141
may come in one browser connection, so to kick-start
142
.IR httpd ,
143
try
144
.IP
145
.EX
146
for(i in `{seq 50}) hget http://www.your-domain.com/ >/dev/null
147
.EE
148
.SS "Access Control"
149
.PP
150
Before opening any file,
151
.I httpd
152
looks for a file in the same directory called
153
.BR .httplogin .
154
If the file exists, the directory is considered
155
locked and the client must specify a user name
156
and password matching a pair in the file.
157
.B .httplogin
158
contains a list of space or newline separated tokens, each
159
possibly delimited by single quotes.  The first
160
is a domain name presented to the HTTP client.
161
The rest are pairs of user name and password.
162
Thus, there can be many user name/password pairs
163
valid for a directory.
164
.br
165
.ne 3
166
.SS "Auxiliaries (magic)"
167
.PP
168
If the requested URI begins with
169
.BI  /magic/ server /\f1,
170
.I httpd
171
executes the file
172
.BI /bin/ip/httpd/ server
173
to finish servicing the request.
174
All the auxiliaries take the same arguments.
175
.IR Method
176
and
177
.IR version
178
are those received on the first line of the request.
179
.I Uri
180
is the remaining portion of the requested URI.
181
.I Inbuf
182
contains the rest of the bytes read by the server,
183
and
184
.I netdir
185
is the network directory for the connection.
186
There are routines for processing command arguments,
187
parsing headers, etc. in the httpd library,
188
.BR /sys/src/cmd/ip/httpd/libhttpd.a.$O .
189
See
190
.B httpd.h
191
in that directory and existing magic commands for more details.
192
.PP
193
.I Save
194
writes a line to
195
.BI /usr/web/save/ uri .data
196
and returns the contents of
197
.BI /usr/web/save/ uri .html.
198
Both files must be accessible for the request to succeed.
199
The saved line includes the current time
200
and either the search string from a HEAD or GET
201
or the first line of the body from a POST.
202
It is used to record form submissions.
203
.PP
204
.I Imagemap
205
processes an HTML imagemap query.
206
It looks up the point
207
.I search
208
in the image map file given by 
209
.IR uri ,
210
and returns a redirection to the appropriate page.
211
The map file defaults to NCSA format.
212
Any entries after a line starting with the word
213
.B #cern
214
are interpreted in CERN format.
215
.PP
216
.I Man2html
217
converts
218
.IR man (6)
219
format manual pages into html.
220
It includes some abilities to search the manuals.
221
.PP
222
.I Webls
223
produces directory listings on the fly, with
224
output in the style of
225
.IR ls (1).
226
.B /sys/lib/webls.allowed
227
and
228
.B /sys/lib/webls.denied
229
contain regular expressions describing
230
what parts of
231
.I httpd's
232
namespace may and may not be listed, respectively.
233
.B Webls.denied
234
is first searched to see if access is by default
235
denied.  If so
236
.B webls.allowed
237
is then searched to see if access is explicitly allowed.
238
Thus one can have very general expressions in the
239
denied list (like
240
.BR .* ),
241
yet still allow exceptions.  If
242
.B webls.denied
243
does not exist or is unreadable, 
244
all accesses are assumed to be denied unless
245
explicitly allowed in
246
.B webls.allowed.
247
.PP
248
Other sites will note that if neither
249
.B webls.denied
250
nor
251
.B webls.allowed
252
exist, any portion of
253
.I httpd's
254
namespace can be listed (however,
255
.I webls
256
will always endeavor to prevent listing of `.' and `..').
257
If
258
.B webls.allowed
259
exists but
260
.B webls.denied
261
does not, any directory to be listed must be described
262
by a regular expression in
263
.BR webls.allowed .
264
Similarly, if
265
.B webls.denied
266
exists but
267
.B webls.allowed
268
does not, any directory to be listed must
269
.I not
270
be described by a regular expression in
271
.BR webls.denied .
272
If both exist, a directory is listable if either
273
it doesn't appear in
274
.BR webls.denied ,
275
or it appears in both
276
.B webls.denied
277
and
278
.BR webls.allowed .
279
In other words,
280
.B webls.allowed
281
overrides
282
.BR webls.denied .
283
If a listing for a directory is requested and access
284
is denied, or another error occurs, a simple error
285
page is returned.
286
.SH EXAMPLES
287
These are all examples of how to use
288
.BR httpd.rewrite .
289
.PP
290
A local redirection:
291
.RS
292
.EX
293
/netlib/c++/idioms/index.html.Z /netlib/c++/idioms/index.html
294
.EE
295
.RE
296
.PP
297
Redirection to another site:
298
.RS
299
.EX
300
/netlib/lapack/lawns		=http://netlib.org/lapack/lawns
301
http://inferno.bell-labs.com	=http://www.vitanuova.com
302
.EE
303
.RE
304
.PP
305
Root directory for virtual host:
306
.RS
307
.EX
308
http://www.ampl.com		/cm/cs/what/ampl
309
.EE
310
.RE
311
.SH FILES
312
.TF /sys/lib/httpd.rewrite
313
.TP
314
.B /sys/lib/mimetype
315
content type description file
316
.TP
317
.B /lib/namespace.httpd
318
default namespace file for httpd
319
.TP
320
.B /sys/lib/httpd.rewrite
321
redirection file
322
.TP
323
.B /sys/lib/webls.allowed
324
regular expressions describing explicitly listable pathnames; overrides
325
.B webls.denied
326
.TP
327
.B /sys/lib/webls.denied
328
regular expressions describing explicitly unlistable pathnames
329
.SH SOURCE
330
.B /sys/src/cmd/ip/httpd
331
.SH "SEE ALSO"
332
.I newns
333
in
334
.IR auth (2),
335
.IR listen (8),
336
.IR rsa (8)