話題の記事

Amazon CloudFrontによるPOSTパススルー対応きた!

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

CloudFrontはコンテンツ配信

ついに来ましたCloudFrontのPOST対応!!え?CDNにPOSTって不要じゃない?って思いますよね。そうなんです、CDNがPOSTを受け取る機能ではなく、CDNがPOSTをスルーしてくれる機能なんです!これの何が嬉しいって、クロスドメインにならないからCORS対応とかキモいことをしなくて良いのです!動的なWebサイトにPOST通信はつきものです。今までCloudFrontで既存サイト全体を包もうとしたとき、POST通信がある時点で使えませんでした。今回の新機能でほぼあらゆるサイトに使えるようになります。

対応するHTTPメソッド

POST以外にも対応しているメソッドがありますのでご紹介します。

GET, HEAD, PUT, POST, PATCH, DELETE, OPTIONS

設定をしてみよう

Distribution

まずは新規作成です。

screenshot 2013-10-16 10.26.06

Delivery Method

Webサイトを指定します。

screenshot 2013-10-16 10.26.16

Cache Behavior

キャッシュの振る舞いを指定します。今回はカスタムオリジンとしてELBのホスト名を指定しました。

screenshot 2013-10-16 10.30.49

新しくAllowed HTTP Methodsの項目が追加されていますね!これで設定はOKです。

動作確認をしてみよう

ELB配下のEC2インスタンスにHTTP POSTをするHTMLと受け取るJSPを用意したいと思います。まずはHTML

<html>
<body>
<form method="post" action="post.jsp">
  <p>name : <input type="text" name="name" /></p>
  <p>age  : <input type="text" name="age" /></p>
  <p><input type="submit" value="submit"></p>
</form>
</body>
</html>

見た目はこんな感じ

screenshot 2013-10-16 10.54.53

次にPOSTを受け取るJSPです

<html>
<p>name :<%=request.getParameter("name")%></p> 
<p>age  :<%=request.getParameter("age")%></p>
</html>

実行結果です

screenshot 2013-10-16 10.55.02

できましたね!

まとめ

30分クオリティーなので少々粗い記事ですがw、CloudFrontへのPOST通信がパススルーされていることをご確認頂けたと思います!夢広がりますよね〜

おまけ

CloudFrontからELB経由でEC2にHTTPリクエストが来た際のヘッダ情報を取ってみました。

<html>
<%
 java.util.Enumeration e = request.getHeaderNames();
 String rows = "";
 while(e.hasMoreElements()) {
   String name = (String)e.nextElement();
   String value = request.getHeader(name);
   rows += "<tr><td>" + name + "</td><td>" +
     value +"</td></tr>";
 }
%>
<table border=1>
 <tr><td>name</td><td>value</td></tr>
 <%= rows %>
 </table>
</html>

結果はこんな感じ。アクセスの分析を行う場合には、CloudFrontのアクセスログ出力機能を使う必要がありそうですね。

screenshot_2013-10-16_11.04.34

参考資料

Amazon CloudFront Developer Guide - Allowed HTTP Methods