什么是协议?
协议是一种语言,也是一种约定好的规则。 那么使用HTTP协议,机器就能像人一样,使用双方都理解的语言(协议)进行交流(通信)。
HTTP协议是专门用于客户端(浏览器)和服务端进行通信而设计。
请求报文 和 响应报文
当我们输入网站路径在打开一个页面时,浏览器在内部就会将 网站路径 按照 HTTP协议 转化为 请求报文 发送给服务器;当服务器处理之后发送内容给客户端时,要把内容 按照 HTTP协议 转化为 相应报文,浏览器解析响应报文 呈现页面内容。
因此 问题的关键就在于理解 HTTP协议是如何 转化为 请求报文 和 响应报文的。
下面在浏览器输入URL:https://news.baidu.com/guonei?name=11,打开调试工具,分别查看:Request Headers 和 Response Headers,分别点击View Source 查看原始报文。
Request Headers(请求报文)
GET /guonei?name=11 HTTP/1.1
Host: news.baidu.com
Connection: keep-alive
......
GET /guonei?name=11 HTTP/1.1
:请求首行
- GET:请求方法,常见的有 GET POST PUT DELETE
- /guonei?name=11:请求路径和参数,在域名后边,所有的请求路径以
/
开头;所有的参数以?
开头 - HTTP/1.1:使用的语言 和 版本号
在请求首行下面的都是请求首部字段,下面的字段根据HTTP协议的定义代表固定的含义:
比如,Host:表示访问的域名;Connection:表示进行长连接…
当有请求体时,请求体数据会和上边的请求首部字段 隔行放置。请求体的的格式也有好几种常用的有:JSON格式、form-urlencoded格式、formData。
GET /guonei?name=11 HTTP/1.1
Host: news.baidu.com
Connection: keep-alive
{"username": " 胡三疯", "gender": "男"} // SON格式
username=胡三疯&gender=男 // orm-urlencoded格式
Request Headers(相应报文)
响应报文其实格式上和请求报文是一致的,无非就是 报文字段可能不同而已
HTTP/1.1 200 OK // 使用的语言 和 版本号 响应码 相应描述
Connection: keep-alive
Content-Encoding: gzip
参考资料