09-HTTP请求协议分析

目标

  • 知道请求报文包含请求行、请求头、空行、请求体

1.请求协议的格式.

8

Request Headers 中就是请求的报文数据内容. 下面就是我们要请求的报文示例数据:

GET / HTTP/1.1
Host: localhost:10000
Connection: keep-alive
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7

就是浏览器向服务器请求数据时候的格式!

注意,下面配图(windos+firefox)和上面请求协议头不同,不影响我们理解http协议

image-20180620110724765

注:配图环境 windos+firefox

http请求又包含了四个部分

  1. 请求行(request-line)
  2. 请求头(request-header)
  3. 空行
  4. 请求数据(request-content),也叫作请求内容或者请求主体

image-20180620110402512

1.1 请求行

请求行又可以分成三个部分:

请求方式 请求路径 协议版本

image-20180620111028719

其中,GET就是请求方式,/model/list_father.php就是请求路径,HTTP/1.1就是协议版本号

需要注意的几点:

  1. 请求行需要单独的占一行,用来说明当前请求的最基本的信息
  2. 请求路径是不包括域名的
  3. HTTP协议以前是1.0版本,现在是1.1版本

不同浏览器、浏览器版本都存在差异:

image-20180620111141879

image-20180620111207804

1.2 请求头

请求头就是所有当前需要用到的协议项的集合!

协议项就是浏览器在请求服务器的时候事先告诉服务器的一些信息,或者一些事先的约定!

常见的请求头有:

host : 当前url中所要请求的服务器的主机名(域名)

image-20180620111534306

accept-encoding :是浏览器发给服务器,声明浏览器支持的压缩编码类型  比如gzip

image-20180620111612654

accept_charset :表示,浏览器支持的字符集

referer :表示,此次请求来自哪个网址

image-20180620111703849

accept-language :可以接收的语言类型,cn,en,有权重的高低之分

image-20180620111743724

Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3

cookie :如果之前当前请求的服务器在浏览器端设置了数据(cookie),那么当前浏览器再次请求该服务器的时候,就会把对应的数据带过去

image-20180620111818544

user-agent :用户代理,当前发起请求的浏览器的内核信息

image-20180620111902089

accept :表示浏览器可以接收的数据类型,text/html,image/img

image-20180620111929061

content-length(post) :只有post提交的时候才会有的请求头,显示的是当前要提交的数据的长度(字节)

if-modified-since(get) :表示在客户端向服务器请求某个资源文件时,询问此资源文件是否被修改过

1.3 空行

就是用来分离请求头和请求数据,意思就是请求头到此结束!

1.4 请求数据

只有post方式提交的时候,才有请求数据!

image-20180620112305366

2. 请求报文格式总结

image-20180620112343974

3. 模拟TCP服务器

通过网络调试助手模拟TCP服务器,接收request请求

第一步,打开网络调试助手

​ 协议类型选择:TCP服务器

​ 本地IP地址:127.0.0.1

​ 本地端口:8080

第二步,点击连接网络

image-20180620204337394

第三步,打开浏览器,在浏览器中输入 127.0.0.1:8080

image-20180620204104510

回车后,查看网络调试助手接收到的数据

image-20180620204242075