-
Notifications
You must be signed in to change notification settings - Fork 0
/
arg.html
186 lines (142 loc) · 6 KB
/
arg.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta name="keywords" content="Yaws"/>
<title>Yaws</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<link rel="stylesheet" type="text/css" href="stil.css"/>
<link rel="shortcut icon" href="/icons/yaws_y.gif" type="image/x-icon"/>
</head>
<body>
<div class="logo">
<img src="icons/yaws_head.gif" width="600" alt="YAWS"/>
</div>
<div id="sidebar">
<h4> Yaws </h4>
<div class=""> <a href="index.html" id="index" >Top Page</a> </div>
<div class=""> <a href="configuration.html" id="configuration">Build Config and Run</a></div>
<div class=""> <a href="dynamic.html" id="dynamic" >Dynamic Content</a> </div>
<div class=""> <a href="https://github.com/erlyaws/yaws/releases/" id="download">Download </a> </div>
<div class=""> <a href="contact.html" id="contact">Contact </a> </div>
<div class=""> <a href="doc.html" id="doc">Documentation</a> </div>
<div class=""> <a href="articles.html" id="resources">Articles</a> </div>
<h4> Examples </h4>
<div class=""> <a href="/json_intro.html">AJAX/JSON RPC</a></div>
<div class=""> <a href="/appmods.html">Appmods</a> </div>
<div class="choosen"> <a href="/arg.html">Arg</a> </div>
<div class=""> <a href="/privbind.html">Binding to Privileged Ports</a></div>
<div class=""> <a href="/bindings.html">Bindings</a> </div>
<div class=""> <a href="/cgi.html">CGI</a></div>
<div class=""> <a href="/session.html">Cookie Sessions</a> </div>
<div class=""> <a href="/cookies.html">Cookies</a> </div>
<div class=""> <a href="/dynamic.html">Dynamic Content</a> </div>
<div class=""> <a href="/embed.html">Embedding Yaws</a></div>
<div class=""> <a href="/upload0.html">File Upload</a> </div>
<div class=""> <a href="/form.html">Forms</a> </div>
<div class=""> <a href="/haxe_intro.html">haXe Remoting</a></div>
<div class=""> <a href="/pcookie.html">Persistent Cookies</a> </div>
<div class=""> <a href="/query.html">Query Part of URL</a></div>
<div class=""> <a href="/rebar_release.html">Rebar Releases</a></div>
<div class=""> <a href="/redirect.html">Redirect</a> </div>
<div class=""> <a href="/server_sent_events.html">Server-Sent Events</a> </div>
<div class=""> <a href="/ssi.html">Server Side Includes</a> </div>
<div class=""> <a href="/simple.html">Simple</a> </div>
<div class=""> <a href="/soap_intro.html">SOAP with Yaws</a></div>
<div class=""> <a href="/stream.html">Streaming Data</a> </div>
<div class=""> <a href="/websockets.html">Web Sockets</a> </div>
<a href="/shoppingcart/index.html">Tiny Shopping Cart</a>
<div class=""> <a href="/yapp_intro.html">Yaws Applications (yapps)</a></div>
<div class=""> <a href="/logger_mod.html">Write Your Own Logger</a></div>
<h4> Misc </h4>
<div class=""> <a href="/internals.html">Internals</a> </div>
</div>
<div id="entry">
<h2> The Arg </h2>
<p>This page displays the Arg #arg structure
supplied to the out/1 function.
</p>
<p> The #arg structure is a very important datastructure for the
yaws programmer. It is the main mechanism whereby the server can pass
data to the web application. There are several data items
which are of interest to the webapplication, such as which headers
were sent from the client, etc.
The #arg recored is defined in <tt>yaws_api.hrl</tt> and is defined as:
</p>
<div class="box">
<pre>
-record(arg, {
clisock, %% the socket leading to the peer client
client_ip_port, %% {Ip, Port} for the client
headers, %% headers
req, %% request
orig_req, %% original request
clidata, %% The client data (as a binary in POST requests)
server_path, %% The normalized server path
querydata, %% Was the URL on the form of ...?query (GET reqs)
appmoddata, %% the remainder of the path leading up to the query
docroot, %% where's the data
fullpath, %% full deep path to yaws file
cont, %% Continuation for chunked multipart uploads
state, %% State for use by users of the out/1 callback
pid, %% pid of the yaws worker process
opaque, %% useful to pass static data
appmod_prepath, %% path in front of: <appmod><appmoddata>
pathinfo %% Set to 'd/e' when calling c.yaws for the request
%% http://some.host/a/b/c.yaws/d/e
}).
</pre>
</div>
<p> As we have seen is several previous examples,
the <tt> out/1</tt> function
defined in .yaws files, gets invoked with a single argument which is
a #arg{} record, fitting the specific HTTP request being served.
</p>
<p> The code to display the #arg{} record
is in defined in file <a href="code.yaws?file=/arg2.html">arg2.yaws</a>
and is invoked at <a href="arg2.html">arg2.yaws</a>
</p>
<h5>The headers passed to us were:</h5>
<hr></hr>
<ol>
<li>
<p>Connection: Keep-Alive</p></li>
<li>
<p>Accept: */*</p></li>
<li>
<p>Host: localhost:8000</p></li>
<li>
<p>Referer: http://localhost:8000/</p></li>
<li>
<p>User-Agent: Wget/1.24.5</p></li>
<li>
<p>Accept-Encoding: identity</p></li></ol>
<h5>The request</h5>
<ul>
<li>method: GET</li>
<li>path: {abs_path,"/arg.yaws"}</li>
<li>version: {1,1}</li></ul>
<hr></hr>
<h5>Other items</h5>
<ul>
<li>Peer: {{127,0,0,1},59460}</li>
<li>docroot: /home/avtobiff/src/github/avtobiff/yaws/build/gh-pages.Puku/_inst/var/yaws/www</li>
<li>fullpath: /home/avtobiff/src/github/avtobiff/yaws/build/gh-pages.Puku/_inst/var/yaws/www/arg.yaws</li></ul>
<hr></hr>
<h5>Parsed query data</h5>
<pre>[]</pre>
<hr></hr>
<h5>Parsed POST data </h5>
<pre>[]</pre>
</div>
<div class="logo">
<img src="/icons/yaws_pb.gif" alt="pbyaws" />
</div>
<p>
<a href="https://validator.w3.org/check?uri=referer"><img
src="https://www.w3.org/Icons/valid-xhtml10"
alt="Valid XHTML 1.0!" height="31" width="88" /></a>
</p>
</body>
</html>