Amazon CloudFrontによるPOSTパススルー対応きた!
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のアクセスログ出力機能を使う必要がありそうですね。