一、HTTP协议
1.http协议:
规定了客户端和服务端交流时的数据格式
①HTTP1.0:
- 运行方式:一个连接发送一个请求
- 基于HTTP协议的客户/服务器模式的信息交换过程,如图所示,它分四个过程,建立连接、发送请求信息、发送响应信息、关闭连接。
- 浏览器与WEB服务器的连接过程是短暂的,每次连接只处理一个请求和响应。对每一个页面的访问,浏览器与WEB服务器都要建立一次单独的连接。
- 浏览器到WEB服务器之间的所有通讯都是完全独立分开的请求和响应。
- 无状态
②HTTP1.1:
- 一个连接发送多个请求
- 在一个TCP连接上可以传送多个HTTP请求和响应。
- 多个请求和响应过程可以重叠
- 增加了更多的请求头和响应头,比如Host、If-Unmodified-Since请求头等
在地址栏中输入网址,客户端的数据发送到服务器,由浏览器组织格式,把内容发送到服务器
服务端发送到客户端的数据,由Tomcat服务器组织好格式,发送回客户端
2.特点:
①请求信息(由四部分组成)
(行和头的信息是浏览器组织成这种格式发送到服务端的,有服务端组织格式发送到客户端,我们只写了正文里的东西)
请求信息:可以理解为就是想向服务器发送这些东西,服务器可以解析,然后提取东西给浏览器响应
<1>:请求行 (由3部分组成)
POST /login.html HTTP/1.1
1.请求的方式:
常见的是get和post方式
- GET方式:参数在请求行中,跟在url后面
如请求方式为GET方式,则可以在请求的URL地址后以?的形式带上交给服务器的数据,多个数据之间以&进行分隔,
例如:GET /mail/1.html?name=abc&password=xyz HTTP/1.1
GET方式的特点:在URL地址后附带的参数是有限制的,其数据容量通常不能超过1K。
- POST方式:参数在请求体中
如请求方式为POST方式,则可以在请求的正文内容中向服务器发送数据,Post方式的特点:传送的数据量无限制。
2.请求的资源地址:
/login.html
3.请求协议:
http1.1
<2>请求头信息(2部分组成)(键值对)
1.头名称:一般首字母大写
2.头值:
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://localhost/login.html
Connection: keep-alive
Upgrade-Insecure-Requests: 1
<3>请求空行
一个空行,分隔请求头和请求体
<4>请求体(请求正文) (只有请求的类型是post才会有) (请求参数):
把客户端所填写的请求的信息提交给服务端(服务端通过请求对象拿取信息)
②响应信息:(由三部分组成)
(服务器回回来的东西)(控制头控制浏览器的怎么做)
<1>.响应行(由3部分组成)
a) 响应协议
b) 状态码
状态码用于表示服务器对请求的各种不同处理结果和状态,它是一个三位的十进制数。响应状态码分为5类,使用最高位为1到5来进行分类如下所示:
c) 状态信息
<2>.响应头信息(2部分):
a): 响应头
b): 头值
<3>.响应正文:
服务端发送给客户端的html源代码(客户端通过浏览器解析再把数据显示在页面中)
3.get和post方式区别:
1.get方式请求参数会附加在url后,而post是看不到的,post相对安全
2.get方式对提交的数据大小有限制(1k),post方式对数据大小没有限制.
4. 响应的状态码:
200:服务端对客户端正常响应
•表示一切正常,返回的是正常请求结果
302(307): 请求重定向
指出被请求的文档已被临时移动到别处,此文档的新的URL在Location响应头中给出
304: 未修改 (页面在服务器没有修改过)
•表示客户机缓存的版本是最新的,客户机可以继续使用它,无需到服务器请求。
404:找不到
•服务器上不存在客户机所请求的资源。
500:代码错误
•服务器端的程序发生错误
在地址栏输入网址后:
回车:Cache 把请求提交一遍(在浏览器的缓存中取)
点击右边的刷新按钮:304 把刚才的请求再提交一遍(先去到服务器,服务器判断该页面有没有修改,如果没有,再通知客户端从浏览器的缓存中取)
键盘ctrl+F5:200 一定要去到服务器取,不管有没有缓存,服务器再发送一遍数据到客户端
二、请求头和响应头
1.请求头信息:
Accept: 浏览器告诉服务端, 浏览器可接受的MIME类型
MIME类型:相当于操作系统下的文件类型。
是由大类型和小类型组成: text/html;
对应的关系在conf/web.xml中查询
Accept-Charset: 浏览器告诉服务端, 浏览器支持哪种字符集
Accept-Encoding: 浏览器告诉服务端, 浏览器能够进行解码的数据编码方式,比如gzip
Accept-Language: 浏览器告诉服务端,浏览器支持的语言种类
User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息,可以在服务器端获取该头信息,解决浏览器的兼容性问题。
Host: 浏览器告诉服务端,浏览器所在的主机
Referer: 浏览器告诉服务端,当前页面从哪里来的。就是上一个页面
用处:
1. 用来记录广告的信息
投放广告到不同的平台,当用户点击链接时,可以获得该链接的来源,从而统计出哪个平台最吸引用户,将广告投放到该平台
2. 防盗链
Content-Type: 浏览器告诉服务端 ,内容类型 If-Modified-Since: 浏览器告诉服务端
Content-Length: 浏览器告诉服务端请求正文内容长度
Connection: 浏览器告诉服务端该链接是否存活,是否可被复用
Cookie: 浏览器告诉服务端 ,浏览器携带的Cookie
Date: 浏览器告诉服务端,发送请求的时间
2. 响应头信息
Location : 服务端用来告诉浏览器,请求需要重定向.(必须结合状态吗302使用)
Server : 服务端用来告诉浏览器,服务器的类型
Content-Encoding: 服务端用来告诉浏览器,服务器对数据采用的编码(主要是指压缩的格式)
Content-Length: 服务端用来告诉浏览器,响应正文的长度
Content-Language: 服务端用来告诉浏览器,zh-cn服务发送的文本的语言
Content-Type: 服务端用来告诉浏览器,你要用哪个码表来解析二进制数据
Last-Modified : 服务端用来告诉浏览器,访问资源的最后修改时间
Refresh:服务端用来告诉浏览器,多长时间刷新一次
Content-Disposition: 服务端用来告诉浏览器,以下载文件的方式打开文件
Expires: -1 : 服务端用来告诉浏览器,不要缓存 Cache-Control:no-cache (1.1) Pragma: no-cache (1.0)
Set-Cookie: 服务端用来告诉浏览器,要存储的内容