一、http协议
超文本传输协议(HTTP,Hyper Text Transfer Protocol)是互联网上应用最为广泛的一种网络传输协议,所有的wWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。
Request包分为3部分
:
第一部分叫Request line(请求行)
第二部分叫Request header(请求头)
第三部分是body(主体)。
HTTP协议定义了很多与服务器交互的请求方法,最基本的有4种,分别是GET,POST,PUT,DELETE。一个URL地址用于描述一个网络上的资源,而HTTP中的GET, POST, PUT, DELETE就对应着对这个资源的查,增,改,删4个操作。我们最常见的就是GET和POST了。GET一般用于获取/查询资源信息,而POST一般用于更新资源信息
响应状态码
1XX 提示信息 - 表示请求已被成功接收,继续处理
2XX 成功 - 表示请求已被成功接收,理解,接受
3XX 重定向 - 要完成请求必须进行更进一步的处理
4XX 客户端错误 - 请求有语法错误或请求无法实现
5XX 服务器端错误 - 服务器未能实现合法的请求
常见的状态码
200:请求成功,浏览器会把响应体内容(通常是 html)显示在浏览器中;
404:请求的资源没有找到,说明客户端错误的请求了不存在的资源;
500:请求资源找到了,但服务器内部出现了错误;
302:重定向,当响应码为 302 时,表示服务器要求浏览器重新再发一个请求,服务器会发送一个响应头 Location,它指定了新请求的 URL 地址;
http包建立Web服务器
package main
package main
import (
"fmt"
"net/http"
)
func ServerHttp(w http.ResponseWriter,r *http.Request){
fmt.Fprintln(w,"通过handleFunc启动一个http服务") //这个写入到w的是输出到客户端的
}
func main(){
http.HandleFunc("/",ServerHttp) //设置访问的路由
http.ListenAndServe(":8080",nil) // //设置监听的端口
}
通过自定义类型启动一个http服务
package main
import (
"fmt"
"net/http"
)
func ServerHttp(w http.ResponseWriter,r *http.Request){
fmt.Fprintln(w,"通过handleFunc启动一个http服务") //这个写入到w的是输出到客户端的
}
type DefineServerMux struct {}
func (dsm * DefineServerMux)ServeHTTP(w http.ResponseWriter,r *http.Request){
fmt.Fprintln(w,"通过自定义类型启动一个http服务")
}
func main(){
http.HandleFunc("/",ServerHttp) //设置访问的路由
defineServerMux := DefineServerMux{}
http.Handle("/getUserinfo",&defineServerMux)
http.ListenAndServe(":8080",nil) // //设置监听的端口
}
http请求获取url参数分析
package main
import (
"fmt"
"net/http"
"net/url"
)
func ServerHttp(w http.ResponseWriter,r *http.Request){
//http://localhost:8080/getUrl?query=lin&name=xihong
fmt.Fprintln(w,r.URL.RawQuery)
fmt.Fprintln(w,r.URL.Host)
fmt.Fprintln(w,r.URL.Path)
rawquery := r.URL.RawQuery
va,_ := url.ParseQuery(rawquery)
fmt.Fprintln(w,"获取url当中key为name的值",va.Get("name"))
fmt.Fprintln(w,"通过handleFunc启动一个http服务") //这个写入到w的是输出到客户端的
}
type DefineServerMux struct {}
func (dsm * DefineServerMux)ServeHTTP(w http.ResponseWriter,r *http.Request){
fmt.Fprintln(w,"通过自定义类型启动一个http服务")
}
func main(){
http.HandleFunc("/getUrl",ServerHttp) //设置访问的路由
defineServerMux := DefineServerMux{}
http.Handle("/getUserinfo",&defineServerMux)
http.ListenAndServe(":8080",nil) // //设置监听的端口
}