-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrawmode.txt
executable file
·379 lines (285 loc) · 14.3 KB
/
rawmode.txt
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
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
read.cgi raw modeドキュメント
$Id: rawmode.txt,v 1.4 2001/11/10 07:39:07 2ch Exp $
2001-11-10 Ver.5.26+ (5.28候補)
§1. リクエストタイプおよびリクエストヘッダ
リクエストタイプ
GET - 本文取得のときに用いる。
HEAD - ヘッダのみを得るときに用いる。
リクエストヘッダ
Accept-Encoding
gzipまたはx-gzipが必要。なければエラーとなる[mod_gzipを使わない場合]。
結果はgzip圧縮されているとは限らないため、クライアントは正しくヘッダの
Content-Encodingを見て圧縮されているかどうかを判断すること。
If-Modified-Since
すでに取得したdatがあるのであれば、それを受信したときにヘッダにあった
Last-Modifiedの値を指定すると、その後変化がないときにはHTTPのリザルトとして
304 Not Modifiedを返す。[サーバの負荷削減のために推奨する]
User-Agent
存在しなければならない。
Accept-Language
存在しなければならない。
HTTPレスポンス
read.cgiのレスポンスは以下のものに分類される。
200 Ok
cgiが何らかのメッセージを出力するときに返す。
304 Not Modified
If-Modified-Sinceにより、更新がないと判断された場合に返す。
HTTPレスポンスヘッダ
Content-type
text/plain
Content-Encoding
圧縮されている場合、gzipまたはx-gzipで返す。圧縮されない場合はこのヘッダは
出力しない。
Content-Length
実際に出力するオクテット数を出力するが、User-Agentが"Mozilla/4."で始まり、
"compatible"が存在しない場合(つまりNetscape 4.x)このヘッダは出力しない。
§2. rawモード
read.cgiは、専用ブラウザ用に、rawパラメータの指定によっていくつかの
モードがある。
・2-0. 出力内容の書式
・2-1. 全レス一括
・2-2. 標準差分
・2-3. かちゅ~しゃDLL用差分 [5.25より]
・2-4. 範囲指定 [5.25より]
・2-5. subject.txt [5.24より]
・2-6. 複数一括処理 [5.26+より]
§2-0. 出力内容の書式
rawモードの出力は、1行目にステータス行、2行目以降は.datファイルの書式で
レスが必要な数、出力される。
ステータス行は、1文字目は + または - となり、以後にいくつかの単語で
おおまかな内容を、以後パラメータとして詳細が記述されることもある。
データ出力(正常)系
+OK params
-INCR params
+PARTIAL params
これらは、二行目以降に該当する.dat本文が必要なだけ出力される。
+OK: 指定された差分を正しく返す
-INCR: あぼーん検出のため、全レスを返す
+PARTIAL: 範囲指定による出力
またその内容を記述するparamsは空白で区切って以下のものが並ぶ。
size/maxK
size: 本文の出力バイト数(0~)
max: このread.cgiにおける設定最大スレサイズ(MAX_FILESIZE)をキロバイト単位
で表した値
またさらに、TABで区切って以下のものが続く。
Range:first-last/max (範囲指定[2-4]のみ)
first: 指定の開始バイト位置(0~)
last: 指定の終了バイト位置(0~)
max: このスレの現在の総バイト数(maxが0でなければlast < max)
Res:first-last/max (範囲指定[2-4]のみ)
first: 指定の開始レス番号(1~)
last: 指定の終了レス番号(1~)
max: このスレの現在の最終レス番号(last ≦ max)
Status:status (AUTO_KAKOが有効になっている場合のみ)
status: Stopped ならばストップがかかっている
Location:place (AUTO_KAKOが有効になっている場合のみ)
place: temp/ ならば倉庫行き前から取得
place: kako/ ならば倉庫から取得
-ERR string
1行だけで完了する。
なんかエラーが起きた。stringはエラーの内容。
日本語で書かれているため、これを処理する場合は将来の他言語版に注意が必要。
[将来的にエラーコードが付くかもしれません]
"このスレッド大きすぎます。"
設定最大スレサイズ(MAX_FILESIZE)を超えている。
"そんな板orスレッドないです。"
指定された板またはスレが存在しない。
"過去ログ倉庫で発見 %s"
倉庫で発見した。
%sは相対パスで.datまたは.dat.gzの位置を表す。
"html化待ち"
倉庫待ちで発見した。場所は示さない。
"メモリの確保に失敗しました。"
内部エラー。メモリ不足。
"調整中。。。"
通常出力されることはない。
"なんか不調です。"
リクエストに不備があるか、User-Agentが禁止リストに入っている。
"どこかであぼーんがあったみたいです。"
あぼーん検出。
かちゅ~しゃDLL用差分[2-3]の結果のときにのみ出力される。
§2-1. 全レス一括
書式: http://サーバ.2ch.net/test/read.cgi/板/スレ/?raw=0.0
解説:
指定スレの全レスを出力する。
出力:
[+OK size/maxK]
[-ERR string]
"このスレッド大きすぎます。"
"そんな板orスレッドないです。"
"過去ログ倉庫で発見 %s" %sは相対パスで.datの位置を表す。
"html化待ち"
"メモリの確保に失敗しました。"
"調整中。。。"
"なんか不調です。"
§2-2. 標準差分
書式: http://サーバ.2ch.net/test/read.cgi/板/スレ/?raw=xxx.yyy
引数:
xxx=取得開始レス番号(数値)
yyy=その時点でのdat上のサイズ(数値, バイト単位)
解説:
rawのパラメータに指定された位置から後ろのスレだけを出力する。
ただし、指定レスが正しく指定位置で終わっていない場合、その前で
あぼーんが発生したと判定し、全レス出力となる。
出力:
[+OK size/maxK]
[-INCR size/maxK]
[-ERR string]
"このスレッド大きすぎます。"
"そんな板orスレッドないです。"
"過去ログ倉庫で発見 %s" %sは相対パスで.datの位置を表す。
"html化待ち"
"メモリの確保に失敗しました。"
"調整中。。。"
"なんか不調です。"
リクエストにIf-Modified-Sinceが無く、
取得済みサイズとdatのファイルサイズが一致した場合、非圧縮の
[+OK 0/maxK]
の一行だけが返り、LastModified,Content-Length,Cotent-Encoding等は含まれない
§2-3. かちゅ~しゃDLL用差分(5.25~)
書式: http://サーバ.2ch.net/test/read.cgi/板/スレ/?raw=.yyy
引数:
yyy=開始サイズ(数値, バイト単位)
解説:
rawのパラメータに指定された位置から後ろのスレだけを出力する。
ただし、その位置の直前が改行でない場合には、あぼーんと判定して
エラーメッセージ "どこかであぼーんがあったみたいです。" を出力する。
コメント
標準差分よりもあぼーん判定までの負荷が低い。
かちゅ~しゃDLL(Katjusha gzip enabler)作者のリクエストによって作成された
ためこのように呼んでいるが、User-Agentに縛りはない。
出力:
[+OK size/maxK]
[-INCR size/maxK]
[-ERR string]
"このスレッド大きすぎます。"
"そんな板orスレッドないです。"
"過去ログ倉庫で発見 %s" %sは相対パスで.datの位置を表す。
"html化待ち"
"メモリの確保に失敗しました。"
"調整中。。。"
"なんか不調です。"
"どこかであぼーんがあったみたいです。"
§2-4. 範囲指定(5.25~)
書式1: http://サーバ.2ch.net/test/read.cgi/板/スレ/?raw=0.0&st=xxx
書式2: http://サーバ.2ch.net/test/read.cgi/板/スレ/?raw=0.0&to=yyy
書式3: http://サーバ.2ch.net/test/read.cgi/板/スレ/?raw=0.0&st=xxx&to=yyy
書式4: http://サーバ.2ch.net/test/read.cgi/板/スレ/?raw=0.0&ls=zzz
引数:
xxx=開始レス番号(1~1001)
yyy=終了レス番号(1~1001)
zzz=最新レス数(1~1001)
出力:
[+PARTIAL size/maxK]
[-ERR string]
"このスレッド大きすぎます。"
"そんな板orスレッドないです。"
"過去ログ倉庫で発見 %s" %sは相対パスで.datの位置を表す。
"html化待ち"
"メモリの確保に失敗しました。"
"調整中。。。"
"なんか不調です。"
§2-5. subject.txt (5.24~)
書式1: http://サーバ.2ch.net/test/read.cgi/板/?raw=0.0
書式2: http://サーバ.2ch.net/test/read.cgi/板/?raw=0.0&ls=xxx (5.25~)
書式3: http://サーバ.2ch.net/test/read.cgi/板/?raw=0.0&ls=xxx (5.25~)
引数:
xxx=取得したいレス数(最新からxxx個)
指定板のスレ一覧を取得する。圧縮が効き、個数指定ができる点で
通信量削減を狙うが、逆にサーバ負荷は高まる。
出力:
[+OK size/maxK]
[-ERR string]
"そんな板orスレッドないです。"
"メモリの確保に失敗しました。"
"調整中。。。"
"なんか不調です。"
§2-6. 複数一括処理(5.26+) [まだfixしていません]
書式: http://サーバ.2ch.net/test/read.cgi/?raw=0.0{&dat=board/key.size}
{}内は複数記述可能
引数:
board=板指定
key=スレ指定
size=開始位置指定(バイト単位)
2個目以降は、同じ板ならばboardは省略可能。
差分のみに限定するため、sizeが0の場合は常に0バイト応答を行う。
解説:
複数のリクエストを一度に発行する。
出力:
各リクエストに対応して、順次連続して出力する。
各ステータス行には、正常かエラーかにかかわらず、TABで区切って以下の情報が付く。
Request:board/key.size
個々のリクエストをそのまま返す。
LastModify:time
Last-Modified:で返すべき値をtime()値のまま返す。
またエラー時にはエラーメッセージの前にエラーコード値が出力される。
例:
-ERR 200 そんな板orスレッド・・・
http://pc.2ch.net/test/read.cgi/tech/1002820903/109-110
109 名前:デフォルトの名無しさん 投稿日:01/10/31 17:01
マルチリクエスト、だいたいできたよ。
まだcommitしてないけど。
仕様としては、
(path)/test/read.cgi?raw=0.0&dat=board/999999999.12345&dat=board2/999888777.2345&board3/999777666.345
という形にするつもり。
同じboardが連続する時は、2番目からはboard/を省略可能とした。
レスポンスには、全体のサイズは返さず(返せない)、
+OK 1234/512K Request:board/999999999.12345 LastModify:1003111222
・・・
+OK 0/512K Request:board2/999888777 LastModify:1000000000
+OK 4567/512K Request:board3/999777666.345 LastModify:1003222333
・・・
が続くようにする。
"."以降を既得サイズとするが、差分に限定するため(上位50件の全取得等に使われないため)に、
".0"は受け付けないことにした。
ただし、".0"(0以下も含む)の時はエラー扱いせずに
+OK 0/512K
を返すようにした。
また、Last-Modifiedはtime()の数値のまま、ヘッダの"Lastmodify:"に入れた。
それと、一応リクエスト側のことを考えて、"&dat="以下の内容を
ヘッダの"Request:"にboard/key.diffの形式で入れた(boardは補完して)。
また、-ERR時に、文字列比較をしなければいけないのが疑問だったので、
この形式の時だけ、エラーコードを入れるようにした。
UA側が一通りこの形式に対応したら、
他の(rawモードの)エラーにもエラーコードを含めるようにしたい。
(その場合は、Request:やLastModify:は含まれない)
例)
-ERR 200 そんな板orスレッドないです。 Request:tech/999999999.12345
-ERR 201 過去ログ倉庫で発見 ../tech/kako/100/1000000003.dat Request:tech/1000000003.123
-ERR 201 過去ログ倉庫で発見 ../tech/kako/100/1000000005.dat.gz Request:tech/1000000005.123
-ERR 202 html化待ち Request:tech/1000000001.123
-ERR 600 どこかであぼーんがあったみたいです。 Request:tech/1002820903.24646 LastModify:1004511622
110 名前:エラー長過ぎる行があります 投稿日:01/10/31 17:02
注意点としては、板別のセッティングを読みこまない(読みこめない)ので、
返される/512Kはただのデフォルト値であり信用できない、
そのため、通常の形式では読めないdatが読めてしまう可能性もある、
というのがある。
また、path形式(で板を指定)だと内部的に気持ちがよくないことが起こるので、
通常のquery_stringのみとした。
また、有効になるのは、raw=0.0で、bbs=とkey=が指定されていない時のみとした。
一括して受け付ける最大数は一応50とした。
apacheのGETリクエスト長制限とどちらが先に来るかは知らない。
とりあえず、例。
read.cgi?raw=0.0&dat=tech/1000035521.345329&dat=1002820903.24648
&dat=981726544.321672&dat=998908559.51344&dat=tech/967778156.59818
&prog/949623869.77371&dat=prog/980900290.146756&dat=1000335545.186069
&dat=unix/999166513.243075&dat=win/1003508243.184355&dat=1004351681.49566
&dat=software/1004096526.38369
+OK 0/512K Request:tech/1000035521.345329 LastModify:1004361816
+OK 680/512K Request:tech/1002820903.24648 LastModify:1004511622
・・・
+OK 0/512K Request:tech/981726544.321672 LastModify:1004467586
+OK 0/512K Request:tech/998908559.51344 LastModify:1004177482
+OK 0/512K Request:tech/967778156.59818 LastModify:1003324384
+OK 2877/512K Request:prog/980900290.146756 LastModify:1004504546
・・・
+OK 398/512K Request:prog/1000335545.186069 LastModify:1004511632
・・・
+OK 1827/512K Request:unix/999166513.243075 LastModify:1004504560
・・・
+OK 0/512K Request:win/1003508243.184355 LastModify:1004024020
+OK 2900/512K Request:win/1004351681.49566 LastModify:1004511770
・・・
+OK 7808/512K Request:software/1004096526.38369 LastModify:1004511760
・・・
なんかまずい点とかあったら指摘お願い。