目录:
(1)HTTP 响应状态码有什么特点?
(2)HTTP 协议包括哪些请求?
(3)Get 和 Post 的区别?
(4)HTTP 中重定向和请求转发的区别?
(5)HTTP 和 HTTPS 的区别?
(6)HTTP 请求报文与响应报文格式?
(7)在浏览器中输入 url 地址到显示主页的过程?
(8)Cookie 和 Session 的区别?
(9)Cookie 的过期和 Session 的超时有什么区别?
(10)如何解决分布式 Session 问题?
(11)过滤器和拦截器的区别?
(1)HTTP 响应状态码有什么特点?
(2)HTTP 协议包括哪些请求?
GET:对服务器资源的简单请求
POST:用于发送包含用户提交数据的请求
HEAD:类似于 GET 请求,不过返回的响应中没有具体内容,用于获取报头
PUT:传说中请求文档的一个版本
DELETE:发出一个删除指定文档的请求
TRACE:发送一个请求副本,以跟踪其处理进程
OPTIONS:返回所有可用的方法,检查服务器支持哪些方法
CONNECT:用于 ssl 隧道的基于代理的请求
(3)Get 和 Post 的区别?
GET:
get 重点是从服务器上获取资源
get 传输数据是通过 URL 请求,以 field(字段) = value 的形式,置于 URL 后, 并用“?”连接,多个请求数据间用“&”连接
get 传输数据量小,因为受 URL 长度限制,但是效率高
get 是不安全的,因为 URL 是可见的,可能会泄漏私密信息
get 方式只能支持 ASCII 字符,向服务器传的中文字符可能会乱码
POST:
post 重点是向服务器发送数据。
post 传输数据是通过 HTTP 的 post 机制。将字段和对应值封存在请求实体中发 送给服务器。这个过程用户是不可见的
post 可以传输大量数据,所以上传文件时只能用 post
post 支持标准字符集,可以正确传递中文字符
post 较 get 安全性高
总结:
GET 用于获取信息,无副作用,幂等,且可缓存
POST 用于修改服务器上的数据,有副作用,非幂等,不可缓存
(4)HTTP 中重定向和请求转发的区别?
本质区别:
转发是服务器行为
重定向是客户端行为
重定向特点:两次请求,浏览器地址发生变化,可以访问自己 web 之外的资源, 传输的数据会丢失。
请求转发特点:一次强求,浏览器地址不变,访问的是自己 本身的 web 资源,传输的数据不会丢失。
(5)HTTP 和 HTTPS 的区别?
HTTPS = HTTP + SSL
https 有 ca 证书,http 一般没有
http 是超文本传输协议,信息是明文传输。https 则是具有安全性的 ssl 加密传 输协议
http 默认 80 端口,https 默认 443 端口
(6)HTTP 请求报文与响应报文格式?
请求报文: a、请求行:包含请求方法、URI、HTTP 版本信息 b、请求首部字段 c、 请求内容实体
响应报文: a、状态行:包含 HTTP 版本、状态码、状态码的原因短语 b、响应首 部字段 c、响应内容实体
(7)在浏览器中输入 url 地址到显示主页的过程?
总体来说分为以下几个过程:
1、域名解析
2、发起 TCP 的三次握手
3、建立 TCP 连接后发起 http 请求
4、服务器响应 http 请求,浏览器得到 HTML 代码
5、浏览器解析 HTML 代码,并请求 HTML 代码中的资源
6、浏览器对页面进行渲染呈现给用户
7、连接结束
(8)Cookie 和 Session 的区别?
Cookie: 是 web 服务器发送给浏览器的一块信息,浏览器会在本地一个文件中给 每个 web 服务器存储 cookie。以后浏览器再给特定的 web 服务器发送请求时, 同时会发送所有为该服务器存储的 cookie。 Session: 是存储在 web 服务器端的 一块信息。session 对象存储特定用户会话所需的属性及配置信息。当用户在应用程 序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个 用户会话中一直存在下去。
区别:
①存在的位置
cookie 存在于客户端,临时文件夹中;
session 存在于服务器的内存中,一个 session 域对象为一个用户浏览器服务
②安全性
cookie 是以明文的方式存放在客户端的,安全性低,可以通过一个加密算法进 行加密后存放; session 存放于服务器的内存中,所以安全性好
③网络传输量
cookie 会传递消息给服务器;
session 本身存放于服务器,不会有传送流量
④生命周期(以 30 分钟为例)
cookie 的生命周期是累计的,从创建时,就开始计时,30 分钟后,cookie 生命 周期结束;
session 的生命周期是间隔的,从创建时,开始计时如在 30 分钟,没有访问 session,那么 session 生命周期被销毁。但是,如果在 30 分钟内(如在第 29 分 钟时)访问过 session,那么,将重新计算 session 的生命周期。关机会造成 session 生命周期的结束,但是对 cookie 没有影响。
⑤访问范围
cookie 为多个用户浏览器共享;
session 为一个用户浏览器独享
简单来说 cookie 机制采用的是在客户端保持状态的方案, 而 session 机制采用的是 在服务器端保持状态的方案。由于才服务器端保持状态的方案在客户端也需要保存 一个标识,所以 session 机制可能需要借助于 cookie 机制来达到保存标识的目的。
(9)Cookie 的过期和 Session 的超时有什么区别?
Cookie 的过期和 Session 的超时(过期),都是对某个对象设置一个时间,然后采 用轮训机制(或者首次访问时)检查当前对象是否超时(当前对象会保存一个开始 时间),如果超时则进行移除。 cookie 保存在浏览器中,不安全。而 session 是保 存在服务端的。cookie 的生命周期很长,而 session 很短,一般也就几十分钟。
cookie是保存在客户端,session 保存在服务器端,cookie保存着session 相关信息。 如果 cookie 没有超时,那么浏览器每次请求都会带上该 cookie 信息,服务器端根据 cookie 信息从 session 缓存中获取相对应的 session。这两个信息有一个超时,用户 连接即宣告关闭。
会话的超时由服务器来维护,它不同于 Cookie 的失效日期。 首先,会话一般基于 驻留内存的 cookie,不是持续性的 cookie,因而也就没有截至日期。 即使截取到 JSESSIONID cookie,并为它设定一个失效日期发送出去。浏览器会话和服务器会话也 会截然不同。
(10)如何解决分布式 Session 问题?
Nginx ip_hash 策略 ,服务端使用 Nginx 代理,每个请求按访问 IP 的 hash 分配,这样来自同一 IP 固定访问一个后台服务器,避免了在服务器 A 创建 Session,第二次分发到服务器 B 的现象。
Session 复制,任何一个服务器上的 Session 发生改变(增删改),该节点会把 这个 Session 的所有内容序列化,然后广播给所有其它节点。
共享 Session,服务端无状态话,将用户的 Session 等信息使用缓存中间件来统 一管理,保障分发到每一个服务器的响应结果都一致。
(11)过滤器和拦截器的区别?
原理实现上:过滤器基于回调实现,而拦截器基于动态代理。
控制粒度上:过滤器和拦截器都能够实现对请求的拦截功能,但是在拦截的粒 度上有较大的差异,拦截器对访问控制的粒度更细。
使用场景上:拦截器往往用于权限检查、日志记录等,过滤器主要用于过滤请 求中无效参数,安全校验。
依赖容器上:过滤器依赖于 Servlet 容器,局限于 web,而拦截器依赖于 Spring 框架,能够使用 Spring 框架的资源,不仅限于 web。
触发时机上:过滤器在 Servlet 前后执行,拦截器在 handler 前后执行,现在大 多数 web 应用基于 Spring,拦截器更细。