アプリ版:「スタンプのみでお礼する」機能のリリースについて

今、デスクトップアプリケーションをapacheを経由してブラウザで操作できるような仕組みを作っております。もとのデスクトップアプリがjavaで実装されており、そこではsocketを特定のポートでオープンしています。
serverSocket = new ServerSocket(3811);
socket = serverSocket.accept();

そして、ブラウザの方ではYUIのスライダーを利用したUIをつくっており、そのスライダーの値が変更されると、
var httpObj = new XMLHttpRequest();
httpObj.open("POST","http://localhost:3811",true);
httpObj.send("value="+val);
というように送信しています。

現状ではc://*****/***/****.htmlという形で、apacheを介さずに、同じマシン上でアクセスした場合、メッセージングが正常に行われていることを確認することができたのですが、
http://localhost/****.htmlの形でapacheを経由してアクセスした場合、メッセージングができません。
onreadystatechangeも呼び出されなく、また、netstat等でコネクション確認をしてみましたが、まったくコネクションが貼られていない状態です。apacheがなんらかのフィルタリングをおこなっているようにも思えるのですが、様々な資料にあたってみましたが、まったくそれらしき記述を見つけることができずにいます。

どなたか、アドバイスをいただける方がいらっしゃいましたら、ヒントだけでも結構ですので、よろしくお願いいたします。

A 回答 (2件)

おもしろそうだったので実験してみました。


結果 ie5.5、ie6 はできました。ie7はできません。(win)
mozilla系はできません
ポート指定でエラーになっているようです。
この手のデバッグは(http://localhost)では無理です。
サーバーとクライアントを別にして、ネットワークモニタを使うと原因究明が早いです。
    • good
    • 0
この回答へのお礼

調査していただきありがとうございます。じつは便宜上windowsで実行しているように書きましたが、OSXでsafariを利用しています。
結論からいいますと、この問題は最終的にはapache、ブラウザのかなり低レベルなところまで調査する必要があったので、別の方法で解決することにしました。
近年ではxmlhttprequestから別ホスト、別ポートへのリクエスト送信は不可とするようになっているようで、ie7でできなかったのも、その線ではないかと思われます。
解決策として実行したのは、apacheのProxyPassディレクティブを利用して、あくまで同ホスト、同ポートにリクエストをおくるのだが、apacheでそれをそのまま転送するという形をとりました。この対応で多少のレイテンシーが発生すると考えられますが、現状はさほど影響を感じません。今後調査していこうと思います。ネットワークモニタでもその際に、実際に監視してみようと思います。
このたびは貴重なアドバイスありがとうございました。

お礼日時:2007/07/16 21:38

私は実験していません。

(ネットワークプログラミングの経験が無いため)
他のブラウザ含めどうなるか試してはいない。

しかし、IEを使っているなら,
例えばMSDNを見ると以下のように書かれています
http://msdn2.microsoft.com/en-us/library/ms53664 …

Security Alert : Cross-domain, cross-port, and mixed protocol requests are not allowed. The sUrl parameter may only specify XML data files in the same domain, using the same port and protocol method, as that from which the page is served.
セキュリティ警告:クロスドメイン・クロスポート・および複数のプロトコルの混在は許可されていない。sURLパラメータはそのページが提供されたのと同一ドメイン,同一ポート,同一プロトコルの同一メソッドを使ってXMLファデータファイルを指定するのみである。

という記述があります。

====
ローカルファイルで何故出来たかは俺は良く解らん。解らんばかりですまんけど、参考になれば。
    • good
    • 0
この回答へのお礼

ご指摘ありがとうございます。
クロスポートのメッセージングが禁止されている件ですが、近年どのブラウザもそうなっているようですね。上記でもうしあげましたが、わたしはsafariを使っていました。
ほんと、なんでローカルファイルでは実行可能なのか、さっぱりわかりません。apacheのソースコードをみることしかないのかも知れないとも思いましたが、さすがにそこまでは手に負えないということで、上記の対応を行いました。
このたびは参考になるご意見、本当にありがとうございました。

お礼日時:2007/07/16 21:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!