目录
1.概述
编写web语言:
- java
 - php,现在都在尝试用go语言重写
 - python,例如:豆瓣
 - go语言 ===》 beego,gin两个主流的web框架
 
https协议:我们使用浏览器访问的时候发送的就是http请求
- http是应用层的协议,底层还是依赖传输层:tcp(短连接),网络层(ip)
 - 无状态的,每一次请求都是独立的,下次请求需要重新建立连接
 - https: 1,http是标准协议。2,https不是标准协议 ===》 https = http+ssl(非对称加密,数字证书) 3,现在所有网站都会尽量使用https开发:安全。
 
2.http请求报文格式

一个http请求可以分为四部分:
1,请求行 :包含:
1,格式:方法+URL+协议版本号;
2,请求方法:GET:获取数据; POST:上传数据(表单格式,json格式) PUT:修改数据; DELETE:删除数据
2,请求头:
1,格式:key:value
2,可以有很多键值对(包含协议自带,也包括用户自定义的)
3,常见重要头:Accept:接收数据的格式;
User-Agent:描述用户浏览器的信息;
Connection:Keep-Alive(长链接),Close(短链接);
Accept-Encoding:gzip,xxx 描述可以接受的编码
Cookie:由服务器设置的key-value数据,客户端下次请求的时候可以携带过来
Content-Type:application-form(表示上传的数据是表单格式);application
用户自定义的:name:Duke ;age:18等
3,空行:高数服务器,请求头结束了,用于分割
4,请求包体(可选的)
1,一般在POST方法时,会配套提供BODY
2,在GET的时候也可以提供BODY,但是这样容易混淆,不建议这样使用
3,上传两种数据格式:
1,表单:姓名,性别,年龄
2,json数据格式
前端与后台传输数据方法:
- 放在请求头中
 - 放在请求包体中
 - 放在URL中
 
3.http响应消息格式
http响应格式分为四部分:
1,状态行
1,协议格式:协议版本号+状态码+状态描述
2,实例1:HTTP/1.1 + 200 +OK
3,实例2:HTTP/1.1 + 404 + Page not found
4,常用的状态码:
1xx ===》客户端可以即系发送请求(一般感知不到)
2xx ===》正常访问,200
3xx ===》重定向
4xx ===》
401 ===》未授权 not authorized
404 ===》Not found
5xx
501 ===》internal error (服务器内部错误)
2,响应头
1,Content-Type:application/json
2,Server:Apache
3,Data
4,....
3,空行
用于分割,表示下面没有响应头了
4,响应包体
1,通常是返回josn数据
代码演示:
package main
import (
	"fmt"
	"io/ioutil"
	"net/http"
)
//http响应代码显示
func main() {
	//http包
	client := http.Client{}
	resp, err := client.Get("https://www.baidu.com")
	if err != nil {
		fmt.Println(" client.Get err", err)
		return
	}
	body := resp.Body
	readBodyStr, err := ioutil.ReadAll(body)
	if err != nil {
		fmt.Println(" ioutil.ReadAll err", err)
		return
	}
	fmt.Println("body string:", string(readBodyStr))
	ct := resp.Header.Get("Content-Type")
	date := resp.Header.Get("Date")
	server := resp.Header.Get("Server")
	fmt.Println("Content-Type:", ct)
	fmt.Println("Date", date)
	//BWS是Baidu Web Server,是百度开发的一个web服务器 大部分百度的web应用程序使用的是BWS
	fmt.Println("Server", server)
	url := resp.Request.URL
	code := resp.StatusCode
	status := resp.Status
	fmt.Println("url:", url)
	fmt.Println("code:", code)
	fmt.Println("status:", status)
}
 
演示结果:











