リクエストの取得に応答するjettyサーバーを実行しています。ブラウザを使用してリクエストを行うと、localhost:8080/sp または 127.0.0.1:8080/sp で正しいデータが返されます。
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("application/json");
response.setStatus(HttpServletResponse.SC_OK);
PrintWriter out = response.getWriter();
out.println("{foobar: true"});
response.flushBuffer();
out.flush();
out.close();
}
しかし、JS を使用して同じ URL にアクセスしようとすると、応答本文が空になります。OS X Webサーバー(ポート80)とpython SimpleHTTPServer(ポート3000)の両方を使用してWebページを提供しようとしました。
どちらの場合も、応答は空です。
<h1>Single Test Page</h1>
<script>
var httpReq = null;
var url = "http://127.0.0.1:8080/sp";
window.onload = function(){
var myRequest = new XMLHttpRequest();
myRequest.open('get', url);
myRequest.onreadystatechange = function(){
if ((myRequest.readyState == 4) || (myRequest.status == 200)){
alert(myRequest.responseText);
}
}
myRequest.send(null);
}
</script>
xss 攻撃防止の問題でしょうか? JS を使用してサーブレットと通信するようにセットアップを変更するにはどうすればよいですか? JS から HTTP get リクエストを作成できる他の方法はありますか?
/etc/hosts ファイルに 127.0.0.1 foo.com というエントリを追加し、JS URL を無効に変更しました。