Haskell-Scotty:设置自定义headers (x-frame-options)
Haskell-Scotty: Set custom headers (x-frame-options)
Haskell这里是新手!
在我的 haskell 副项目中,我使用 scotty 来提供一些动态生成的 html 页面。问题是无法在 iframe 中打开页面,因为 "x-frame-options" header 设置为 "SAMEORIGIN"。
如何将 header 更改为其他内容?我想为所有回复设置 header。有没有可以做到这一点的中间件?
谢谢!
您可以定义自己的中间件,将此 header 添加到每个响应(Network.Wai
中提供了所有必要的工具):
{-# LANGUAGE OverloadedStrings #-}
import Network.Wai -- from the wai package
import Web.Scotty hiding (options)
addFrameHeader :: Middleware
addFrameHeader =
modifyResponse (mapResponseHeaders (("X-Frame-Options", "whatever") :))
然后在你的 scotty 应用程序中使用它:
main = scotty 6000 $ do
middleware addFrameHeader
get "/" (text "hello")
并且使用 curl
我们可以看到它包含在响应中:
> curl --include localhost:6000
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Date: Thu, 19 Jan 2017 19:22:57 GMT
Server: Warp/3.2.8
X-Frame-Options: whatever
Content-Type: text/plain; charset=utf-8
hello
Haskell这里是新手!
在我的 haskell 副项目中,我使用 scotty 来提供一些动态生成的 html 页面。问题是无法在 iframe 中打开页面,因为 "x-frame-options" header 设置为 "SAMEORIGIN"。
如何将 header 更改为其他内容?我想为所有回复设置 header。有没有可以做到这一点的中间件?
谢谢!
您可以定义自己的中间件,将此 header 添加到每个响应(Network.Wai
中提供了所有必要的工具):
{-# LANGUAGE OverloadedStrings #-}
import Network.Wai -- from the wai package
import Web.Scotty hiding (options)
addFrameHeader :: Middleware
addFrameHeader =
modifyResponse (mapResponseHeaders (("X-Frame-Options", "whatever") :))
然后在你的 scotty 应用程序中使用它:
main = scotty 6000 $ do
middleware addFrameHeader
get "/" (text "hello")
并且使用 curl
我们可以看到它包含在响应中:
> curl --include localhost:6000
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Date: Thu, 19 Jan 2017 19:22:57 GMT
Server: Warp/3.2.8
X-Frame-Options: whatever
Content-Type: text/plain; charset=utf-8
hello