演示并介绍客户端(浏览器)如何与服务器端通讯和数据交互

一.相关协议

Http协议
协议:双方在交互、通讯的时候, 遵守的一种规范、规则。
http协议:针对网络上的客户端 与 服务器端在执行http请求的时候,遵守的一种规范。 其实就是规定了客户端在访问服务器端的时候,要带上哪些东西, 服务器端返回数据的时候,也要带上什么东西。
版本:1.0&1.1
这里不详细介绍HTTP等相关协议,具体的请见我另一篇博文:HTTP与TCP/IP

二.准备工作

在地址栏中键入网络地址 回车 或者是平常注册的时候,点击了注册按钮 , 浏览器都能显示出来一些东西。那么背地里到底浏览器和服务器是怎么通讯。 它们都传输了哪些数据。
工具:
1.安装抓包工具 HttpWatch
2.打开tomcat. 输入localhost:8080
3.打开首页在首页上找到Example 字样
4.选择 servlet 例子 —> Request Parameter执行tomcat的例子,然后查看浏览器和 tomcat服务器的对接细节
演示并介绍客户端(浏览器)如何与服务器端通讯和数据交互
演示并介绍客户端(浏览器)如何与服务器端通讯和数据交互
演示并介绍客户端(浏览器)如何与服务器端通讯和数据交互
演示并介绍客户端(浏览器)如何与服务器端通讯和数据交互
操作流程:演示并介绍客户端(浏览器)如何与服务器端通讯和数据交互
演示并介绍客户端(浏览器)如何与服务器端通讯和数据交互
三.分析演示并介绍客户端(浏览器)如何与服务器端通讯和数据交互
官方HTTP/1.1文档给出的解析:
Request解析:演示并介绍客户端(浏览器)如何与服务器端通讯和数据交互基本含义: 请求:从客户机到服务器的请求消息在该消息的第一行中包括要应用到的方法资源资源的标识符和正在使用的协议版本

请求行:请求行以方法令牌开头,然后是请求uri协议版本,以及CRLF(回车换行)。元素由SP(空格)字符分隔。除最后的CRLF(回车换行)外,不允许有CR(回车)或LF(换行)序列。
请求行=方法 SP 请求uri SP http版本 CRLF(回车换行)

备注:
在本例中, 请求uri 是/examples/servlets/servlet/RequestParamExample
完整的全路径,即Referer:http://localhost:8080/examples/servlets/servlet/RequestParamExample
本例中请求行是:POST /examples/servlets/servlet/RequestParamExample HTTP/1.1

Method解析:

演示并介绍客户端(浏览器)如何与服务器端通讯和数据交互
基本含义:方法令牌指示要在请求uri标识的资源上执行的方法。该方法区分大小写。文档中也给出了几种请求方法,常用的是POST和GET

post和get请求方式的特点:

post

1.数据是以的方式写过去,不会在地址栏上面显示。 现在一般提交数据到服务器使用的都是POST 2.以流的方式写数据,所以数据没有大小限制。

get

1.会在地址栏后面拼接数据,所以有安全隐患。 一般从服务器获取数据,并且客户端也不用提交上面数据的时候,可以使用GET 2.能够带的数据有限, 1kb大小。

post和get请求方式的区别:

1.请求路径不同,post请求,在urI后面不拼接任何数据,get请求,在uri后面拼接数据。

2.带上的数据不同。post请求会使用流的方式写数据。get请求是在地址栏上带数据。

3.post请求使用流的方式写数据,所以一定需要一个Content-Length的头来说明数据的长度有多少。

Request Header Fields(请求头字段)
演示并介绍客户端(浏览器)如何与服务器端通讯和数据交互基本含义:请求头字段允许客户端传递关于请求和客户端自身的附加信息, 到服务器。这些字段充当请求修饰符,其语义相当于编程中的参数语言的方法调用。

本例request总结:

演示并介绍客户端(浏览器)如何与服务器端通讯和数据交互
请求的数据里面包含三个部分内容 : 请求行 、 请求头 、请求体
请求行:POST /examples/servlets/servlet/RequestParamExample HTTP/1.1
POST : 请求方式 ,以post去提交数据
/examples/servlets/servlet/RequestParamExample请求的地址路径 , 就是要访问哪个地方。
请求体 firstname=jiacheng&lastname=DING 浏览器真正发送给服务器的数据 发送的数据呈现的是key=value ,如果存在多个数据使用 &。
Accept: 客户端向服务器端表示,我能支持什么类型的数据。
Referer : 真正请求的地址路径,全路径Accept-Language: 支持语言格式
User-Agent: 用户代理 向服务器表明,当前来访的客户端信息。
Content-Type: 提交的数据类型。经过urlencoding编码的form表单的数据
Accept-Encoding: gzip, deflate : 压缩算法 。
Host : 主机地址
Content-Length: 数据长度
Connection : Keep-Alive 保持连接
Cache-Control : 对缓存的操作

官方HTTP/1.1文档给出的解析:
Response解析:演示并介绍客户端(浏览器)如何与服务器端通讯和数据交互
基本含义:在接收和解释请求消息之后,服务器将使用HTTP响应消息进行响应
响应消息的第一行是状态行,由协议版本和组成数字状态码及其相关的文本短语,每个元素由SP字符(空格)分隔。没有CR(回车)或LF(换行)允许,但在最后的CRLF(回车换行)序列中除外。

状态行(响应行)= http版本 SP(空格) 状态码 SP(换行) 原因短语 CRLF(回车或换行).本例中状态行(响应行)是:HTTP/1.1 200 OK

HTTP/1.1是http版本;200是状态码(交互到底是什么样结果的一个code. ),OK是状态码对应状态。

常见的状态码和状态有:
200 : 成功,正常处理,得到数据。
403 : for bidden 拒绝
404 : Not Found
500 : 服务器异常

100-505之间的状态码及其对应的状态如下:
演示并介绍客户端(浏览器)如何与服务器端通讯和数据交互
Response Header Fields(响应头字段)
演示并介绍客户端(浏览器)如何与服务器端通讯和数据交互
基本含义:响应头字段允许服务器传递关于响应的附加信息,而这是不可能的放在状态行中。这些头字段提供有关服务器的信息和关于进一步访问的信息由请求uri标识的资源。

本例response总结:

演示并介绍客户端(浏览器)如何与服务器端通讯和数据交互
Server: 服务器是哪一种类型。 Tomcat
Content-Type : 服务器返回给客户端你的内容类型
Content-Length : 返回的数据长度
Date : 通讯的日期,响应的时间

扩展:

URLURI的区别: URL是Uniform Resource Location的缩写,译为“统一资源定位符”。通俗地说,URL是Internet上 用来描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上。
URI:Web上可用的每种资源 - HTML文档、图像、视频片段、程序等 - 由一个通用资源标志符(Uniform Resource Identifier, 简称"URI")进行定位。

Web资源
在http协议当中,规定了请求和响应双方, 客户端和服务器端。与web相关的资源。 有两种分类。
静态资源:html 、 js、 css
动态资源servlet/jspServletservlet是什么?其实就是一个java程序,运行在我们的web服务器上,用于接收和响应 客户端的http请求。 更多的是配合动态资源来做。 当然静态资源也需要使用到servlet,只不过是Tomcat里面已经定义好了一个默认的 DefaultServlet。