gpt4 book ai didi

go - http.ListenAndServe 处理函数在端口 80 上执行了两次

转载 作者:IT王子 更新时间:2023-10-29 02:29:02 25 4
gpt4 key购买 nike

<分区>

如果我在端口 8080 上运行以下简单的 http 服务器代码,一切都会按预期进行。如果我在端口 80 上运行相同的代码,只需更改端口,处理函数就会针对每个请求执行两次。为什么以及如何解决?

// httptest project main.go
package main

import (
"net/http"
"log"
"fmt"
"html"
)

var count int

func defaultHandler(w http.ResponseWriter, r *http.Request) {
count++
fmt.Fprintf(w, "Hello, %q count=%d", html.EscapeString(r.URL.Path), count)
fmt.Println(count,r.RemoteAddr)
}

func main() {
http.HandleFunc("/", defaultHandler)
log.Fatal(http.ListenAndServe(":8080", nil))
}

如果我在浏览器中输入 localhost:8080,我会收到一个从 1 开始计数并随着每个新请求增加 1 的响应。

如果我将代码更改为端口 80 并在浏览器中仅输入 localhost 或 localhost:80,我得到的第一个响应的计数从 1 开始,但每个后续请求都会增加 2。同时执行两次控制台输出的打印语句。

在端口 80 上运行时有 3 个请求的终端控制台:

>go run main.go
1 [::1]:51335
2 [::1]:51335
3 [::1]:51335
4 [::1]:51335
5 [::1]:51335
6 [::1]:51335

浏览器中的响应是 Hello, "/"count=1, Hello, "/"count=3Hello, "/"count =5

我一直在使用 Go 版本 go1.9.2 windows/amd64 和最新的 Google Chrome 浏览器的 Windows 10 本地运行此程序。

但是,我在远程 Linux 服务器上的一个简单 Web 应用程序中检测到该问题,该服务器的代码是使用 go 版本 go1.9.1 linux/amd64 编译的。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com