回答編集履歴

1

追記

2023/02/04 03:15

投稿

退会済みユーザー
test CHANGED
@@ -3,3 +3,40 @@
3
3
  fetch API を使ったようですが、その場合クロスオリジンになって CORS に引っかかったのでしょう。jQuery ajax とか、直に XMLHttpRequest を使っても同じです。
4
4
 
5
5
  その場合はサーバー側で CORS 対応する必要があり、フロントエンドで fetch API や XMLHttpRequest を使っている限りは何ともなりません。
6
+
7
+ ---
8
+
9
+ **【追記】**
10
+
11
+ 下のコメント欄の 2023/02/04 11:08 の私のコメントで「あとで回答欄に詳細を追記しておきます」と書いた件です。
12
+
13
+ クロスドメインからブラウザに実装された JavaScript の fetch で要求をかけると、ブラウザが自動的に CORS に対応した要求を出します。
14
+
15
+ 要求が単純なリクエストでない場合は事前にプリフライトリクエストを出します。ブラウザはプリフライトリクエストの応答を見て再度要求を出してデータを取得するという仕組みになっています。
16
+
17
+ 詳しくは以下の記事とか CORS でググってヒットする記事を見てください。
18
+
19
+ CORS(Cross-Origin Resource Sharing)
20
+ https://www.tohoho-web.com/ex/cors.html
21
+
22
+ 質問者さんの fetch のコードには、単純なリクエストの条件から外れるヘッダを追加する ```'Access-Control-Allow-Origin': '*'``` があるのでプリフライトリクエストが出ます。
23
+
24
+ 下の画像は質問者さんの fetch のコードと同じものを使ったときの要求・応答を Fiddler というツールを使ってキャプチャしたものです。
25
+
26
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2023-02-04/341b5943-207e-4d5b-b698-29d50c6645ab.jpeg)
27
+
28
+ CORS に適切な要求を出すのはブラウザの仕事で、ブラウザが単純なリクエストになるか否かを判断し、単純なリクエストでないと判断した場合は自動的にプリフライトリクエストを出します。上の画像の赤枠で示したプリフライトクエストに必要なヘッダを含めるのもブラウザの仕事です。
29
+
30
+ 上の画像でプリフライトリクエストの HTTP 動詞が OPTIONS になっているのに注目してください。
31
+
32
+ **GAS は GET と POST だけしか受け付けないそうなので、プリフライトリクエストが出たのでは何ともならないはずです。**
33
+
34
+ ググって調べただけで定かではないですが、GAS は単純なリクエストであれば処理できるという記事を目にします。なので、プリフライトリクエストが出ないように(単純なリクエストになるように)して試してみてはいかがでしょう。
35
+
36
+ 質問の fetch のコードの ```'Access-Control-Allow-Origin': '*'``` をコメントアウトすれば、以下の通り単純な要求になります。
37
+
38
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2023-02-04/974b5511-5c20-4618-a32d-110a2de24438.jpeg)
39
+
40
+ プリフライトリクエストなしで即 GET 要求が出ています。赤枠で示した CORS に必要なヘッダもブラウザが追加してくれます。
41
+
42
+ サーバー側が CORS に対応していれば、青枠で示したような CORS 対応の応答ヘッダが返ってきて、ブラウザはそれを見てコンテンツを取得します。