第十七章 CSP 中的 HTTP 请求 - %CSP.Respo
2022-10-16 本文已影响0人
Cache技术分享
第十七章 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>
<body></body>
使用 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
属性的值。