-
Notifications
You must be signed in to change notification settings - Fork 4
/
843.txt
104 lines (77 loc) · 5.38 KB
/
843.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
[8] [DFN[PSGI]] は、 [[Perl]] における [[HTTPサーバー]]と [[Webアプリケーション]]との[[インターフェイス]]の[[仕様]]です。
[TIME[2009年][year:2009]]に [[Tatsuhiko Miyagawa]] らにより制定、実装されました。
[9] [[WSGI]] に強い影響を受けており、これを [[Perl]] に移植したものとなっています。
[10] 現在では多くの [[Perl]] の [[HTTPサーバー]]や [[Webアプリケーション]]が対応しています。
* 仕様書
[REFS[
- [23] [CITE@en[psgi-specs/PSGI.pod at master · plack/psgi-specs]] ([TIME[2017-06-07 13:46:32 +09:00]]) <https://github.com/plack/psgi-specs/blob/master/PSGI.pod>
- [26] [CITE@en[psgi-specs/Extensions.pod at master · plack/psgi-specs]] ([TIME[2017-06-07 14:16:46 +09:00]]) <https://github.com/plack/psgi-specs/blob/master/PSGI/Extensions.pod>
- [25] [CITE@en[PSGI file evaluation convention · plack/psgi-specs Wiki]] ([TIME[2017-06-07 14:10:19 +09:00]]) <https://github.com/plack/psgi-specs/wiki/PSGI-file-evaluation-convention>
]REFS]
* プロトコル
[16]
[FIG(short list)[
- [[PSGIアプリケーション]]
- [[メタ変数]]
- [CODE[psgix]]
- [CITE[manakai PSGI extensions]]
]FIG]
[11] [RUBYB[[[環境]]]@en[environment]]は、
[[CGI]] の[[メタ変数]]の流れを汲む[[ハッシュ参照]]で、
[[HTTPサーバー]]から [[Webアプリケーション]]への伝達に使われます。
** 限界
[12] [[サーバー]]と[[アプリケーション]]の責務が明確に定められていません。例えば、
[[ヘッダー値]]に不適切な[[改行]]が含まれると [[HTTPメッセージ]]として正しく解釈できなくなり、
ときに[[セキュリティー]]の問題を引き起こすことがありますが、
これをどちらが保証するべきなのか、[[サーバー]]だとしたらどのように処理するべきなのか
(黙って訂正するべきなのか、何らかの方法でエラーとするべきなのか)
がはっきりしていません。
[13] [[HTTP]] の機能のうち、 [[理由句]]には対応していません。
[[CGI]] その他の既存の手法に対する明白な欠点です。
[14] [[WebSocket]] を扱うことができません。いくつかの実装は [[ad hoc]]
な対応をしていますが、標準化されていないだけでなく強引な方法を採っています。
[18] [CODE[CONNECT]] を扱うことができません。
[15] [[server push]] を扱うことができません。
[17] [[要求]]の受信中に[[クライアント]]との[[接続][HTTP接続]]が切断された場合や、
長い処理の途中で[[サーバー]]が[[再起動]]されようとしている時など、
中断した方が良いかもしれない場合にその旨を[[サーバー]]から[[アプリケーション]]に伝達する手段がありません。
[REFS[
- [6] [CITE@en[debug-ito/Plack-App-WebSocket]]
([TIME[2015-04-17 15:12:33 +09:00]] 版)
<https://github.com/debug-ito/Plack-App-WebSocket>
- [7] [CITE[PSGIアプリでWebSocketを使う場合、responderはどうすべきか? - DebugIto’s diary]]
([TIME[2015-04-17 15:14:38 +09:00]] 版)
<http://d.hatena.ne.jp/debug-ito/20131110/1384067449>
- [21] [CITE@en[motemen/Plack-Middleware-WebSocket: WebSocket handshake helper middleware]] ([TIME[2017-02-18 14:12:52 +09:00]]) <https://github.com/motemen/Plack-Middleware-WebSocket>
]REFS]
* [CODE[.psgi]] ファイル
[19] [[PSGIアプリケーション]]を返す [[Perlスクリプト]]を[[拡張子]]が [CODE[.psgi]]
の[[ファイル]] [SRC[>>25]] とすることがよくあるようです。[[PSGI]] を実装した[[サーバー]]は、
指定された[[ファイル]]を [CODE[do][do (Perl)]] などによって読み込み、
得られた[[コード参照]]を[[アプリケーション][PSGIアプリケーション]]として実行することが期待されています。
[20] [[CGIスクリプト]]を[[拡張子]] [CODE[.cgi]] の[[ファイル]]とする[[慣習]]に倣ったもののようです。
* 歴史
[1] [CITE[PSGI 計画についてのおしらせ。for Japanese Perl Mongers - TokuLog 改めB日記]]
([TIME[2009-09-08 09:30:30 +09:00]] 版)
<http://d.hatena.ne.jp/tokuhirom/20090904/1252091316>
[2] [CITE[PSGI updates: Specs and more reference implementations - bulknews.typepad.com]]
([TIME[2009-09-08 09:40:48 +09:00]] 版)
<http://bulknews.typepad.com/blog/2009/09/psgi-updates-specs-and-more-reference-implementations.html>
[3] [CITE[PSGI - Perl WSGI - bulknews.typepad.com]]
([TIME[2009-09-08 09:44:48 +09:00]] 版)
<http://bulknews.typepad.com/blog/2009/09/psgi-perl-wsgi.html>
[5] [CITE[Feersum - search.cpan.org]]
( ([TIME[2014-10-21 03:49:05 +09:00]] 版))
<http://search.cpan.org/dist/Feersum/lib/Feersum.pm#PSGI_extensions>
- [4] [CITE[PSGI - search.cpan.org]]
([TIME[2012-02-16 22:39:56 +09:00]] 版)
<http://search.cpan.org/dist/PSGI/PSGI.pod>
[22] [CITE@en[plack/psgi-specs: PSGI (Perl WSGI) specifications]]
([TIME[2017-06-07 13:46:04 +09:00]])
<https://github.com/plack/psgi-specs>
[24] [CITE@en[Plack/Lint.pm at master · plack/Plack]]
([TIME[2017-06-07 14:04:52 +09:00]])
<https://github.com/plack/Plack/blob/master/lib/Plack/Middleware/Lint.pm>
[27] [CITE@en[psgi-specs/FAQ.pod at master · plack/psgi-specs]]
([TIME[2017-06-07 14:19:33 +09:00]])
<https://github.com/plack/psgi-specs/blob/master/PSGI/FAQ.pod>