1.3.2.HTTP与HTTPS之间的区别
| HTTP | HTTPS |
|---|---|
| 默认端口80 | HTTPS默认使用端口443 |
| 明文传输、数据未加密、安全性差 | 传输过程ssl加密、安全性较好 |
| 响应速度快、消耗资源少 | 响应速度较慢、消耗资源多、需要用到CA证书 |
1.3.3.HTTPS链接建立的过程
1.首先客户端先给服务器发送一个请求
2.服务器发送一个SSL证书给客户端,内容包括:证书的发布机构、有效期、所有者、签名以及公钥
3.客户端对发来的公钥进行真伪校验,校验为真则使用公钥对对称加密算法以及对称密钥进行加密
4.服务器端使用私钥进行解密并使用对称密钥加密确认信息发送给客户端
5.随后客户端和服务端就使用对称密钥进行信息传输
1.3.4.对称加密算法
双方持有相同的密钥,且加密速度快,典型对称加密算法:DES、AES;这种方式存在的最大问题 就是密钥发送问题,即如何安全地将密钥发给对方;
1.3.5.非对称加密算法
密钥成对出现(私钥、公钥),私钥只有自己知道,不在网络中传输;而公钥可以公开。相比对称加密速度较慢,典型的非对称加密算法有:RSA、DSA; 公钥可以随意发布,但私钥只有自己知道。发送密文的一方使用对方的公钥进行加密处理,对方接收到 加密信息后,使用自己的私钥进行解密。 由于非对称加密的方式不需要发送用来解密的私钥,所以可以保证安全性;但是 和对称加密比起来,非常的慢
1.3.6.HTTP协议
HTTP请求:
| 方法 | 描述 |
|---|---|
| GET | 向特定资源发送请求,查询数据,并返回实体 |
| POST | 向指定资源提交数据进行处理请求,可能会导致新的资源建立、已有资源修改 |
| PUT | 向服务器上传新的内容 |
| HEAD | 类似GET请求,返回的响应中没有具体的内容,用于获取报头 |
| DELETE | 请求服务器删除指定标识的资源 |
| OPTIONS | 可以用来向服务器发送请求来测试服务器的功能性 |
| TRACE | 回显服务器收到的请求,用于测试或诊断 |
| CONNECT | HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器 |
1.3.7.Get和Post请求区别
| GET | POST | |
|---|---|---|
| 可见性 | 数据在URL中对所有人可见 | 数据不会显示在URL中 |
| 安全性 | 与post相比,get的安全性较差,因为所 发送的数据是URL的一部分 |
安全,因为参数不会被保存在浏览器 历史或web服务器日志中 |
| 数据长度 | 受限制,最长2kb | 无限制 |
| 编码类型 | application/x-www-form-urlencoded | multipart/form-data |
| 缓存 | 能被缓存 | 不能被缓存 |
1.3.8.HTTP常见响应状态码
- 100:Continue — 继续。客户端应继续其请求。
- 200:OK — 请求成功。一般用于GET与POST请求。
- 301:Moved Permanently — 永久重定向。
- 302:Found — 暂时重定向。
- 400:Bad Request — 客户端请求的语法错误,服务器无法理解。
- 403:Forbideen — 服务器理解请求客户端的请求,但是拒绝执行此请求。
- 404:Not Found — 服务器无法根据客户端的请求找到资源(网页)。
- 500:Internal Server Error — 服务器内部错误,无法完成请求。
- 502:Bad Gateway — 作为网关或者代理服务器尝试执行请求时,从远程服务器接收到了无效的响应。
1.3.9.重定向和转发区别
1.3.9.1.重定向:redirect
地址栏发生变化
重定向可以访问其他站点(服务器)的资源
重定向是两次请求。不能使用request对象来共享数据1.3.9.2.转发:forward
转发地址栏路径不变
转发只能访问当前服务器下的资源
转发是一次请求,可以使用request对象共享数据1.3.10.Cookie、Session和Token区别
HTTP协议本身是无状态的。什么是无状态呢,即服务器无法判断用户身份。
1.3.10.1.什么是cookie
cookie是由Web服务器保存在用户浏览器上的小文件(key-value格式),包含 用户相关的信息。客户端向服务器发起请求,如果服务器需要记录该用户状态, 就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保 存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户身份。
1.3.10.2.什么是session
session是依赖Cookie实现的。session是服务器端对象
session 是浏览器和服务器会话过程中,服务器分配的一块储存空间。服务器默认为浏览器在cookie中设置 sessionid,浏览器在向服务器请求过程中传输 cookie 包含 sessionid ,服务器根据 sessionid 获取出会话中存储的信息,然后确定会话的身份信息。
1.3.10.3.session与cookie的区别
Cookie ⼀般⽤来保存⽤户信息,Session 的主要作⽤就是通过服务端记录⽤户的状态
| 区别 | session | cookie |
|---|---|---|
| 存储位置与安全性 | session数据放在服务器上,安全性相对更高 | cookie数据存放在客户端上,安全性较差,别人可以分析存在本地的cookie并进行欺骗 |
| 存储空间 | session无此限制 | 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie |
| 占用服务器资源 | session一定时间内保存在服务器上,当访问增多,占用服务器性能 | 考虑到服务器性能方面,应当使用cookie |
如果考虑安全性:那么选择session;如果追求性能,那么选择cookie。
1.3.10.4.什么是Token
Token引入:Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应运而生。
Token的定义:Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。 使
用Token的目的:Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。
Token 是在服务端产生的。如果前端使用用户名/密码向服务端请求认证,服务端认证成功,那么在服务端会返回 Token 给前端。前端可以在每次请求的时候 带上 Token 证明自己的合法地位。
1.3.10.5.session与token区别
- session机制存在服务器压力增大,CSRF跨站伪造请求攻击,扩展性不强等问题;
- session存储在服务器端,token存储在客户端 token提供认证和授权功能,作为身份认证,token安全性比session好;
- session这种会话存储方式方式只适用于客户端代码和服务端代码运行在同一台服务器上,token适用于项目级的前后端分离(前后端代码运行在不同的服务器下)
1.3.11.浏览器输入URL过程
过程:DNS解析、TCP连接、发送HTTP请求、服务器处理请求并返回HTTP报文、浏览器渲染、结束
| 过程 | 使用的协议 |
|---|---|
| 1、浏览器查找域名DNS的IP地址 DNS查找过程(浏览器缓存、路由器缓存、DNS缓存) |
DNS:获取域名对应的ip |
| 2、根据ip建立TCP连接 | TCP:与服务器建立连接 |
| 3、浏览器向服务器发送HTTP请求 | HTTP:发送请求 |
| 4、服务器响应HTTP响应 | HTTP |
| 5、浏览器进行渲染 |
1.3.12.如果客户端禁止 cookie 能实现 session 还能用吗?
不能用,虽然Cookie和Session是两个不同的东西(Session一般在服务器端保存,Cookie在客户端保存)。但是Session是用Session ID来确定当前回话对应的服务器Session,而Session ID是通过Cookie传递的,禁用Cookie相当于失去了Session ID,也就得不到Session了。
假定用户关闭Cookie的情况下使用Session,其实现途径有以下几种:
- 手动通过URL传值、隐藏表单传递Session ID。
- 用文件、数据库等形式保存Session ID,在跨页过程中手动调用。
1.3.13.servlet是线程安全的吗
Servlet不是线程安全的,多线程并发的读写会导致数据不同步的问题。
解决的办法是尽量不要定义name属性,而是要把name变量分别定义在doGet() 和doPost()方法内。虽然使用synchronized(name){}语句块可以解决问题,但是会造成线程的等待,不是很科学的办法。
注意:多线程的并发的读写Servlet类属性会导致数据不同步。但是如果只是并发地读取属性而不写入,则不存在数据不同步的问题。因此Servlet里的只读属性最好定义为final类型的。
<br /> <br /> <br /> <br /><br /> <br /> <br />
