このページは福井県立大学の田中求之が2006年1月まで運用していた Mac のサーバ運用に関する会議室 「Web Scripter's Meeting」の記録です。情報が古くなっている可能性がありますのでご注意ください。

PersonalWebSharingの設定?

発言者:大将
( Date Friday, February 13, 1998 11:28:40 )


Personal Web Sharingの設定に、前処理、後処理、起動、フィルタと
いうのがあるのですが、これはどのように使うものなのでしょうか?
なんか使えそうな感じはするのですが、使い方が・・・

田中求之 さんからのコメント
( Friday, February 13, 1998 16:26:27 )

1.5 のことですよね?

CGI による処理を割り当てるのに使います。

大将 さんからのコメント
( Sunday, February 15, 1998 23:40:51 )

ええ。1.5のことです。

具体的にはどういう動きをするのでしょう?
CGI 自体の前処理、後処理というのは、そのCGI が指定されたときの
それぞれ前と後に違う処理(プログラム)を走らせることができる?
という意味なのでしょうか?

田中求之 さんからのコメント
( Monday, February 16, 1998 16:06:59 )

Pre-Process というのは、すべてのアクセスの前に必ず実行される CGI のこと
です。フィルターのようなものだと思っていただいて結構です。

たとえば、以下のようなスクリプトの CGI を作って、これを PreProcess に
指定すると、

property crlf : (ASCII character 13) & (ASCII character 10)

on ヌevent WWWスsdocネ path_args ツ
  given ヌclass userネ:username, ヌclass passネ:password
  
  if username = "tanaka" and password = "motoyuki" then
    return ""
    
  else
    
    return "HTTP/1.0 401 Unauthorized" & crlf ツ
      & "WWW-Authenticate: Basic realm=\"WebShare_Admin\"" & crlf ツ
      & crlf ツ
      & "<title>Not Authorized!</title><h1>Not Authorized!</h1>"
    
  end if
end ヌevent WWWスsdocネ

このサーバーにアクセスするには、かならず User: tanaka Pass: motoyuki を
入力しなければならなくなります。これは webSharing での設定には関係なく
働きます。つまり、CGI によってアクセス管理が独自に行えるようになります。

一方、Post-Process というのは、アクセスの処理が終了した時点で(データをすべて
送り終わった後で)実行される CGI です。たとえば、以下のようなスクリプトの
CGI を Post_Process に指定すると、Message Window というアプリケーション
に、アクセスに来た人の IP アドレスを次々に表示します。

property crlf : (ASCII character 13) & (ASCII character 10)

on ヌevent WWWスsdocネ path_args ツ
  given ヌclass addrネ:client_address
  
  tell application "Message Window"
    display client_address & " come!"
  end tell
  
end ヌevent WWWスsdocネ

データの転送処理が終わってから実行されますので、ユーザーへのレスポンスの
低下などは引き起こしません。

このように、うまくつかえばいろいろな利用法がある CGI なんですよ。

WebSharing ではファイル共有のユーザー設定を引き継ぐアクセス管理しか
できませんが、独自にアクセス管理を行いたい場合など Pre-Prossess は
威力を発揮します。

大将 さんからのコメント
( Monday, February 16, 1998 18:26:10 )

なるほど!
具体的な例まで提示していただいてありがとうございます。
これはいろいろな使い方が出来そうですね。

ところで、このような便利な機能は、他のサーバソフトでも
割と一般的なのでしょうか?

田中求之 さんからのコメント
( Monday, February 16, 1998 18:47:58 )

CGI に対応しているサーバーであれば、ほぼどれでもおなじ事ができます。
(WebSTAR, Quid Pro Quo 等)

もともとは WebSTAR で導入されたものですが、その後、事実上の標準と
して広まったというものですので、WebSTAR のドキュメントなどには
詳しい説明やスクリプトの書き方が載っていますが、Web Sharing では
あまり丁寧には書かれていませんね。

Pre-Process, Post-Process ともに、通常の CGI とはスクリプトの
書き方が異なります。

田中求之 さんからのコメント
( Monday, February 16, 1998 18:57:34 )

ついでに説明しておきますと、 Launch at Suffix というのは、
他のサーバーで言う、ユーザー定義アクションという仕組みのことで
特定の拡張子のアクセスを決まった CGI に任せられるというもの
です。

EasyBBS SRII, EX, ++ のように、ユーザー定義アクションで利用
することを前提にした CGI を使えます。

bbs.acgi をアプリケーションとして選び、Suffix に .bbs を
設定すれば、それで使えるようになります(動作確認済み)。


田中求之 さんからのコメント
( Tuesday, February 17, 1998 18:45:11 )

WebSharing 1.5 って、日本語のドキュメントは自動的に JIS に変換して
送り出すようになっている見たいですね。ちょっとびっくり。

中野勝次郎 さんからのコメント
( Monday, July 13, 1998 15:48:33 )

初めまして。中野ともうします。
ここの発言を見て、preprocessを
PWSに設定してみたのですが、

A CGI or internal server component could not complete the requested action. 

といわれて、うまく動きません。
何がいけないのか、教えていただけませんか?

以下に、分かっている状況を説明します。

actionをはずせば、ページは表示されます。

Applescriptのソースプログラムは、
property crlf : (ASCII character 13) & (ASCII character 10)

on ヌevent WWWスsdocネ path_args ツ
  given ヌclass userネ:username, ヌclass passネ:password
  
  (* if username = "tanaka" and password = "motoyuki" then 
  return ""
  
  else *)
  
  return "HTTP/1.0 401 Unauthorized" & crlf ツ
    & "WWW-Authenticate: Basic realm=\"WebShare_Admin\"" & crlf ツ
    & crlf ツ
    & "<HEAD> <title>Not Authorized!</title> </HEAD> <BODY> <h1>Not Authorized!</h1></BODY>"
  
  (* end if*)
  
end ヌevent WWWスsdocネ

です。

アプリケーションとして作って、
actionにpreprocessとして登録しました。
(ファイル名は、inputpassです。htmlのファイルとは
別の場所に格納しました。)
他のactionは登録していません。
cgi等も使っていません。

サーバは、PersonalWebSharing1.5です。

よろしくお願いします。

田中求之 さんからのコメント
( Monday, July 13, 1998 16:15:20 )

>htmlのファイルとは
>別の場所に格納しました。

これが原因です。 Web のルートフォルダーに収めてください。

中野勝次郎 さんからのコメント
( Monday, July 13, 1998 16:17:04 )

上の発言、間違いです。
既投稿の発言は…削除できないんですね。
お目汚しですが、ソースの部分の正しい物を投稿します。

applescriptのソースプログラムは、本当は次の通りです。

property crlf : (ASCII character 13) & (ASCII character 10)

on ヌevent WWWスsdocネ path_args ツ
  given ヌclass userネ:username, ヌclass passネ:password
  
  if username = "tanaka" and password = "motoyuki" then
    return ""
    
  else
    
    return "HTTP/1.0 401 Unauthorized" & crlf ツ
      & "WWW-Authenticate: Basic realm=\"WebShare_Admin\"" & crlf ツ
      & crlf ツ
      & "<HEAD> <title>Not Authorized!</title> </HEAD> <BODY> <h1>Not Authorized!</h1></BODY>"
    
  end if

end ヌevent WWWスsdocネ


中野勝次郎 さんからのコメント
( Monday, July 13, 1998 17:38:54 )

すみません。
自分で解決しました。

アップルスクリプト保存時の
「実行後終了しない」
をチェックしたら、動くようになりました。

私の勉強不足でした。

中野勝次郎