目录
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)
}
演示结果: