文章
· 十月 15, 2022 阅读大约需 2 分钟

第十七章 CSP 中的 HTTP 请求 - %CSP.Response 对象和 OnPreHTTP 方法

第十七章 CSP 中的 HTTP 请求 - %CSP.Response 对象和 OnPreHTTP 方法

%CSP.Response 对象和 OnPreHTTP 方法

可以使用对象中的 %CSP.Response 控制将哪些响应标头发送回 HTTP 客户端。 CSP 服务器自动创建此类的一个实例,并将对它的引用放在变量 %response 中。

由于 %response 对象控制 HTTP 标头,因此通常在类中的 %CSP.PageOnPreHTTP 方法中设置其属性。例如,要重定向传入的 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>


使用 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>

</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 属性的值。
讨论 (0)1
登录或注册以继续