この記事は公開されてから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
まずは新規作成です。
Delivery Method
Webサイトを指定します。
Cache Behavior
キャッシュの振る舞いを指定します。今回はカスタムオリジンとしてELBのホスト名を指定しました。
新しく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>
見た目はこんな感じ
次にPOSTを受け取るJSPです
<html>
<p>name :<%=request.getParameter("name")%></p>
<p>age :<%=request.getParameter("age")%></p>
</html>
実行結果です
できましたね!
まとめ
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のアクセスログ出力機能を使う必要がありそうですね。