WebAPIを開発していると、
CORS問題は結構つきまとう。
M2Mなら気にしないけど
ブラウザがからむとどうしてもしょうがない。
今回は、CURLでCORSの動作確認する方法を書き溜める。
CURL -X OPTIONSでOriginを指定して実行
とりあえずWebAPIはlocalhostにあるとする。
example.comからlocalhost/postにPOSTリクエストができるかを確認するには下記のようにパラメータを指定する。
-H でOriginを指定し、Access-Control-Request-MethodでPOSTを指定、-X OPTIONSを指定する感じ。
1 2 3 4 5 |
curl -H "Origin: http://example.com" \ -H "Access-Control-Request-Method: POST" \ -H "Access-Control-Request-Headers: X-Requested-With" \ -X OPTIONS \ -v "http://localhost/post" |
CORS設定でexample.comを許可している場合、
レスポンスに Access-Control-Allow-OriginやAccess-Control-Allow-Methodsが返ってくる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
> OPTIONS / HTTP/1.1 > User-Agent: curl/7.29.0 > Host: example.com > Accept: */* > Origin: http://example.com > Access-Control-Request-Method: POST > Access-Control-Request-Headers: X-Requested-With > < HTTP/1.1 200 OK < Allow: OPTIONS, GET, HEAD, POST < Cache-Control: max-age=604800 < Content-Type: text/html; charset=UTF-8 < Date: Thu, 13 May 2021 02:05:35 GMT < Expires: Thu, 20 May 2021 02:05:35 GMT < Server: EOS (vny/0451) < Content-Length: 0 < * Connection #0 to host example.com left intact * About to connect() to localhost port 80 (#1) * Trying localhost... * Connected to localhost (localhost) port 80 (#1) > OPTIONS /post HTTP/1.1 > User-Agent: curl/7.29.0 > Host: localhost:80 > Accept: */* > Origin: http://example.com > Access-Control-Request-Method: POST > Access-Control-Request-Headers: X-Requested-With > < HTTP/1.1 200 OK < Server: nginx < Date: Thu, 13 May 2021 02:05:35 GMT < Transfer-Encoding: chunked < Connection: keep-alive < Access-Control-Allow-Origin: * < Access-Control-Allow-Methods: GET, POST, PUT, PATCH, DELETE, OPTIONS, HEAD < Access-Control-Expose-Headers: < Access-Control-Max-Age: 7200 < Access-Control-Allow-Headers: X-Requested-With < * Connection #1 to host localhost left intact |
正しく設定できていないと、
それらのレスポンスが返ってこないので動作確認ができる。
じゃあね〜〜。