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

Servant-options 不处理 OPTIONS 请求

如何解决Servant-options 不处理 OPTIONS 请求

我正在使用 documentation 中所述的servant-options 包:

type RepositoryAPI = "repository" :> Get '[JSON] Repository 

getRepository :: Handler Repository
getRepository = do
  repository <- liftIO loadRawRepositoryFromFilesystem 
  return repository

server :: Server RepositoryAPI 
server = getRepository 

repositoryAPI :: Proxy RepositoryAPI 
repositoryAPI = Proxy

app :: Application
app = logStdoutDev
  $ cors (const $ Just policy)
  $ provideOptions repositoryAPI 
  $ serve repositoryAPI server
    where policy = simpleCorsResourcePolicy { 
          corsMethods = ["OPTIONS","GET","PUT","POST"],corsRequestHeaders = [ "Authorization","Content-Type" ] 
    }

main :: IO ()
main = run 8081 app

但是对 URL 的 OPTIONS 请求仍然返回错误 400:

OPTIONS /repository
  Accept: */*
  Status: 400 Bad Request 0.000039136s

我做错了什么?尝试了不同的策略配置(没有“授权”或没有 corsMethods 或小写的“内容类型”),但仍然没有运气。这可能是我需要在前端处理的事情吗?任何建议表示赞赏。

解决方法

问题出在前端。我必须使用 d3.json 方法进行以下调用:

json("http://localhost:8081/repository",{method: 'GET',headers: new Headers(
         [['Access-Control-Request-Headers',"content-type"]]
    )}
)

以前我在做以下事情:

json("http://localhost:8081/repository",headers: new Headers(
         [['Access-Control-Allow-Origin',"*"]]
    )}
)

现在一切正常。

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