表題の通りですが、AWS Lambda (Java) で用意したAPIをHTMLから叩くと「No 'Access-Control-Allow-Origin'」エラーが出る。以下のサイトからawsコンソールの設定やcors有効など行ったがうまくいかなかった。
・以下Java Lambda
package taboapi; import java.util.HashMap; import java.util.Map; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.LambdaLogger; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.google.gson.Gson; import com.google.gson.GsonBuilder; public class HandlerEcho implements RequestHandler<Map<String,String>, Map<String,String>>{ Gson gson = new GsonBuilder().setPrettyPrinting().create(); @Override public Map<String,String> handleRequest(Map<String,String> event, Context context) { LambdaLogger logger = context.getLogger(); logger.log("EVENT: " + gson.toJson(event)); logger.log("EVENT TYPE: " + event.getClass().toString()); return event; } }
・続いてHTMLが以下です。
<html lang="ja"> <head> <meta charset="UTF-8"> <title>foo</title> </head> <body> <button onclick="callEcho()">Click me</button> <script> function callEcho() { var request = new XMLHttpRequest(); request.open('POST', ' https://xxx.execute-api.ap-northeast-1.amazonaws.com/xxx', true); request.onload = function () { eval(JSON.parse(this.response).responseContents); } request.send('{"orderId": "test1", "serviceOptionType":"sb_matomete", "withCapture":"false", "amount":"10", "ItemId":"test1", "accountingType":"0", "terminalKind":"0", "itemType":"0"}','{"responseContents":"window.location.href = \'https://localhost:8080\';"}'); } </script> </body> </html>
・上記を実行すると以下のエラーが出てしまいます。なぜでしょうか?
Access to XMLHttpRequest at 'https://xxx.execute-api.ap-northeast-1.amazonaws.com/xxx' from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
上記の改善と、現在はクロームで応急処置をして次に進もうとしているのですが、その時に415エラーを吐きだします。対応策はないのでしょうか。
内容以下
POST http~ 415
何かアドバイスお願いします。
よろしくお願いします。