小编rgw*_*zdz的帖子

设置JavaScript变量= null,还是保留undefined?

在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)

javascript

45
推荐指数
5
解决办法
12万
查看次数

JsonWebToken:基于活动的到期与发布基于时间的到期

我是基于令牌的授权的新手.我试图找到自定义到期/令牌刷新方案中的缺陷.

我在Express API中有一个基本的JWT auth设置; 我将JWT到期时间定为1小时; 但是,JWT会检查令牌到期时相对于令牌发出的时间.我希望在每次成功的api调用之后重置到期时间.如果我的用户正在使用该应用程序超过一个小时,我不希望他们必须重新登录才能刷新令牌(并且可能会丢失他们正在处理的任何数据.)

另一方面,如果令牌超过一小时没有响应,我确实希望令牌过期.

我想出了以下方法:

在每个成功的API请求期间,发出新的JWT并将其发送到自定义响应标头中.我的客户端代码负责检查此JWT响应头并将其值用作新的默认授权请求头.因此,如果用户没有超过1小时的API请求,则令牌将过期而不会刷新.然后需要登录.此外,将存储令牌的原始发布日期(登录验证的时间戳),以便在24小时后强制执行令牌的"硬到期".

这似乎相当简单且相当安全,但我在JWT研究中没有看到任何参考.有没有更好的方法来实现同一目标?我是否错过了这种方法的主要安全漏洞?

更新: 在考虑了一段时间之后,我意识到这个问题是它打开了重播攻击的大门,这些攻击无法被令牌过期所阻止.因此,绝对应该进行"硬到期"检查:无论最近的用户活动如何,硬到期都会在发布日期后的某个时间使令牌无效.

security authorization jwt express-jwt json-web-token

6
推荐指数
1
解决办法
2407
查看次数

如何优化Postgresql max_connections和node-postgres连接池?

简而言之,我无法通过利用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文档的审核尝试了各种调整,但无济于事.

如果有人有关于如何诊断或优化的建议我会非常感激.

UPDATE

在扩展到m4.10xlarge之后,我执行了一系列的负载测试,改变了每个池中请求/分钟数和最大连接数.以下是监控指标的一些屏幕截图:

监控指标

数据库连接

api postgresql node.js node-postgres aws-rds

6
推荐指数
1
解决办法
3830
查看次数

ASP MVC3 - 发布后未找到HttpPost操作

我有一个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)

http-post asp.net-mvc-3

1
推荐指数
1
解决办法
4354
查看次数