了解 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大小