在我的GAE应用程序中,我在app.yaml中有以下处理程序:
- url: /lang/strings.js
script: js_lang.py
Run Code Online (Sandbox Code Playgroud)
因此,调用/lang/strings.js将实际映射到js_lang.py请求处理程序,该处理程序将响应填充为application/javascript.我希望将此响应缓存在浏览器中,以便只在一段时间内调用请求处理程序(例如,/lang/strings.js?v=xxxx当我部署新版本的应用程序时,通过导入"使缓存无效" .
对于普通的静态内容,有一个default_expiration非常方便的元素.并导致http响应标头如下:
Expires: Fri, 01 Apr 2011 09:54:56 GMT
Cache-Control: public, max-age=600
Run Code Online (Sandbox Code Playgroud)
好的,问题是:我是否有一种简单的方法可以返回这样的标题,而无需明确设置它们?或者,是否有一个代码片段接受一些基本参数,如"天",并产生预期的http标头?
编辑2011年4月12日
我只需设置两个标题就可以解决这个问题Expires,Cache-Control如下所示:
import datetime
thirty_days_in_seconds = 4320000
expires_date = datetime.datetime.now() + datetime.timedelta(days=30)
HTTP_HEADER_FORMAT = "%a, %d %b %Y %H:%M:00 GMT"
self.response.headers["Expires"] = expires_date.strftime(HTTP_HEADER_FORMAT)
self.response.headers["Cache-Control"] = "public, max-age=%s" % thirty_days_in_seconds
Run Code Online (Sandbox Code Playgroud) 在OAuth 1.0规范中,建议使用以下WWW-Authenticate标头进行响应:
WWW-Authenticate: OAuth realm="http://server.example.com/"
Run Code Online (Sandbox Code Playgroud)
是否适合在此标题中添加任何其他信息性数据?如果对受保护资源的请求失败,是否可以包含一些有关原因的信息?如:
WWW-Authenticate: OAuth realm="http://server.example.com/", access token invalid
Run Code Online (Sandbox Code Playgroud)
或者这与响应标题的目的相反?
编辑2011年3月22日:由于Youtube现在提供HTTPS访问,因此该问题不再具有相关性:http://apiblog.youtube.com/2011/02/https-support-for-youtube-embeds.html
我们的应用程序通过HTTPS运行,很少给我们带来任何问题.然而,当谈到youtube时,他们没有通过SSL连接呈现任何内容这一事实让我们在尝试嵌入剪辑时感到头痛.主要是因为Internet Explorers着名的小警告信息:
"您是否只想查看安全传送的网页内容?此页面包含无法使用安全HTTPS等提供的内容"
我试图通过几种方式解决这个问题.最有希望的是使用Apache中的ProxyPass功能映射到YouTube.
像这样:
ProxyPass: /youtube/ http://www.youtube.com
ProxyPassReverse: /youtube/ http://www.youtube.com
Run Code Online (Sandbox Code Playgroud)
这摆脱了恼人的警告.但是,youtube SWF无法启动流式传输我设法加载到浏览器中的SWF只是声明:"发生错误,请稍后再试".
可能的解决方案可能是
3月10日更新:我尝试使用Googles Youtube API for ActionScript加载播放器.它起初看起来很有希望,我能够通过我的https://代理加载播放器.但是,加载的SWF包含对不同非ssl URL的显式调用的大量内容,以便为FLV流创建身份验证链接以及加载不同的跨域策略.
看起来我们似乎不应该直接访问flv-streams.这使得很难绕过Internet Explorer警告,而不是从youtube中删除FLV:s并将其提供给您自己的域.
有解决方案可以下载你的FLV:s.但这不符合Youtube的使用条款,对我们来说真的不是一个选择.
有没有办法列出由特定用户创建的头?
使用该hg heads命令我无法过滤用户.
虽然hg log我可以过滤用户,但我无法弄清楚如何仅列出分支上的最后一个变更集.
更新:
感谢Tim Henigan的回答如下.我得出以下结论.
log -r "head() and not closed() and user('<username>')"
Run Code Online (Sandbox Code Playgroud)
在我的特殊情况下,我只想按相反的顺序排列最新的磁头,所以我为这个功能设了一个别名.
[alias]
myhist = log -r "reverse(head() and not closed() and user('<username>'))" --template "{rev}: {branches}\n" -l 10
Run Code Online (Sandbox Code Playgroud)
因此,调用hg myhist给了我最多十个最近的变更集,这些变更集都是其分支上的最后一个变更集.我使用该--template选项只能查看修订号和分支名称,以便快速了解我最近的活动.
我有一个 RESTful API 可以同时返回JSON和XML.
说,例如,一个请求被用于诸如一个文档作为这样的伪影的所有评论制成:GET /document/DOCUMENT_ID/comments.json。响应如下所示:
[
{
"created_time": 1304598075,
"text": "<script type=\"text/javascript\">alert(document.cookie)</script>",
"user_id": 2293,
"id": 184124
},
{
"created_time": 1304598043,
"text": "It's over ninethousaaaaaanddd!!!",
"user_id": 2293,
"id": 184122
}
]
Run Code Online (Sandbox Code Playgroud)
在我自己的服务中,第一个评论将在呈现之前进行 XSS 转义。但是当通过 API 访问时,我必须信任 API 的实现者来进行转义。
如果 API 是在通过浏览器呈现的 Web 服务中实现的,则攻击向量是非常真实的。
另一方面,如果 API 是在桌面应用程序或移动应用程序中实现的 - XSS 转义将是一个完全麻烦且不需要的。
我应该转义我通过 API 返回的所有字符串吗?或者我应该实现一个设置,以便在注册第三方应用程序时 API 实现者可以指定他是否想要转义响应?
了解其他人如何处理这个问题会很有趣。
我正在做一个Twitter Mac OS X应用程序,需要使用OAuth1.0.在请求oauth/access_token接口时,是否可以将oauth_callback参数用于此目的?
换句话说,如何在Max OS X上从浏览器打开应用程序?