在JavaScript函数顶部声明变量时,最佳做法是将它们设置为null,还是保留为"undefined"?另一种询问方式,下面是什么情况要求每个选项?
选项A:
var a = null,
b = null;
Run Code Online (Sandbox Code Playgroud)
选项B:
var a,
b;
Run Code Online (Sandbox Code Playgroud) 我是基于令牌的授权的新手.我试图找到自定义到期/令牌刷新方案中的缺陷.
我在Express API中有一个基本的JWT auth设置; 我将JWT到期时间定为1小时; 但是,JWT会检查令牌到期时相对于令牌发出的时间.我希望在每次成功的api调用之后重置到期时间.如果我的用户正在使用该应用程序超过一个小时,我不希望他们必须重新登录才能刷新令牌(并且可能会丢失他们正在处理的任何数据.)
另一方面,如果令牌超过一小时没有响应,我确实希望令牌过期.
我想出了以下方法:
在每个成功的API请求期间,发出新的JWT并将其发送到自定义响应标头中.我的客户端代码负责检查此JWT响应头并将其值用作新的默认授权请求头.因此,如果用户没有超过1小时的API请求,则令牌将过期而不会刷新.然后需要登录.此外,将存储令牌的原始发布日期(登录验证的时间戳),以便在24小时后强制执行令牌的"硬到期".
这似乎相当简单且相当安全,但我在JWT研究中没有看到任何参考.有没有更好的方法来实现同一目标?我是否错过了这种方法的主要安全漏洞?
更新: 在考虑了一段时间之后,我意识到这个问题是它打开了重播攻击的大门,这些攻击无法被令牌过期所阻止.因此,绝对应该进行"硬到期"检查:无论最近的用户活动如何,硬到期都会在发布日期后的某个时间使令牌无效.
简而言之,我无法通过利用Postgresql,Node.js和node-postgres的数据API每分钟支持超过5000个读取请求.瓶颈似乎介于API和DB之间.以下是详细信息.
我正在使用AWS Postgresql RDS数据库实例(m4.4xlarge - 64 GB内存,16个vCPU,350 GB SSD,没有预配置IOPS)用于Node.js支持的数据API.默认情况下,RDS的max_connections = 5000.节点API在两个集群之间进行负载平衡,每个集群有4个进程(2个Ec2,其中4个vCPU运行API,集群模式下为PM2).我使用node-postgres将API绑定到Postgresql RDS,并尝试使用它的连接池功能.下面是我的连接池代码示例:
var pool = new Pool({
user: settings.database.username,
password: settings.database.password,
host: settings.database.readServer,
database: settings.database.database,
max: 25,
idleTimeoutMillis: 1000
});
/* Example of pool usage */
pool.query('SELECT my_column FROM my_table', function(err, result){
/* Callback code here */
});
Run Code Online (Sandbox Code Playgroud)
使用此实现并使用负载测试器进行测试,我可以在一分钟内支持大约5000个请求,平均响应时间约为190毫秒(这是我所期望的).每当我每分钟发出超过5000个请求时,我的响应时间会在最好的情况下增加到超过1200毫秒,在最糟糕的情况下,API开始经常超时.监控表明对于运行Node.js API的EC2,CPU利用率仍低于10%.因此,我的重点是数据库和API与数据库的绑定.
我试图增加(并减少)node-postgres"max"连接设置,但API响应/超时行为没有变化.我也尝试过在RDS上配置IOPS,但没有改进.另外,有趣的是,我将RDS扩展到m4.10xlarge(160 GB内存,40个vCPU),虽然RDS CPU利用率大幅下降,但API的整体性能却大幅下降(甚至无法支持每分钟5000个请求)我能用较小的RDS).
我在许多方面处于不熟悉的领域,并且不确定如何在每分钟超过5000个请求时最好地确定哪些移动部件是瓶颈API性能.如上所述,我已根据对Postgresql配置文档和node-postgres文档的审核尝试了各种调整,但无济于事.
如果有人有关于如何诊断或优化的建议我会非常感激.
在扩展到m4.10xlarge之后,我执行了一系列的负载测试,改变了每个池中请求/分钟数和最大连接数.以下是监控指标的一些屏幕截图:
我有一个ASP MVC3应用程序,它有几个HttpPost ActionResult方法.在调试会话期间,方法可以正常工作.但是当我在浏览器中发布和查看Web应用程序时,只有HttpPost方法失败.Firebug显示"未找到404".同一控制器中的其他非HttpPost方法工作正常.
更新:
1)该应用程序的已发布网址是localhost/psp.2)所有GET操作都返回http:// localhost/psp / 'controller'/'action'的URL .
3)POST操作返回http:// localhost / 'controller'/'action'的URL .
所以这似乎是一个路由问题.我在Global.asax.cs文件中唯一的路由是:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
请注意,Home控制器不包含任何HttpPost操作.失败的所有POST方法都在单独的控制器中.我试图调整此路由:psp/{controller}/{action}/{id}但后来收到403.14错误(仅供参考,我使用的是IIS 7.5).
我很困惑为什么这些HttpPost方法在调试期间工作但不在已发布的应用程序中工作.以下是发布后出现404错误的方法之一:
[HttpPost]
public ActionResult GetAreaSelTexResult(JSON_MapSelPars pars)
{
AreaSelTextResult myResult = new AreaSelTextResult();
using (var ctx = new prismEntities())
{
var q = from p in ctx.pPSPMapSummary_Sel(pars.areaType, pars.areaName, null, null,pars.goalCDL) select p;
// There should only be …Run Code Online (Sandbox Code Playgroud) api ×1
aws-rds ×1
express-jwt ×1
http-post ×1
javascript ×1
jwt ×1
node.js ×1
postgresql ×1
security ×1