# APIが飛ばないんですけど ## 問題と回答 Webアプリケーションからドメインが異なるAPIにリクエストを発行する際には、クロスオリジンについて注意する必要があります。 CORS (Cross-Origin Resource Sharing) に関する以下の問いについて、それぞれ適切な選択肢を選んでください。 ### 問1 https://exmaple.com と同じOriginを選んで下さい。 ![](https://i.imgur.com/z7y4vWP.png) :::success - https://example.com/hoge ::: ### 問2 app.ictsc で動いているアプリケーションから api.ictsc へ以下のような fetch() を実行したところ、CORSのエラーで正常に動きませんでした。 api.ictsc に設定する必要があるHTTP response headerをすべて選んでください。 ```javascript= fetch({ method: "POST", headers: { "Content-Type": "application/json" }, "body": JSON.stringify(data) }) ``` ![](https://i.imgur.com/DxxNfF2.png) :::warning 実際に鯖を立てて検証した ```htmlmixed= <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title></title> <script> fetch('http://localhost:3000', { method: "POST", headers: { "Content-Type": "application/json" } }) </script> </head> <body> </body> </html> ``` ```go= package main import ( "fmt" "net/http" ) func handler(w http.ResponseWriter, r *http.Request) { w.Header().Set("Access-Control-Allow-Origin", "*") w.Header().Set("Access-Control-Allow-Headers", "*") w.Header().Set("Content-Type", "application/json") fmt.Fprintf(w, "{}") } func main() { http.HandleFunc("/", handler) // ハンドラを登録してウェブページを表示させる http.ListenAndServe(":3000", nil) } ``` ::: :::success ~~全部じゃね?~~ ~~Origin,Methods~~ Origin, Headers ::: Content-Typeはデフォルトで許可されている ソース https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Access-Control-Allow-Headers ### 問3 選択肢に示すHTTPメソッドのうち、いかなる場合においてもpreflight requestが行われるものを選んでください。 ![](https://i.imgur.com/IMPOzf4.png) :::warning https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#Preflighted_requests > ![](https://i.imgur.com/dq5hAiE.png) ::: :::success - DELETE ::: ### 問4 preflight requestについて示した文章のうち、正しいものを全て選んでください。 ![](https://i.imgur.com/UxvZd4T.png) :::warning 考察 - 誤り: ドメインが一緒でもスキーマが違う場合はオリジンが異なるのでprefligtは飛ぶ - わからん - 誤り: これからAllow-Credentialがtrueの場合ダメだとわかる - https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Access-Control-Allow-Methods#Directives - わからん - 正解が一つ以上あるならこれを選ぶしかなくない? - 誤り: Allow Credentialがtrueの場合はアスタリスクは許可されない ::: :::success 3つ目 :::