Mercurial > hg > nginx-site
comparison xml/ru/docs/njs/reference.xml @ 2295:a1d0238ffb61
Updated HTTP and stream objects in Russian njs reference.
author | Yaroslav Zhuravlev <yar@nginx.com> |
---|---|
date | Tue, 27 Nov 2018 19:04:53 +0300 |
parents | 65c6c1ee3c78 |
children | 3a8d96efece6 |
comparison
equal
deleted
inserted
replaced
2294:58df9b14b8ec | 2295:a1d0238ffb61 |
---|---|
19 </para> | 19 </para> |
20 | 20 |
21 </section> | 21 </section> |
22 | 22 |
23 | 23 |
24 <section id="http" name="HTTP"> | 24 <section id="http_stream" name="Объекты nginx"> |
25 | |
26 | |
27 <section id="http" name="HTTP-запрос"> | |
25 | 28 |
26 <para> | 29 <para> |
27 Объект <literal>HTTP</literal> доступен только в | 30 Объект <literal>HTTP</literal> доступен только в |
28 модуле <link doc="../http/ngx_http_js_module.xml">ngx_http_js_module</link>. | 31 модуле <link doc="../http/ngx_http_js_module.xml">ngx_http_js_module</link>. |
29 Все строки в объекте <literal>HTTP</literal> являются | 32 Все строки в объекте <literal>HTTP</literal> являются |
30 <link id="strings">байтовыми строками</link>. | 33 <link id="string">байтовыми строками</link>. |
31 </para> | 34 |
32 | |
33 | |
34 <section id="http_request" name="Запрос"> | |
35 | |
36 <para> | |
37 <list type="tag"> | 35 <list type="tag"> |
38 | 36 |
39 <tag-name><literal>r.args{}</literal></tag-name> | 37 <tag-name><literal>r.args{}</literal></tag-name> |
40 <tag-desc> | 38 <tag-desc> |
41 объект аргументов запроса, только чтение | 39 объект аргументов запроса, только чтение |
52 завершает отправку ответа клиенту | 50 завершает отправку ответа клиенту |
53 </tag-desc> | 51 </tag-desc> |
54 | 52 |
55 <tag-name><literal>r.headersIn{}</literal></tag-name> | 53 <tag-name><literal>r.headersIn{}</literal></tag-name> |
56 <tag-desc> | 54 <tag-desc> |
57 объект исходящих заголовков, только чтение. | 55 объект входящих заголовков, только чтение. |
58 <para> | 56 <para> |
59 Например, доступ к заголовку <literal>Header-Name</literal> | 57 Например, доступ к заголовку <literal>Foo</literal> |
60 можно получить при помощи синтаксиса <literal>headers['Header-Name']</literal> | 58 можно получить при помощи синтаксиса <literal>headersIn.foo</literal> |
61 или <literal>headers.Header_name</literal> | 59 или <literal>headersIn['Foo']</literal> |
62 </para> | 60 </para> |
63 </tag-desc> | 61 </tag-desc> |
64 | 62 |
65 <tag-name><literal>r.headersOut{}</literal></tag-name> | 63 <tag-name><literal>r.headersOut{}</literal></tag-name> |
66 <tag-desc> | 64 <tag-desc> |
67 объект исходящих заголовков, доступно для записи. | 65 объект исходящих заголовков, доступно для записи. |
68 <para> | 66 <para> |
69 Например, доступ к заголовку <literal>Header-Name</literal> | 67 Например, доступ к заголовку <literal>Foo</literal> |
70 можно получить при помощи синтаксиса <literal>headers['Header-Name']</literal> | 68 можно получить при помощи синтаксиса <literal>headersOut.foo</literal> |
71 или <literal>headers.Header_name</literal> | 69 или <literal>headersOut['Foo']</literal> |
72 </para> | 70 </para> |
73 </tag-desc> | 71 </tag-desc> |
74 | 72 |
75 <tag-name><literal>r.httpVersion</literal></tag-name> | 73 <tag-name><literal>r.httpVersion</literal></tag-name> |
76 <tag-desc> | 74 <tag-desc> |
81 <tag-desc> | 79 <tag-desc> |
82 записывает <literal>строку</literal> в лог-файл ошибок | 80 записывает <literal>строку</literal> в лог-файл ошибок |
83 на уровне лога <literal>info</literal> | 81 на уровне лога <literal>info</literal> |
84 </tag-desc> | 82 </tag-desc> |
85 | 83 |
84 <tag-name id="r_internal_redirect"><literal>r.internalRedirect(<value>uri</value>)</literal></tag-name> | |
85 <tag-desc> | |
86 осуществляет внутреннее перенаправление на указанный <literal>uri</literal>. | |
87 Если uri начинается с префикса “<literal>@</literal>”, | |
88 то он считается именованным location. | |
89 </tag-desc> | |
90 | |
86 <tag-name><literal>r.method</literal></tag-name> | 91 <tag-name><literal>r.method</literal></tag-name> |
87 <tag-desc> | 92 <tag-desc> |
88 HTTP метод, только чтение | 93 HTTP метод, только чтение |
89 </tag-desc> | 94 </tag-desc> |
90 | 95 |
96 <tag-name><literal>r.remoteAddress</literal></tag-name> | 101 <tag-name><literal>r.remoteAddress</literal></tag-name> |
97 <tag-desc> | 102 <tag-desc> |
98 адрес клиента, только чтение | 103 адрес клиента, только чтение |
99 </tag-desc> | 104 </tag-desc> |
100 | 105 |
101 <tag-name><literal>r.requestBody</literal></tag-name> | 106 <tag-name id="r_request_body"><literal>r.requestBody</literal></tag-name> |
102 <tag-desc> | 107 <tag-desc> |
103 хранит тело запроса, только чтение | 108 возвращает тело запроса клиента, если оно не было |
109 записано во временный файл. | |
110 Чтобы убедиться, что тело запроса клиента находится в памяти, | |
111 его размер должен быть ограничен | |
112 <link doc="../http/ngx_http_core_module.xml" id="client_max_body_size"/>, | |
113 и также необходимо установить достаточный размер буфера при помощи | |
114 <link doc="../http/ngx_http_core_module.xml" id="client_body_buffer_size"/>. | |
104 </tag-desc> | 115 </tag-desc> |
105 | 116 |
106 <tag-name><literal>r.responseBody</literal></tag-name> | 117 <tag-name><literal>r.responseBody</literal></tag-name> |
107 <tag-desc> | 118 <tag-desc> |
108 хранит тело ответа <link id="subrequest">подзапроса</link>, только чтение | 119 хранит тело ответа <link id="subrequest">подзапроса</link>, только чтение. |
120 Размер <literal>r.responseBody</literal> ограничивается директивой | |
121 <link doc="../http/ngx_http_core_module.xml" id="subrequest_output_buffer_size"/>. | |
109 </tag-desc> | 122 </tag-desc> |
110 | 123 |
111 <tag-name><literal>r.return(код[, строка])</literal></tag-name> | 124 <tag-name><literal>r.return(код[, строка])</literal></tag-name> |
112 <tag-desc> | 125 <tag-desc> |
113 отправляет | 126 отправляет |
124 отправляет часть тела ответа клиенту | 137 отправляет часть тела ответа клиенту |
125 </tag-desc> | 138 </tag-desc> |
126 | 139 |
127 <tag-name><literal>r.sendHeader()</literal></tag-name> | 140 <tag-name><literal>r.sendHeader()</literal></tag-name> |
128 <tag-desc> | 141 <tag-desc> |
129 отправляет заголовок HTTP клиенту | 142 отправляет заголовки HTTP клиенту |
130 </tag-desc> | 143 </tag-desc> |
131 | 144 |
132 <tag-name><literal>r.status</literal></tag-name> | 145 <tag-name><literal>r.status</literal></tag-name> |
133 <tag-desc> | 146 <tag-desc> |
134 статус, доступно для записи | 147 статус, доступно для записи |
135 </tag-desc> | 148 </tag-desc> |
136 | 149 |
137 <tag-name><literal>req.variables{}</literal></tag-name> | 150 <tag-name><literal>r.variables{}</literal></tag-name> |
138 <tag-desc> | 151 <tag-desc> |
139 объект переменных nginx, только чтение | 152 объект переменных nginx, только чтение |
140 </tag-desc> | 153 </tag-desc> |
141 | 154 |
142 <tag-name><literal>r.warn(<value>строка</value>)</literal></tag-name> | 155 <tag-name><literal>r.warn(<value>строка</value>)</literal></tag-name> |
152 | 165 |
153 <tag-name id="subrequest"><literal>r.subrequest(<value>uri</value>[, | 166 <tag-name id="subrequest"><literal>r.subrequest(<value>uri</value>[, |
154 <value>options</value>[, <value>callback</value>]])</literal></tag-name> | 167 <value>options</value>[, <value>callback</value>]])</literal></tag-name> |
155 <tag-desc> | 168 <tag-desc> |
156 создаёт подзапрос с заданными <literal>uri</literal> и | 169 создаёт подзапрос с заданными <literal>uri</literal> и |
157 <literal>options</literal> и | 170 <literal>options</literal> и устанавливает |
158 устанавливает необязательный <literal>callback</literal> завершения. | 171 необязательный <literal>callback</literal> завершения. |
159 | 172 |
160 <para> | 173 <para> |
161 Если <literal>options</literal> является строкой, то в ней | 174 Если <literal>options</literal> является строкой, то в ней |
162 содержится срока аргументов подзапроса. | 175 содержится срока аргументов подзапроса. |
163 В противном случае ожидается, что <literal>options</literal> является объектом | 176 В противном случае ожидается, что <literal>options</literal> является |
164 со следующими ключами: | 177 объектом со следующими ключами: |
165 | |
166 <list type="tag"> | 178 <list type="tag"> |
167 <tag-name><literal>args</literal></tag-name> | 179 <tag-name><literal>args</literal></tag-name> |
168 <tag-desc> | 180 <tag-desc> |
169 строка с аргументами | 181 строка с аргументами |
170 </tag-desc> | 182 </tag-desc> |
171 | |
172 <tag-name><literal>body</literal></tag-name> | 183 <tag-name><literal>body</literal></tag-name> |
173 <tag-desc> | 184 <tag-desc> |
174 тело запроса | 185 тело запроса |
175 </tag-desc> | 186 </tag-desc> |
176 | 187 |
177 <tag-name><literal>method</literal></tag-name> | 188 <tag-name><literal>method</literal></tag-name> |
178 <tag-desc | 189 <tag-desc> |
179 >метод HTTP | 190 метод HTTP |
180 </tag-desc> | 191 </tag-desc> |
181 | 192 |
182 </list> | 193 </list> |
183 </para> | 194 </para> |
184 | 195 |
192 </list> | 203 </list> |
193 </para> | 204 </para> |
194 | 205 |
195 </section> | 206 </section> |
196 | 207 |
197 </section> | 208 |
198 | 209 <section id="stream" name="Stream-сессия"> |
199 | 210 |
200 <section id="stream" name="Stream"> | 211 <para> |
201 | 212 Объект stream-сессии доступен только в |
202 <para> | |
203 Объект <literal>stream</literal> доступен только в | |
204 модуле | 213 модуле |
205 <link doc="../stream/ngx_stream_js_module.xml">ngx_stream_js_module</link>. | 214 <link doc="../stream/ngx_stream_js_module.xml">ngx_stream_js_module</link>. |
206 Все строки в объекте <literal>stream</literal> являются | 215 Все строки в объекте <literal>stream</literal> являются |
207 <link id="strings">байтовыми строками</link>. | 216 <link id="string">байтовыми строками</link>. |
208 </para> | 217 </para> |
209 | 218 |
210 | 219 <para> |
211 <section id="stream_session" name="Сессия"> | 220 <note> |
212 | 221 До версии njs <link doc="../njs/changes.xml" id="njs0.2.4">0.2.4</link>, |
213 <para> | 222 у объекта stream-сессии были некоторые свойства, которые на данный момент |
214 <list type="tag"> | 223 <link id="stream_obsolete">удалены</link>. |
224 </note> | |
225 </para> | |
226 | |
227 <para> | |
228 <list type="tag"> | |
229 | |
230 <tag-name id="s_allow"><literal>s.allow()</literal></tag-name> | |
231 <tag-desc> | |
232 успешно финализирует обработчик фазы | |
233 (<link doc="../njs/changes.xml" id="njs0.2.4">0.2.4</link>) | |
234 </tag-desc> | |
235 | |
236 <tag-name id="s_decline"><literal>s.decline()</literal></tag-name> | |
237 <tag-desc> | |
238 финализирует обработчик фазы и передаёт контроль следующему обработчику | |
239 (<link doc="../njs/changes.xml" id="njs0.2.4">0.2.4</link>) | |
240 </tag-desc> | |
241 | |
242 <tag-name id="s_deny"><literal>s.deny()</literal></tag-name> | |
243 <tag-desc> | |
244 финализирует обработчик фазы с кодом ошибки доступа | |
245 (<link doc="../njs/changes.xml" id="njs0.2.4">0.2.4</link>) | |
246 </tag-desc> | |
247 | |
248 <tag-name id="s_done"><literal>s.done</literal>(<value>[код]</value>)</tag-name> | |
249 <tag-desc> | |
250 успешно финализирует текущий обработчик фазы | |
251 или финализирует его с указанным числовым кодом | |
252 (<link doc="../njs/changes.xml" id="njs0.2.4">0.2.4</link>). | |
253 </tag-desc> | |
254 | |
255 <tag-name><literal>s.error(<value>строка</value>)</literal></tag-name> | |
256 <tag-desc> | |
257 записывает отправленную <literal>строку</literal> в лог-файл ошибок | |
258 на уровне лога <literal>error</literal> | |
259 </tag-desc> | |
260 | |
261 <tag-name><literal>s.log(<value>строка</value>)</literal></tag-name> | |
262 <tag-desc> | |
263 записывает отправленную <value>строку</value> в лог-файл ошибок | |
264 на уровне лога <literal>info</literal> | |
265 </tag-desc> | |
266 | |
267 <tag-name id="s_off"><literal>s.off(<value>имяСобытия</value>)</literal></tag-name> | |
268 <tag-desc> | |
269 отменяет регистрацию callback'а, установленного методом | |
270 <link id="s_on">s.on()</link> | |
271 (<link doc="../njs/changes.xml" id="njs0.2.4">0.2.4</link>) | |
272 </tag-desc> | |
273 | |
274 <tag-name id="s_on"><literal>s.on(<value>событие</value>, | |
275 <value>callback</value>)</literal></tag-name> | |
276 <tag-desc> | |
277 регистрирует <literal>callback</literal> для указанного <literal>события</literal> | |
278 (<link doc="../njs/changes.xml" id="njs0.2.4">0.2.4</link>). | |
279 | |
280 <para> | |
281 <literal>Событием</literal> может являться одна из следующих строк: | |
282 <list type="tag"> | |
283 <tag-name><literal>upload</literal></tag-name> | |
284 <tag-desc> | |
285 новые данные от клиента | |
286 </tag-desc> | |
287 | |
288 <tag-name><literal>download</literal></tag-name> | |
289 <tag-desc> | |
290 новые данные к клиенту | |
291 </tag-desc> | |
292 | |
293 </list> | |
294 </para> | |
295 | |
296 <para> | |
297 Callback завершения имеет следующий прототип: | |
298 <literal>callback(данные, флаги)</literal>, где | |
299 <literal>данные</literal> являются строкой, | |
300 <literal>флаги</literal> являются объектом | |
301 со следующими свойствами: | |
302 <list type="tag"> | |
303 <tag-name id="s_on_callback_last"><literal>last</literal></tag-name> | |
304 <tag-desc> | |
305 логическое свойство, | |
306 true, если данные являются последним буфером. | |
307 </tag-desc> | |
308 | |
309 </list> | |
310 </para> | |
311 </tag-desc> | |
215 | 312 |
216 <tag-name><literal>s.remoteAddress</literal></tag-name> | 313 <tag-name><literal>s.remoteAddress</literal></tag-name> |
217 <tag-desc> | 314 <tag-desc> |
218 адрес клиента, только чтение | 315 адрес клиента, только чтение |
316 </tag-desc> | |
317 | |
318 <tag-name id="s_send"><literal>s.send(<value>данные</value>[, | |
319 <value>параметры</value>])</literal></tag-name> | |
320 <tag-desc> | |
321 отправляет данные клиенту | |
322 (<link doc="../njs/changes.xml" id="njs0.2.4">0.2.4</link>). | |
323 <literal>Параметры</literal> являются объектом, используемым | |
324 для переопределения флагов буфера nginx, | |
325 полученных из буфера входных данных. | |
326 Флаги могут быть переопределены при помощи следующих флагов: | |
327 <para> | |
328 <list type="tag"> | |
329 | |
330 <tag-name><literal>last</literal></tag-name> | |
331 <tag-desc> | |
332 логическое свойство, | |
333 true, если буфер является последним буфером | |
334 </tag-desc> | |
335 | |
336 <tag-name><literal>flush</literal></tag-name> | |
337 <tag-desc> | |
338 логическое свойство, | |
339 true, если буфер должен иметь флаг <literal>flush</literal> | |
340 </tag-desc> | |
341 </list> | |
342 </para> | |
343 Метод может быть вызван несколько раз в течение одного вызова callback'a. | |
344 </tag-desc> | |
345 | |
346 <tag-name><literal>s.variables{}</literal></tag-name> | |
347 <tag-desc> | |
348 объект переменных nginx, только чтение | |
349 </tag-desc> | |
350 | |
351 <tag-name><literal>s.warn(<value>строка</value>)</literal></tag-name> | |
352 <tag-desc> | |
353 записывает отправленную <literal>строку</literal> в лог-файл ошибок | |
354 на уровне лога <literal>warning</literal> | |
355 </tag-desc> | |
356 | |
357 </list> | |
358 </para> | |
359 | |
360 <section id="stream_obsolete" name="Устаревшие свойства"> | |
361 | |
362 <para> | |
363 Данные свойства были удалены | |
364 в njs версии <link doc="../njs/changes.xml" id="njs0.2.4">0.2.4</link> | |
365 и не имеют обратной совместимости с существующим кодом njs. | |
366 </para> | |
367 | |
368 <para> | |
369 <list type="tag"> | |
370 | |
371 <tag-name id="s_abort"><literal>s.ABORT</literal></tag-name> | |
372 <tag-desc> | |
373 код <literal>ABORT</literal> | |
374 <note> | |
375 Начиная с версии njs <link doc="../njs/changes.xml" id="njs0.2.4">0.2.4</link> | |
376 необходимо использовать метод <link id="s_deny">s.deny()</link>. | |
377 </note> | |
378 </tag-desc> | |
379 | |
380 <tag-name><literal>s.AGAIN</literal></tag-name> | |
381 <tag-desc> | |
382 код <literal>AGAIN</literal> | |
383 <note> | |
384 Начиная с версии njs <link doc="../njs/changes.xml" id="njs0.2.4">0.2.4</link> | |
385 соответствующее поведение достигается, если не вызываются | |
386 <link id="s_allow">s.allow()</link>, | |
387 <link id="s_deny">s.deny()</link>, | |
388 <link id="s_decline">s.decline()</link>, | |
389 <link id="s_done">s.done()</link> | |
390 и callback зарегистрирован. | |
391 </note> | |
392 </tag-desc> | |
393 | |
394 <tag-name id="s_buffer"><literal>s.buffer</literal></tag-name> | |
395 <tag-desc> | |
396 текущий буфер, доступен для записи | |
397 <note> | |
398 Начиная с версии njs <link doc="../njs/changes.xml" id="njs0.2.4">0.2.4</link> | |
399 для записи необходимо использовать метод <link id="s_send">s.send()</link>. | |
400 Для чтения текущий буфер доступен в качестве первого аргумента | |
401 callback'а <literal>event</literal>. | |
402 </note> | |
403 </tag-desc> | |
404 | |
405 <tag-name><literal>s.DECLINED</literal></tag-name> | |
406 <tag-desc> | |
407 код <literal>DECLINED</literal> | |
408 <note> | |
409 Начиная с версии njs <link doc="../njs/changes.xml" id="njs0.2.4">0.2.4</link> | |
410 необходимо использовать метод <link id="s_decline">s.decline()</link>. | |
411 </note> | |
219 </tag-desc> | 412 </tag-desc> |
220 | 413 |
221 <tag-name><literal>s.eof</literal></tag-name> | 414 <tag-name><literal>s.eof</literal></tag-name> |
222 <tag-desc> | 415 <tag-desc> |
223 логическое свойство, | 416 логическое свойство, |
224 true, если текущий буфер является последним буфером, | 417 true, если текущий буфер является последним буфером, |
225 только чтение | 418 только чтение |
419 <note> | |
420 Начиная с версии njs <link doc="../njs/changes.xml" id="njs0.2.4">0.2.4</link> | |
421 необходимо использовать свойство <link id="s_on_callback_last">flags.last</link>. | |
422 </note> | |
423 </tag-desc> | |
424 | |
425 <tag-name><literal>s.ERROR</literal></tag-name> | |
426 <tag-desc> | |
427 код <literal>ERROR</literal> | |
428 <note> | |
429 Начиная с версии njs <link doc="../njs/changes.xml" id="njs0.2.4">0.2.4</link> | |
430 для сообщения об ошибке используется соответствующее исключение. | |
431 </note> | |
226 </tag-desc> | 432 </tag-desc> |
227 | 433 |
228 <tag-name><literal>s.fromUpstream</literal></tag-name> | 434 <tag-name><literal>s.fromUpstream</literal></tag-name> |
229 <tag-desc> | 435 <tag-desc> |
230 логическое свойство, | 436 логическое свойство, |
231 true, если текущий буфер является буфером от проксируемого сервера к клиенту, | 437 true, если текущий буфер является буфером от проксируемого сервера к клиенту, |
232 только чтение | 438 только чтение |
233 </tag-desc> | 439 <note> |
234 | 440 Начиная с версии njs <link doc="../njs/changes.xml" id="njs0.2.4">0.2.4</link> |
235 <tag-name><literal>s.buffer</literal></tag-name> | 441 необходимо использовать |
236 <tag-desc> | 442 соответствующее <link id="s_on">событие</link> |
237 текущий буфер, доступен для записи | 443 (<literal>upload</literal> или <literal>download</literal>) |
238 </tag-desc> | 444 для обработки данных к клиенту или от клиента. |
239 | 445 </note> |
240 <tag-name><literal>s.variables{}</literal></tag-name> | 446 </tag-desc> |
241 <tag-desc> | 447 |
242 объект переменных nginx, только чтение | 448 <tag-name id="s_ok"><literal>s.OK</literal></tag-name> |
243 </tag-desc> | |
244 | |
245 <tag-name><literal>s.OK</literal></tag-name> | |
246 <tag-desc> | 449 <tag-desc> |
247 код <literal>OK</literal> | 450 код <literal>OK</literal> |
248 </tag-desc> | 451 <note> |
249 | 452 Начиная с версии njs <link doc="../njs/changes.xml" id="njs0.2.4">0.2.4</link> |
250 <tag-name><literal>s.DECLINED</literal></tag-name> | 453 необходимо использовать метод <link id="s_allow">s.allow()</link>. |
251 <tag-desc> | 454 </note> |
252 код <literal>DECLINED</literal> | |
253 </tag-desc> | |
254 | |
255 <tag-name><literal>s.AGAIN</literal></tag-name> | |
256 <tag-desc> | |
257 код <literal>AGAIN</literal> | |
258 </tag-desc> | |
259 | |
260 <tag-name><literal>s.ERROR</literal></tag-name> | |
261 <tag-desc> | |
262 код <literal>ERROR</literal> | |
263 </tag-desc> | |
264 | |
265 <tag-name><literal>s.ABORT</literal></tag-name> | |
266 <tag-desc> | |
267 код <literal>ABORT</literal> | |
268 </tag-desc> | |
269 | |
270 <tag-name><literal>s.log(<value>строка</value>)</literal></tag-name> | |
271 <tag-desc> | |
272 записывает отправленную <value>строку</value> в лог-файл ошибок | |
273 на уровне лога <literal>info</literal> | |
274 </tag-desc> | |
275 | |
276 <tag-name><literal>s.warn(<value>строка</value>)</literal></tag-name> | |
277 <tag-desc> | |
278 записывает отправленную <literal>строку</literal> в лог-файл ошибок | |
279 на уровне лога <literal>warning</literal> | |
280 </tag-desc> | |
281 | |
282 <tag-name><literal>s.error(<value>строка</value>)</literal></tag-name> | |
283 <tag-desc> | |
284 записывает отправленную <literal>строку</literal> в лог-файл ошибок | |
285 на уровне лога <literal>error</literal> | |
286 </tag-desc> | 455 </tag-desc> |
287 | 456 |
288 </list> | 457 </list> |
289 </para> | 458 </para> |
290 | 459 |
291 </section> | 460 </section> |
292 | 461 |
293 </section> | 462 </section> |
294 | 463 |
464 </section> | |
465 | |
295 </article> | 466 </article> |
296 | 467 |