# APIが飛ばないんですけど
## 問題と回答
Webアプリケーションからドメインが異なるAPIにリクエストを発行する際には、クロスオリジンについて注意する必要があります。
CORS (Cross-Origin Resource Sharing) に関する以下の問いについて、それぞれ適切な選択肢を選んでください。
### 問1
https://exmaple.com と同じOriginを選んで下さい。

:::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)
})
```

:::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が行われるものを選んでください。

:::warning
https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#Preflighted_requests
> 
:::
:::success
- DELETE
:::
### 問4
preflight requestについて示した文章のうち、正しいものを全て選んでください。

:::warning
考察
- 誤り: ドメインが一緒でもスキーマが違う場合はオリジンが異なるのでprefligtは飛ぶ
- わからん
- 誤り: これからAllow-Credentialがtrueの場合ダメだとわかる
- https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Access-Control-Allow-Methods#Directives
- わからん
- 正解が一つ以上あるならこれを選ぶしかなくない?
- 誤り: Allow Credentialがtrueの場合はアスタリスクは許可されない
:::
:::success
3つ目
:::