JSのクライアントから Goで書かれたAPIサーバにリクエストするようなシステムを作りたいです。
JSクライアントのサーバとGoのAPIサーバは別で実行されていることを想定しています。
以下のような簡単な GoのAPIサーバをローカルの8080ポートで動かしてます。
package main import ( "fmt" "log" "net/http" ) func handle(w http.ResponseWriter, r *http.Request) { w.Header().Set("Access-Control-Allow-Origin", "*") w.Header().Set("Access-Control-Allow-Headers", "Content-Type") fmt.Println("aaa") w.WriteHeader(http.StatusOK) fmt.Fprint(w, "SUCCESS") } func main() { http.HandleFunc("/", handle) log.Fatal(http.ListenAndServe(":8080", nil)) }
ここで別の ローカルポート 3000 で動かしている JSクライアントからサーバにPOSTを実行します。
fetch( "http://localhost:8080/", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({"test": 1}) )
上記を実行すると、APIサーバの方の標準出力には aaa
が2回表示されます。
これは JSのコードが2回実行されているわけではなく、上記をコンソールから実行しても 2重で実行してしまうようです。
ブラウザの開発者ツールのネットワーク情報を見たところリクエストは1回しか発行されていないので、サーバ側の問題かもしれないとは思っています。
こちらの再現方法ですが、 headers の中身を空にすると問題なく 1回しか実行されないようです。
また、サーバ側からヘッダーの中身を見てみると、1回目は Content-Type
が渡ってきておらず 2回目に Content-Type
が入ったヘッダーのリクエストが実行されているようでした。
こちらが2重実行してしまう原因を、ご存知の方いらっしゃいませんでしょうか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/14 07:16