|
2005/01/17
■いつの間にかサーバの仕様が変わってた
いつの間にかサーバの仕様が変わっていた。
(昨年12月にcgiをいじっていて気づいた)
2005/10/19以降に2度ほどサーバメンテナンスがあり、その時に仕様が変わったみたい。
| 2005/10/26 | (未確認) |
cgi専用サーバアドレスでcgi以外のものが指定可能になった? 例http://cgi.www5d.biglobe.ne.jp/~abcdef/index.html |
| 2005/11/22 | (問い合わせ確認済み) |
cgi専用サーバアドレスではないのにcgiが実行可能になった。 例http://www5d.biglobe.ne.jp/~abcdef/test.cgi |
どうやらlinuxになって最新のwww7aサーバの仕様で動くようになったようだ。
(なんか全体的に通信が重くなった気がしてならないが・・・)
もちろんwww5d旧仕様でもそのまま動く。
よってJavaAppletとCGI(BIGLOBEサーバ)とJavaAppletとCGI(BIGLOBEサーバ)(2)で
書いたような苦労はしなくて済むようになった・・・。
で、新仕様でのテストをやってみた。
JavaAppletからCGIをPOSTでキックして、リターンを受け取る。
CGI060117b.java (ちなみに jdk1.3.1_16 です)
import java.applet.Applet;
import java.awt.TextArea;
import java.net.*;
import java.io.*;
public class CGI060117b extends Applet {
TextArea ta;
public void init() {
ta = new TextArea();
add(ta);
ta.append("CodeBase: " + getCodeBase().toString() + "\n\n");
try{
URL url = new URL(getCodeBase().toString() + "test060116b.cgi");
URLConnection uc = url.openConnection();
uc.setDoOutput(true);
uc.setUseCaches(false);
PrintWriter pw = new PrintWriter(uc.getOutputStream());
//pw.print("name=value&XYZ=あいうえお");
pw.print("name=value&XYZ=" + URLEncoder.encode("あいうえお"));
pw.close();
InputStreamReader isr =new InputStreamReader(uc.getInputStream());
BufferedReader br = new BufferedReader(isr);
while(true) {
String str = br.readLine();
if (str == null) {
break;
}
ta.append(str + "\n");
ta.append(URLDecoder.decode(str) + "\n");
}
br.close();
isr.close();
}
catch(Exception e){
ta.append(e.toString());
}
}
}
test060116b.cgi
#!/usr/local/bin/perl
read( STDIN, $postbuf, $ENV{'CONTENT_LENGTH'} );
print "Content-Type: text/html\n\n";
print $postbuf;
結果
POST送信なので自動的にエンコードしてくれるのか?と思ったが、そうではないようだ。
ブラウザからHTMLでPOSTしたときか?
以下 ethreal のキャプチャー結果
URLEncoderを使ってPOSTした通信ログ

CGIからのリターン

URLEncoderを使用せずにPOSTした通信ログ
ほんとにそのまま流れています・・・。

CGIからのリターン
今回は Windows ブラウザで試したが、MacやUNIXになるとデフォルトエンコーディングが違うらしい。
(WinはSJIS。UNIXはEUC?)
となるとサーバ側(perl)で日本語などを保存したいときはSJISかEUCかを判別してどちらかに変換しなきゃならない?
やはり j2sdk1.4 以降にして Unicode で統一すべきか・・・
(URLEncoderクラスのencodeメソッドの仕様が変わって文字コードの指定ができるようになった)
1.3だとwin95,98ユーザにやさしいんだけどなぁ・・・。
(JavaVMがIEに標準搭載されていて、1.3までならそのままで動く)
|