Http协议的内容
- 基于TCP协议,面向连接,安全
- 一次请求一次响应
- 每次请求都是独立的,多次请求不共享数据,但节约信道资源
- Java中利用会话(cookie,session)来解决多次请求数据共享问题
请求数据格式
打开F12访问百度,点击网络可查看
- Get没有请求体
- 请求数据有三部分:请求行,请求头,请求体
响应数据格式
常见响应状态码
状态码 | 英文描述 | 解释 |
200 |
| 客户端请求成功,即处理成功,这是我们最想看到的状态码 |
302 |
| 指示所请求的资源已移动到由 |
304 |
| 告诉客户端,你请求的资源至上次取得后,服务端并未更改,你直接用你本地缓存吧。隐式重定向 |
400 |
| 客户端请求有语法错误,不能被服务器所理解 |
403 |
| 服务器收到请求,但是拒绝提供服务,比如:没有权限访问相关资源 |
404 |
| 请求资源不存在,一般是URL输入有误,或者网站资源被删除了 |
428 |
| 服务器要求有条件的请求,告诉客户端要想访问该资源,必须携带特定的请求头 |
429 |
| 太多请求,可以限制客户端请求某个资源的数量,配合 Retry-After(多长时间后可以请求)响应头一起使用 |
431 |
| 请求头太大,服务器不愿意处理请求,因为它的头部字段太大。请求可以在减少请求头域的大小后重新提交。 |
405 |
| 请求方式有误,比如应该用GET请求方式的资源,用了POST |
500 |
| 服务器发生不可预期的错误。服务器出异常了,赶紧看日志去吧 |
503 |
| 服务器尚未准备好处理请求,服务器刚刚启动,还未初始化好 |
511 |
| 客户端需要进行身份验证才能获得网络访问权限 |
Apache Tomcat
- Tomcat是一个轻量级web服务器,封装了Http协议的很多代码
- 支持Servlet/JSP,也称Web容器,也称Servlet容器
- SpringBoot 本身支持有两类的 WEB 容器:默认的 Tomcat、Jetty
Servlet
- Tomcat服务器内嵌Servlet
- Servlet是处理请求的技术
- 不同于静态资源html等,servlet是动态的
url和uri
urn:统一资源名称(目前几乎没有使用urn,uri包括urn和url,目前的uri基本都是url)
uri:统一资源标识符,用于标识唯一的资源
url:统一资源定位符,用于找到资源的路径
Request请求
- HttpServletRequest和HttpServletResponse直接放在方法的形参中就可以使用了,servlet会自动拦截请求中的请求行,请求头,请求体并将其封装在httpServletRequest对象中
- 同样的,在服务器响应时,servlet会将httpServletResponse中设置的响应头等信息封装后发送给客户端
Request请求转发
- 服务器内部的资源跳转方式
- 用户不知道被转发了,浏览器路径不变
- 转发需要使用setAttribute等方法共享数据
Response响应
会话跟踪技术
- 打开浏览器,访问一个网站:建立会话
- 服务器or浏览器关闭:结束会话
- 一次会话可以包含多次请求和响应
-
会话跟踪
:服务器需要识别多次请求是否来自同一个浏览器,以便在同一会话的多次请求中共享数据 - Http是无状态的,所以需要会话跟踪实现会话内数据共享
- 客户端会话跟踪技术:Cookie
- 服务的会话跟踪技术:Session
Cookie
实际上就是一个保存在客户端某cookie文件中的键值对,客户端可以获取cookie,服务端可以设置cookie
cookie一般最大只有3kb,但可以存储特别多的键值对,cookie在前端每次发送请求时都会发送
后端发送cookie
一定要new一个Cookie对象
后端接收cookie
getCookies()获取特定的cookie
Cookie的原理
- Cookie基于HTTP协议
- 请求头:发送所有Cookie的数组;
响应头:set-Cookie:键:值 - 设置Cookie存活时间:先new一个Cookie对象,然后setMaxAge(),然后response.setCookie()
Cookie存储中文
- 中文必须先编码,取时必须先解码
- 由于Cookie是携带在URL中的,因此用URLEncoder类中的方法来进行编码解码
Session
- 服务的会话跟踪技术,数据保存在服务的
- Session相比Cookie更安全,但不能实现类似:客户端记住账号密码的功能
- Session保存在后端的内存中
后端设置Session
会自动生成一个JSessionID=xxxxxxxxxx保存在Cookie中,因此保证了会话中Session的共享
钝化、活化
销毁
Cookie和Session区别
Filter拦截器
配置拦截资源路径
过滤链