第十七章 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
属性的值。