第十七章 CSP 中的 HTTP 请求 - %CSP.Response 对象和 OnPreHTTP 方法
第十七章 CSP 中的 HTTP 请求 - %CSP.Response 对象和 OnPreHTTP 方法
%CSP.Response 对象和 OnPreHTTP 方法
可以使用对象中的 %CSP.Response 控制将哪些响应标头发送回 HTTP 客户端。 CSP 服务器自动创建此类的一个实例,并将对它的引用放在变量 %response 中。
由于 %response 对象控制 HTTP 标头,因此通常在类中的 %CSP.Page 的 OnPreHTTP 方法中设置其属性。例如,要重定向传入的 HTTP 请求,请定义以下 OnPreHTTP 方法:
Class MyApp.Page Extends %CSP.Page
{
// ...
ClassMethod OnPreHTTP() As %Boolean
{
Set %response.ServerSideRedirect = "C:\CacheSys\csp\samples\redirect.csp"
Quit 1
}
}
如果使用 CSP 类创建 CSP 页面,请使用以下代码设置标题值:
Class MyPage Extends %CSP.Page
{
ClassMethod OnPreHTTP() As %Boolean
{
Do %response.SetCookie("name","value")
Quit 1
}
如果使用 HTML 创建 CSP 页面,请使用以下代码设置标题值:
<head></head>
<script language="Cache" method="OnPreHTTP" arguments="" returntype="%Boolean">
Do %response.SetCookie("name","value")
Quit 1
</script>
使用 SetCookie 方法提供 Cookie
可以使用 %response 对象的 SetCookie 方法将 cookie 发送到 HTTP 客户端。请参阅“在 Cookie 中存储数据”部分。
访问 Cookie
一旦 cookie 被保存。可以使用以下代码访问其值:
ClassMethod OnPage() As %Status
{
Write "<body>"
Write "<p>COOKIES:</p>"
Write "<ul>"
Set cookie=%request.NextCookie("")
While cookie'="" {
For count=1:1:%request.CountCookie(cookie) {
Write "<li>",cookie," - ",..EscapeHTML(%request.GetCookie(cookie,count)),"</li>",!
}
Set cookie=%request.NextCookie(cookie)
}
Write "</ul>"
Write !,"</body>"
Quit $$$OK
}
[在 CSP 页面上]
<body>
<p>COOKIES:</p>
<ul>
<script language="Cache" runat="server">
Set cookie=%request.NextCookie("")
While cookie'="" {
For count=1:1:%request.CountCookie(cookie) {
Write "<li>",cookie," - ",..EscapeHTML(%request.GetCookie(cookie,count)),"</li>",!
}
Set cookie=%request.NextCookie(cookie)
}
</script>
</ul>
</body>
cookie 定义可以包含到期日期和以下格式的路径:
Do %response.SetCookie("NAME","VALUE",expireData,path)
空白 expireData 字段定义内存中的 cookie。但是,如果为 expireData 字段指定一个值,这将成为一个永久 cookie,并在指定的时间被删除。 expireData 字段的格式为 Wdy,DD-Mon-YYYY HH:MM:SS GMT,例如:Wednesday, 24-Mar-2004 18:12:00 GMT。
提供不同的内容类型
通常,CSP 页面提供text/html 内容。可以通过多种方式指定不同的内容类型:
- 通过在页面类中的类参数
CONTENTTYPE中设置%CSP.Page的值。 - 通过在页面的
OnPreHTTP方法中设置%response对象的ContentType属性的值。