HEADER CACHE-CONTROL,什么是GET请求

伏羲号

HEADER CACHE-CONTROL,什么是GET请求?

Get是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求。

HEADER CACHE-CONTROL,什么是GET请求

1. Get是获取信息,而不是修改信息,类似数据库查询功能一样,数据不会被修改。

2. Get传输的数据有大小限制,因为GET是通过URL提交数据,那么GET可提交的数据量就跟URL的长度有直接关系了,不同的浏览器对URL的长度的限制是不同的。

3. GET请求的数据会被浏览器缓存起来,用户名和密码将明文出现在URL上,其他人可以查到历史浏览记录,数据不太安全。Request.QueryString来获取Get方式提交来的数据。

4. Post请求则作为http消息的实际内容发送给web服务器,数据放置在HTML Header内提交,Post没有限制提交的数据。

5. Post比Get安全,当数据是中文或者不敏感的数据,则用get,因为使用get,参数会显示在地址,对于敏感数据和不是中文字符的数据,则用post。

6. POST表示可能修改变服务器上的资源的请求,在服务器端,用Post方式提交的数据Request.Form来获取。

什么是jwt及如何使用?

JSON Web Token(JWT)是为了在网络应用环境间传递声明而执行的一种基于 JSON 的开放标准(RFC 7519)。来自 JWT RFC 7519 标准化的摘要说明:JSON Web Token是一种紧凑的,URL

安全的方式,表示要在双方之间传输的声明。JWT一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该Token也可直接被用于认证,也可被加密。

三、jwt认证流程

1. 客户端调用登录接口(或者获取 token接口),传入用户名密码。

2. 服务端请求身份认证中心,确认用户名密码正确。

3. 服务端创建 JWT,返回给客户端。

4. 客户端拿到 JWT,进行存储(可以存储在缓存中,也可以存储在数据库中,如果是浏览器,可以存储在 Cookie 中)在后续请求中,在 HTTP 请求头中加上 JWT。

5. 服务端校验 JWT,校验通过后,返回相关资源和数据。

四、jwt组成

JWT 是由三段信息构成的,第一段为头部(Header),第二段为载荷(Payload),第三段为签名(Signature)。每一段内容都是一个 JSON 对象,将每一段 JSON 对象采用 BASE64编码,将编码后的内容用. 链接一起就构成了 JWT字符串,header.payload.signature。

示例如下:

token = encodeBase64(header)+'.'+encodeBase64(payload)+'.' + encodeBase64(signature)

token看起来像这样:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dnZWRJbkFzIjoiYWRtaW4iLCJpYXQiOjE0MjI3Nzk2Mzh9.gzSraSYS8EXBxLN_oWnFSRgCzcmJmMjLiuyu5CSpyHI

编码、解码

一般情况下,编码解码是为了方便以字节的方式表示数据,便于存储和网络传输。整个 jwt 串会被置于 http 的Header 或者 url中,为了不出现乱码解析错误等意外,编码是有必要的。在 jwt 中以 . 分割的三个部分都经过 base64编码(secret 部分是否进行 base64 编码是可选的,header 和 payload 则是必须进行 base64 编码)。

注意,编码的一个特点:编码和解码的整个过程是可逆的。得知编码方式后,整个 jwt 串便是明文了

payload 是一定不能够携带敏感数据如密码等信息的

1.头部(header)

头部用于描述关于该JWT的最基本的信息,例如其类型以及签

名所用的算法等,可以被表示成一个 JSON 对象。

{

type:"JWT",

"alg":"HS256"

}

在头部指明了签名算法是 HS256 算法。

2. 载荷(payload)

载荷就是存放有效信息的地方。有效信息包含三个部分:

1. 标准中注册的声明

2. 公共的声明

3. 私有的声明

标准中注册的声明(建议但不强制使用)

iss:JWT 签发者

sub:JWT 所面向的用户

aud:接收 JWT 的一方

exp:JWT 的过期时间,这个过期时间必须要大于签发时间

nbf:定义在什么时间之前,该 JWT 都是不可用的

iat:JWT 的签发时间

jti:JWT 的唯一身份标识,主要用来作为一次性 token, 从而回避重放攻击。

公共的声明

公共的声明可以添加任何的信息,一般添加用户的相关信息

或其他业务需要的必要信息.但不建议添加敏感信息,因为该

部分在客户端可解密。

私有的声明

私有声明是提供者和消费者所共同定义的声明,一般不建议

存放敏感信息,因为base64是对称解密的,意味着该部分信

息可以归类为明文信息。

3. 签名(signature)

创建签名需要使用 Base64 编码后的 header 和 payload以及一个秘钥。将 base64 加密后的 header 和 base64加密后的 payload 使用. 连接组成的字符串,通过 header中声明的加密方式进行加盐 secret 组合加密,然后就构成了jwt 的第三部分。

比如:HMACSHA256(base64UrlEncode(header) + "." +base64UrlEncode(payload), secret)

五、应用场景

一次性安全验证

1)激活邮件

用户注册后需要发一封邮件让其激活账户,通常邮件中

需要有一个链接,这个链接需要具备以下的特性:能够标识

用户,该链接具有时效性(通常只允许几小时之内激活),

不能被篡改以激活其他可能的账户…这种场景就和 jwt

的特性非常贴近,jwt 的 payload 中固定的参数:iss

签发者和 exp 过期时间正是为其做准备的。

2)验证码

restful api 的无状态认证

使用 jwt 来做 restfulapi的身份认证也是值得推崇的一种使用方案。客户端和服务端共享secret;过期时间由服务端校验,客户端定时刷新;签名信息不可被修改…springsecurity oauth jwt 提供了一套完整的jwt认证体系。

六、注意事项

jwt代替session做回话管理,需要考虑一下问题

1. jwt token泄露了怎么办?

传统的 session+cookie方案,如果泄露了sessionId,别人同样可以盗用你的身份。扬汤止沸不如釜底抽薪,不妨来追根溯源一下,什么场景会导致你的 jwt 泄露。

遵循如下的实践可以尽可能保护你的 jwt 不被泄露:

使用https 加密你的应用,返回 jwt 给客户端时设置httpOnly=true 并且使用 cookie 而不是 LocalStorage 存储 jwt,这样可以防止 XSS 攻击和 CSRF 攻击

2.secret如何设计

jwt 唯一存储在服务端的只有一个 secret,个人认为这个secret 应该设计成和用户相关的属性,而不是一个所有用户公用的统一值。这样可以有效的避免一些注销和修改密码时遇到的窘境。

3.注销和修改密码

jwt 是无状态的,服务端通过计算来校验有效性。没有存储起来,所以即使客户端删除了 jwt,但是该 jwt还是在有效期内,只不过处于一个游离状态.

分析下痛点:注销变得复杂的原因在于 jwt 的无状态。

我提供几个方案,视具体的业务来决定能不能接受。

仅仅清空客户端的 cookie,这样用户访问时就不会携带 jwt,服务端就认为用户需要重新登录。这是一个典型的假注销,对于用户表现出退出的行为,实际上这个时候携带对应的 jwt 依旧可以访问系统。

清空或修改服务端的用户对应的secret,这样在用户注销后,jwt 本身不变,但是由于secret不存在或改变,则无法完成校验。这也是为什么将 secret设计成和用户相关的原因。

借助第三方存储自己管理 jwt 的状态,可以以 jwt 为 key,实现去 redis 一类的缓存中间件中去校验存在性。方案设计并不难,但是引入 redis 之后,就把无状态的 jwt 硬生生变成了有状态了,违背了 jwt 的初衷。实际上这个方案和 session 都差不多了。

修改密码

假设号被到了,修改密码(是用户密码,不是 jwt的secret)之后,盗号者在原jwt有效期之内依旧可以继续访问系统,所以仅仅清空cookie自然是不够的,这时,需要强制性的修改 secret。

4.续签问题

续签问题可以说是抵制使用jwt来代替传统session的最大原因,因为 jwt的设计中我就没有发现它将续签认为是自身的一个特性。传统的cookie续签方案一般都是框架自带的,session 有效期30 分钟,30分钟内如果有访问,session有效期被刷新至 30 分钟。而 jwt 本身的 payload 之中也有一个exp过期时间参数,来代表一个jwt的时效性,而jwt想延期这个exp 就有点身不由己了,因为payload是参与签名的,一旦过期时间被修改,整个jwt串就变了,jwt的特性天然不支持续签!

七、jwt优缺点

jwt优点

跨语言,JSON 的格式保证了跨语言的支撑

基于 Token,无状态

占用字节小,便于传输

缺点

不可续签

token无法注销

不建议用jwt替代session做会话管理

学习web前端开发?

黑马程序员web前端中级程序员学习路线图,含配套视频,前端工具,源码等。

黑马程序员学习路线图及能掌握的能力(总,以下会分阶段,加上配套学习视频,小伙伴可继续往下看!)

第一阶段:HTML5+css

配套学习视频:

前端小白零基础入门HTML5+CSS3

第二阶段:移动web网页开发

配套学习视频:

2018移动web进阶教程

第三阶段:JavaScript网页编程

配套学习视频:

前端与移动开发基础入门到精通

javaScript零基础通关必备教程

第四阶段:Node.js与Ajax

配套学习视频:

Nodejs教程精讲

ajax从入门到精通

第五阶段:vue.js项目实战

配套学习视频:

4小时+5个拣选案例让你快速入门Vue.js

2018年Vue.js深入浅出教程

第六阶段:微信小程序

配套学习视频:

一天教你打造企业级微信小程序

微信小程序-个人语音接口功能

分分钟快速入门小程序开发

零基础玩转微信小程序

2小时轻松实现人脸识别的小程序

第七阶段:React.js项目实战

配套学习视频:

Reactjs入门教程

ReactJs精品教程

第八阶段:框架阶段与原理

第九阶段:移动APP开发

第十阶段:node.js进阶

第十一阶段:可视化游戏

第十二段阶段:架构与运维

还有前端免费工具下载

另外,关注加转发,然后私聊我发送:前端,就能获得上面这些资源咯。

前端工程师可选择发展方向?

html5的发展是伴随着web发展一起的。弥补了web应用的不足,还增添了很多新功能,使前端开发更简单,效果更丰富,能做的东西还不只局限于前端页面,web视频通话、web3d的数据可视化和游戏等等。

先来看看html5是什么?又增加了哪些改变?HTML5是万维网的核心语言、标准通用标记语言下的一个应用超文本标记语言(HTML)的第五次重大修改,目前在国内的发展也仅是处于起步阶段。从技术方面分析,HTML5是移动互联网前端的主流开发方式,可以跨平台使用。目前还没有一个前端的开发语言能取代HTML5的位置,不论是对不同系统的兼容性,还是用户体验方面,html5都做得非常好。现在电脑能实现的东西,很多手机也可以,所以html5的发展前景很好。

html5新增了很多功能,比如使用的语义化标签,header、article、section、nav等,是前端开发更模块化,结构清晰。audio和video增加了页面媒体效果,兼容更好,谷歌的chrome浏览器新版本计划全面取消对flash的支持,全面拥抱html5;localstorage和sessionstorage让浏览器可以存储数据;websocket时前后端长连接更简易执行,不在使用ajax循环请求,我目前做的项目就是使用的该方法;还有的就是离线缓存功能,打开设备软件仍然会有内容,不需要重新加载,体验更好。

如今微信这种大平台,月活跃人数达到10亿人,也开始了html5小游戏的推出,不需要太复杂的功能,只求更好的开发、更好的体验。自从跳一跳小游戏的推出,html5游戏就被认为是一个风口,白露引擎、unity团队都宣布支持微信开发。国内的这一块缺口还是很大的,所以未来游戏领域也会很不错。

当然这里所说的html5都是其本身自己的功能,还有很多和html5配合使用的东西。培训机构虽然说不好,但是你也可以从他们口中了解发展趋势。我也做前端开发一段时间了,页面基本都是html5的,但是更深层次的使用并没有挖掘,像canvas这种。好好提升自己的技术能力,虽然国内这几年不怎么炒h5,都是人工智能、区块链,大是谁也不能否认html5的未来发展。

我是测不准,欢迎关注,喜欢本文的朋友下方点赞呦^_^

Html5的未来优势有哪些?

网上有朋友总结了以下几大原因,以作参考吧

原因1:易用性

俩个原因使得使用HTML5创建网站更加简单:语义上及其ARIA。新的HTML标签像<header>, <footer>,<nav>,<section>, <aside>等等,使得阅读者更加容易去访问内容。在以前,即使你定义了class或者ID你的阅读者也没有办法去了解给出的一个div究竟是什么。使用新的语义学的定义标签,你可以更好的了解HTML文档,并且创建一个更好的使用体验。 ARIA是一个W3C的标准主要用来对HTML文章中的元素指定“角色“,通过角色属性来创建重要的页面地形例如,header,footer,navigation或者aritcle很有必要。这一点曾经被忽略掉了并且没有被广泛使用,因为事实上并不验证。然而,HTML5将会验证这样属性。同时,HTML5将会内建这些角色并且无法不覆盖。更多的HTML5和ARIA讨论,请大家查看这里。原因2:视频和音频支持 忘了flash和其它第三方应用吧,让你的视频和音频通过HTML5标签<video>和<audio>来访问资源。正确播放媒体一直都是一个非常可怕的事情,你需要使用<embed>和<object>标签,并且为了它们能正确播放必须赋予一大堆的参数。你的媒体标签将会非常复杂,大堆得令人迷惑的代码。而且HTML5视频和音频标签基本将他们视为图片:<video src=”"/>。但是其它参数例如宽度和高度或者自动播放呢?不必担心,只需要像其它HTML标签一样定义:<video src=”url” width=”640px” height=”380px” autoplay/>。 实际上这个过程非常简单,然而我们的老浏览器可能并不喜欢我们的HTML5,你需要添加更多代码来让他们正确工作。但是这个代码还是比<embed>和<object>来的简单的多。 原因3:Doctype 没错,就是doctype,没有更多内容了。是不是非常简答?不需要拷贝粘贴一堆无法理解的代码,也没有多余的head标签。最大的好消息在于,除了简单,它能在每一个浏览器中正常工作即使是名声狼藉的IE6。原因4:更清晰的代码 如果你对于简答,优雅,容易阅读的代码有所偏好的话,HTML5绝对是一个为你量身定做的东西。HTML5允许你写出简单清晰富于描述的代码。符合语义学的代码允许你分开样式和内容。看看这个典型的简单拥有导航的heaer代码:<div id="header"> <h1>Header Text</h1> <div id="nav"> <ul> <li><a href="#">Link</a></li> <li><a href="#">Link</a></li> <li><a href="#">Link</a></li> </ul> </div></div>是不是很简单?但是使用HTML5后会使得代码更加简单并且富有含义:<header> <h1>Header Text</h1> <nav> <ul> <li><a href="#">Link</a></li> <li><a href="#">Link</a></li> <li><a href="#">Link</a></li> </ul> </nav></header> 使用HTML5你可以通过使用语义学的HTML header标签描述内容来最后解决你的div及其class定义问题。 以前你需要大量的使用div来定义每一个页面内容区域,但是使用新的<section>,<article>,<header>,<footer>,<aside>和<nav>标签,需要你让你的代码更加清晰易于阅读。原因5:更聪明的存储 HTML5中最酷的特性就是本地存储。有一点像比较老的技术cookie和客户端数据库的融合。它比cooke更好用因为支持多个windows存储,它拥有更好的安全和性能,即使浏览器关闭后也可以保存。 因为它是个客户端的数据库,你不用担心用户删除任何cookie,并且所有主流浏览器都支持。 本地存储对于很多情况来说都不错, 它是HTML5工具中一个不需要第三方插件实现的。能够保存数据到用户的浏览器中意味你可以简单的创建一些应用特性例如:保存用户信息,缓存数据,加载用户上一次的应用状态。 原因6:更好的互动 我们都喜欢更好的互动,我们都喜欢对于用户有反馈的动态网站,用户可以享受互动的过程。输入<canvas>,HTML5的画图标签允许你做更多的互动和动画,就像我们使用Flash达到的效果。 除了<canvas>,HTML5同样也拥有很多API允许你创建更加好的用户体验并且更加动态的web应用程序。 这里有一个列表: Drag and Drop (DnD) Offline storage database Browser history management document editing Timed media playback原因7:游戏开发 没错, 你可以使用HTML5的<canvas>开发游戏。HTML5提供了一个非常伟大的,移动友好的方式去开发有趣互动的游戏。如果你开发Flash游戏,你就会喜欢上HTML5的游戏开发。 Script-tutorials目前提供了4个不部分的HTML5游戏开发教程,这里看看他们开发的有趣游戏: HTML5 Gaming Development Lesson One HTML5 Gaming Development Lesson Two HTML5 Gaming Development Lesson Three HTML5 Gaming Development Lesson Four 原因8: 遗留及其跨浏览器支持 你的现代流行浏览器都支持HTML5(Chrome,Firefox,Safari,IE9和Opera),并且创建了HTML5 doctype这样所有的浏览器,即使非常老非常令人厌恶浏览器像IE6都可以使用。但是因为老的浏览器能够识别doctype并不意味它可以处理HTML5标签和功能。幸运的是,HTML5已经使得开发更加简单了,更多支持更多浏览器,这样老的IE浏览器可以通过添加javascript代码来使用新的元素:<!--[if lt IE 9]> <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->原因9: 移动互联网的趋势

移动互联网的使用,是未来的趋势,HTML5可以很好适用于移动端的页面开发。

发表评论

快捷回复: 表情:
AddoilApplauseBadlaughBombCoffeeFabulousFacepalmFecesFrownHeyhaInsidiousKeepFightingNoProbPigHeadShockedSinistersmileSlapSocialSweatTolaughWatermelonWittyWowYeahYellowdog
评论列表 (暂无评论,82人围观)

还没有评论,来说两句吧...