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

如果我在端口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。同时,控制台输出的print语句执行两次。

终端控制台在端口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=1Hello, "/" count=3Hello, "/" count=5

我已经在Windows 10上的Go版本go1.9.2 windows / amd64和最新的Google Chrome浏览器上本地运行了此程序。

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

回答:

我只是在Fiddler打开的情况下在我的电脑上尝试过

我注意到在使用Google Chrome浏览器访问该网址时,浏览器发出了2个请求

GET / HTTP/1.1

GET /favicon.ico HTTP/1.1

网站图标的请求也由defaultHandler处理,这导致计数增加

我也尝试过使用firefox,并且它不会再发送对favicon的请求

以上是 http.ListenAndServe处理函数在端口80上执行了两次 的全部内容, 来源链接: utcz.com/qa/414212.html

回到顶部