<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webアプリケーション</anchor>の本体<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">サーバー</anchor>のことを、
<dfn><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>アプリケーションサーバー</anchor><rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">application server</rt></rubyb></dfn>や<dfn><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>バックエンド</anchor><rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">backend</rt></rubyb></dfn>などと呼びます。</p><section><h1>意味</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> 
ふつう、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webアプリケーション</anchor>を構成する<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">サーバー</anchor>を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">データベース</anchor>サーバー、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プロキシ</anchor>サーバー、
その他の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ストレージ</anchor>サーバーといった役割によって分けるときに、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">アプリケーション</anchor>本体を指すために使う言葉です。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プロキシサーバー</anchor>や<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">キャッシュサーバー</anchor>を前面に置く構成のとき、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">クライアント</anchor>は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">アプリケーションサーバー</anchor>に直接アクセスせず、
前面のサーバーを通して間接的にアクセスすることになります。
この場合は前面のサーバーと<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">アプリケーションサーバー</anchor>
(やその他の構成<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">サーバー</anchor>)
の全体が1つの
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webサーバー</anchor>として機能するといえます。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> 
ほとんどの場合、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">アプリケーションサーバー</anchor>は
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor>
によって<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要求</anchor>を受け取り、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">応答</anchor>を返す形で実装されます。
この場合<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">アプリケーションサーバー</anchor>は
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTPサーバー</anchor>であり、
これ単体でも
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webサーバー</anchor>といえます。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> 理論上は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">アプリケーションサーバー</anchor>を <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor>
以外で実装することもできます。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">パフォーマンス</anchor>向上や、
旧来システムとの互換性など、
相応の理由があるときは採用され得ますが、
反面、
単体でのデバッグが難しくなるなどデメリットも多いので、
通常はそうしません。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> 
前面にサーバーを置かない構成のとき、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">アプリケーションサーバー</anchor>は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">クライアント</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要求</anchor>を直接受け取り、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">応答</anchor>を直接返すことになります。
この場合は当然、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">アプリケーションサーバー</anchor>が
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor> (や <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">TLS</anchor>)
のすべての要件に従う義務が生じることになります。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> 
前面に他のサーバーを置く構成を前提とする<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">アプリケーションサーバー</anchor>は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor> の一部の機能に限って実装したり、
パフォーマンスやセキュリティーに一定の制限を置く形の実装になっていたりすることがありますので、
注意が必要です。</p><example xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webアプリケーションフレームワーク</anchor>の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTPサーバー</anchor>ライブラリーは、
前面にサーバーを配した<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">アプリケーションサーバー</anchor>としての利用を前提に、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTPS</anchor> 対応を省いたり、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP/1.1</anchor> 対応を省いたり、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP/2</anchor> 対応を省いたり、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">応答</anchor>に必要な <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTPヘッダー</anchor>を出力しなかったりすることがあります。</p></example><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[11]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webアプリケーション</anchor>の運用技法として発達したものですが、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor> を使う<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ネイティブアプリケーション</anchor>にも流用されています。
歴史をたどれば <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Web</anchor> で完全に新規に発達したものでもなく、
従来の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">分散システム</anchor>技術から派生した部分もあります。</p></section><section><h1>アプリケーションサーバー (プッシュ)</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[10]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Web Push</anchor>
における<dfn><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">アプリケーションサーバー<rt xmlns="http://www.w3.org/1999/xhtml">application server</rt></rubyb></dfn>は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">アプリケーション<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">アプリケーション (プッシュ)</title></anchor>の<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>部品</anchor><rt xmlns="http://www.w3.org/1999/xhtml">component</rt></rubyb>であって、
通常<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">サーバー</anchor>上で動作し、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージ</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">配送</anchor>を要求するものです。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;9</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[13]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Push API</anchor>
における<dfn><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">アプリケーションサーバー<rt xmlns="http://www.w3.org/1999/xhtml">application server</rt></rubyb></dfn>は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webアプリケーション</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">サーバー</anchor>側<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">部品</anchor>です。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;12</anchor-internal></src></p><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[9]</anchor-end> <cite xml:lang="en">RFC 8030 - Generic Event Delivery Using HTTP Push</cite>, <time>2020-03-09 00:13:33 +09:00</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://tools.ietf.org/html/rfc8030#section-1.1">https://tools.ietf.org/html/rfc8030#section-1.1</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[12]</anchor-end> <cite xml:lang="en-US">Push API</cite>, <time>2020-02-04 16:21:34 +09:00</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://w3c.github.io/push-api/#application-server">https://w3c.github.io/push-api/#application-server</anchor-external></li></ul></refs></section><section><h1>メモ</h1></section></body></html>