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