了解 HTTP协议
明确两个问题:
什么是协议?协议就是双方在交互、通讯的时候, 遵守的一种规范、规则。
什么是http协议?客户端与服务器端在执行http请求的时候,遵守的一种规范。规范规定了客户端发送给服务器的报文格式,也规定了服务器发送给客户端的报文格式。客户端发送给服务器的称为"请求报文",服务器发送给客户端的称为"响应报文"。
客户端与服务端通信时传输的内容我们称之为报文。报文实质也是数据
客户端与服务器如何通讯
在浏览器地址栏上输入一个网址,浏览器就能显示出一些画面来,说明此时浏览器和服务器进行了通讯,传输了数据。
我们通过浏览器的开发者工具可以查看到http的请求数据与响应数据
1.为了方便查看,首先启动Tomcat,通过浏览器进入
http://localhost:8080/examples/servlets/servlet/RequestParamExample
2.填写参数,打开开发者工具,选择Network,提交数据
3.提交数据后,点击RequestParamExample,就可以查看到请求数据与响应数据
通过tomcat的这个示例,查看浏览器和 tomcat服务器的对接细节
<mark>Http请求数据简略分析</mark>
请求的数据里面包含三个部分内容 : 请求行 、 请求头 、请求体
通过上面的示例得到的请求数据
- 请求行
POST /examples/servlets/servlet/RequestParamExample HTTP/1.1
POST : 请求方式 ,以post去提交数据
examples/servlets/servlet/RequestParamExample:请求的地址路径 , 就是要访问哪个地方。
HTTP/1.1 协议版本
- 请求头
Host: localhost:8080
Connection: keep-alive
Content-Length: 22
Cache-Control: max-age=0
Origin: http://localhost:8080
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer: http://localhost:8080/examples/servlets/servlet/RequestParamExample
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Host:主机地址
Connection:Keep-Alive 保持连接
Content-Length: 数据长度
Cache-Control: 对缓存的操作
Origin:
Upgrade-Insecure-Requests:
Content-Type:提交的数据类型。经过urlencoding编码的form表单的数据
User-Agent:向服务器表明,当前来访的客户端信息。
Accept: 客户端向服务器端表示,我能支持什么类型的数据。
Referer:真正请求的地址路径,全路径
Accept-Encoding: gzip, deflate : 压缩算法 。
Accept-Language: 支持语言格式
- 请求体
firstname=Z&lastname=Y
浏览器真正发送给服务器的数据,发送的数据呈现的是key=value ,如果存在多个数据,那么使用 &
<mark>Http响应数据简略分析</mark>
服务器响应的数据里面包含三个部分内容 : 响应行 、 响应头 、响应体
通过上面的示例得到的响应数据
- 响应行
HTTP/1.1 200
HTTP/1.1:协议版本
200:状态码;一般会有OK(或其他):对应前面的状态码
状态码 | 响应结果说明 |
---|---|
200 | 请求成功 |
302 | 重定向,服务器会发送一个响应头Location,它指定了新请求的URL地址 |
404 | 请求的资源没有找到,说明客户端请求的资源在服务器不存在 |
500 | 请求资源找到了,但服务器内部出现错误 |
- 响应头
Content-Type: text/html;charset=UTF-8
Content-Length: 671
Date: Fri, 17 Jan 2020 09:16:50 GMT
Keep-Alive: timeout=20
Connection: keep-alive
Content-Type : 服务器返回给客户端的内容类型
Content-Length : 返回的数据长度
Date : 通讯的日期,响应的时间
Keep-Alive:
Connection:keep-alive 保持连接
- 响应体
显示在浏览器的页面,一般是html
<mark>Get 和 Post请求区别</mark>
以上示例是PSOT请求方式
- post请求
1.数据是以流的方式写过去,不会在地址栏上面显示。 现在一般提交数据到服务器使用的都是POST请求
2.以流的方式写数据,数据没有大小限制。
- get请求
1.会在地址栏后面拼接数据,有安全隐患。 一般从服务器获取数据,并且客户端也不用提交数据的时候,可以使用GET请求
2. 能够带的数据有限, 1kb大小