是否有人成功使用AWS SDK生成S3存储桶中对象的签名URL,这些URL也可以在CloudFront上运行?我正在使用JavaScript AWS SDK,通过S3链接生成签名URL非常简单.我刚刚创建了一个私有存储桶并使用以下代码生成URL:
var AWS = require('aws-sdk')
, s3 = new AWS.S3()
, params = {Bucket: 'my-bucket', Key: 'path/to/key', Expiration: 20}
s3.getSignedUrl('getObject', params, function (err, url) {
console.log('Signed URL: ' + url)
})
Run Code Online (Sandbox Code Playgroud)
这很好但我也希望向用户公开CloudFront URL,以便他们可以获得使用CDN的更高下载速度.我设置了一个CloudFront发行版,它修改了存储桶策略以允许访问.但是,执行此操作后,任何文件都可以通过CloudFront URL访问,而亚马逊似乎忽略了我的链接中的签名.在阅读了更多内容后,我发现有人生成一个.pem文件来获取使用CloudFront的签名URL,但为什么S3不需要这样做?似乎getSignedUrl方法只使用AWS Secret Key和AWS Access Key进行签名.有没有人得到过这样的设置呢?
更新: 经过进一步研究后,CloudFront似乎处理的URL签名完全不同于S3 [link].但是,我仍然不清楚如何使用Javascript创建签名的CloudFront URL.
javascript amazon-s3 amazon-web-services node.js pre-signed-url
默认情况下,当命中相应的API路径时,sails将填充模型中的所有关系.有谁知道是否可以切换此功能?如果我正在使用一对多关联,我可能不希望在出于性能原因列出所有项目时填充关联.但是当查看单个项目时,完成人口会很好.
例如,假设一张票可以有很多评论.在获取案例列表时我不关心注释,但在查看特定案例时这很重要.我猜测它是如何运作但它失败了:
localhost:1337/tickets?populate=false
Run Code Online (Sandbox Code Playgroud)
我在balderdashy/sails#1695中实现了上述功能.唯一的变化是您有选择地选择要使用的填充关联:
localhost:1337/tickets?populate=[] // Don't populate anything
localhost:1337/tickets?populate=[comments] // Only populate comments
Run Code Online (Sandbox Code Playgroud)
这将覆盖populate您的蓝图配置中定义的任何内容.
有谁知道在帆中处理prod/dev/test配置切换的最佳方法?我真的很喜欢actionhero.js如何基于NODE_ENV的内容自动加载config/environment/{env} .js但是我没有看到在sails中做类似事情的内置方法.我注意到sails将在config//服务器引导期间加载任何文件,所以我现在的hacky解决方案是设置以下内容:
config/
|-- local.js
|-- environment/
|---- production.js
|---- staging.js
|---- development.js
|---- testing.js
Run Code Online (Sandbox Code Playgroud)
然后在每个{env} .js文件中,我只是像这样扩展配置:
if (process.env.NODE_ENV === 'production') {
// Enter any environment specific config changes
config.db = {
db_host: foo,
db_port: bar
}
config.otherThing = {
somevar: 'someval'
}
Run Code Online (Sandbox Code Playgroud) 有没有人在使用sails.js时有关于维护API的多个版本的想法?想象一个简单的例子:
// Request
GET /api/v1/catVids?min_view_count=10000
// Response
[{"video_title": "top cat fails"}, {"video_title": "funny-ass cats"}]
Run Code Online (Sandbox Code Playgroud)
用户正在积极地使用API的v1,但现在已经改变了将破坏现有功能的要求.例如,属性名称更改.所以现在我们需要使用不同的控制器来满足对这种新行为的请求.我想要做的是让两个API共存,这样就不会破坏向后兼容性.
// Request
GET /api/v2/catVids?minimum_view_count=10000
// Response
[{"title": "top cat fails"}, {"title": "funny-ass cats"}]
Run Code Online (Sandbox Code Playgroud)
但是,我不确定实现这个的最佳方法.我认为它可以工作的一种方法是在sails app中使用以下目录设置:
api/
|-- controllers/
|---- v1/
|------ CatController.js
|---- v2/
|------ CatController.js
|-- models/
|---- v1/
|------ Cat.js
|---- v2/
|------ Cat.js
Run Code Online (Sandbox Code Playgroud)
我只是想知道是否有其他人遇到类似的情况或对该主题有任何建议.
我有一个启用OAuth2的站点,它遇到了与IE如何处理303响应有关的问题.在流程中,发生3次重定向.
### Chrome/Firefox
POST idp.com/login (res 302 -> idp.com/authenticate)
GET idp.com/authenticate (res 302 -> app.com/oauth2/callback)
GET app.com/oauth2/callback (res 303 -> app.com/home)
GET app.com/home
### IE
POST idp.com/login (res 302 -> idp.com/authenticate)
POST idp.com/authenticate (res 302 -> app.com/oauth2/callback)
POST app.com/oauth2/callback (res 303 -> app.com/home)
POST app.com/home
Run Code Online (Sandbox Code Playgroud)
由于某种原因,IE似乎维护了原始的请求方法.我尝试通过返回303来至少从我的服务器(app.com)上的原始POST响应中断,但这也没有解决问题.这是意料之外的,因为RFC 2068声明对于303 - See Other响应,应遵循以下内容
可以在不同的URI下找到对请求的响应,并且应该使用该资源上的GET方法检索.此方法主要用于允许输出POST激活的脚本以将用户代理重定向到选定的资源.
我甚至尝试了307响应但没有成功.有没有人对这里发生的事情有任何想法?
是否可以通过 Apache Bench 测试使用自签名证书的 Web 服务?默认情况下,它将失败SSL read failed - closing connection。我无论如何都找不到让它忽略 SSL 失败的方法。
$ ab -n 1 -c 1 https://localhost:8080
Benchmarking localhost (be patient)...SSL read failed - closing connection
..done
Run Code Online (Sandbox Code Playgroud)
此外,如果这是不可能的,那么有人知道允许这样做的替代工具吗?
node.js ×3
sails.js ×3
javascript ×2
amazon-s3 ×1
apache ×1
apachebench ×1
associations ×1
benchmarking ×1
http-post ×1
redirect ×1
ssl ×1
waterline ×1