微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ajax – 在Yesod中允许跨原始请求

我的应用程序使用一个书签,我需要允许CORS for MyRouteR,所以我的书签代码可以使用这个路由的 AJAX请求.

在我的第一个配置文件中,我给了MyRouteR只支持一个请求方法PUT.但事实证明(duh),我也需要支持OPTIONS方法,哪些浏览器用于CORS预检要求.

我在config / routes中结束了以下内容

/myroute MyRouteR PUT OPTIONS

我希望在模板Haskell中会有一些相关的机制来处理配置/路由,以便将此OPTIONS添加到此路由的方法列表中会自动导致CORS支持,但没有骰子.不是世界的尽头,而是会有这样的感觉和感觉.

为了使CORS工作,我给了路由一个OPTIONS处理程序:

optionsMyRouteR :: Handler RepPlain
optionsMyRouteR = do
    addHeader "Access-Control-Allow-Origin" "*"
    addHeader "Access-Control-Allow-Methods" "PUT,OPTIONS"
    return $RepPlain $toContent ("" :: Text)

putMyRouteR :: Handler RepJson
putMyRouteR = do
    addHeader "Access-Control-Allow-Origin" "*"
    -- more stuff ...

这样做很有用,但是由于它是如此的样板,它感觉到稍微没有了.所以,两个问题:

>我们比Yesodic有更好的形容词吗?
>还有另一个更好的方式让路由支持跨源请求吗?

更新:
还有人发表了一些通用的中间件: http://hackage.haskell.org/package/wai-cors.

我目前正在处理同样的事情,还没有实现一个解决方案,但是我想象可以通过WAI Middleware来完成,类似于wiki页面Allowing WOFF fonts to be accessed from other domains (CORS)上的示例代码.这应该允许您编写CORS代码一次而不需要重复你自己

来自上述链接的示例代码为WOFF字体添加跨原点访问:

addCORStoWOFF :: W.Middleware
addCORStoWOFF app = fmap updateHeaders . app
  where
    updateHeaders (W.ResponseFile    status headers fp mpart) = W.ResponseFile    status (new headers) fp mpart
    updateHeaders (W.ResponseBuilder status headers builder)  = W.ResponseBuilder status (new headers) builder
    updateHeaders (W.ResponseSource  status headers src)      = W.ResponseSource  status (new headers) src
    new headers | woff      = cors : headers
                | otherwise =        headers
      where woff = lookup HT.hContentType headers == Just "application/font-woff"
            cors = ("Access-Control-Allow-Origin","*")

原文地址:https://www.jb51.cc/ajax/160077.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐