HTTP(HyperText Transfer Protocol,超文本传输协议)是一种用于Web浏览器和Web服务器之进行通信的应用层协议。HTTP是一种无状态协议,即每个请求和响应之间没有关联性,服务器不会保存任何客户端的状态信息,因此每个请求都是独立的。 HTTP协议的主要特点包括:
1.客户端-服务器模型:HTTP协议是基于客户端-服务器模型的,客户端发送请求,服务器响应请求.
2.无连接:每个请求和响应都是独立的,服务器不保存客户端的状态信息。
3.无状态:每个请求和响应都是独立的,服务器不会保存任何客户端的状态信息.
4.可扩展: HTTP协议支持扩展,可以通过添加头部字段来实现新的功能.
HTTP协议通常使用TCP作为传输层协议,通过80端口进行通信。HTTP协议中定义了很多请求方法,包括GET、POST、PUT、DELETE等。其中,GET方法用于获取资源,POST方法用于提交数据,PUT方法用于更新资源,DELETE方法用于删除资源。HTTP协议中的响应包括状态码和响应头,常见的状态码包括200 (0K) 、404 (Not Found) 、500 (lnternal Server Error)等
HTTP客户端
下面是一个简单的使用net/http包发送HTTP GET 请求的例子:
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
resp, err := http.Get("http://www.example.com/")
if err != nil {
fmt.Println(err)
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(body))
}
上面的代码发送一个HTTP GET 请求到"www.example.com/" ,并输出响应体内容。 使用http.Client可以实现更复杂的HTTP客户端逻辑,例如设置请求头,发送POST请求等。
HTTP服务器
下面是一个简单的HTTP服务器例子,它监听8080端口,收到任何请求都会返回"Hello,World!"
package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, World!")
})
http.ListenAndServe(":8080", nil)
}
使用http。ServeFile可以轻松将静态文件提供给客户端,例如:
package main
import (
"net/http"
)
func main() {
http.Handle("/", http.FileServer(http.Dir("static")))
http.ListenAndServe(":8080", nil)
}
上面的代码将把当前目录下的"static"文件夹作为根目录,提供静态文件服务。例如,客户端请求"http://localhost:8080/index.html" 时,服务器将返回当前目录下的“static/index.html" 文件。
以上是HTTP客户端和服务器的基本用法,net/http 包还提供了许多其他有用的功能,例如Websocket、HTTP长连接、HTTP代理等。可以查看官方文档来了解更多信息。