Suave API に CORS リクエストを受け入れさせようとしています。私はここでこのスニペットに従いました:
http://www.fssnip.net/mL/title/CORS-response-with-Suave
ここで再作成します:
let setCORSHeaders =
setHeader "Access-Control-Allow-Origin" "*"
>=> setHeader "Access-Control-Allow-Headers" "content-type"
let allow_cors : WebPart =
choose [
OPTIONS >=>
fun context ->
context |> (
setCORSHeaders
>=> OK "CORS approved" )
]
let webSite =
choose [
allow_cors
GET >=> OK "URLs are for wimps. GETting something? This is what you get."
]
しかし、トークンを渡す必要があるエンドポイントがあり、CORS で許可されたヘッダーが見つからないため、これらのエンドポイントでエラーが発生しています。私のトークン ヘッダーは単に「トークン」であるため、2 つのことを試しましたが、どちらも問題を解決していません。
試み #1
setHeader "Access-Control-Allow-Origin" "*"
>=> setHeader "Access-Control-Allow-Headers" "content-type"
>=> setHeader "Access-Control-Allow-Headers" "token"
content-type
これは、受け入れられなくなったことを示すエラーを返しました-これは、最後setHeader
のソースコードが最初のものを上書きしたことを意味しているようです: https://github.com/SuaveIO/suave/blob/master/src/Suave .Tests/HttpWriters.fsの 113 行目に、これが望ましい動作であることを示唆するテストがあります。
試み #2
この質問に対する回答に基づいて: How to set a Json response in suave webpart、カンマ区切りのリストを介して両方のヘッダーを設定しようとしました:
setHeader "Access-Control-Allow-Origin" "*"
>=> setHeader "Access-Control-Allow-Headers" "Content-Type,token"
しかし、これにより、CORS が完全に失敗したことを示すエラーが発生しました。
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:4200' is therefore not allowed access. The response had HTTP status code 401.
また、この同じ質問に基づいて、次のことを試しました。
setHeader "Access-Control-Allow-Origin" "*"
>=> setHeader "Access-Control-Allow-Headers:content-type" "Accept"
>=> setHeader "Access-Control-Allow-Headers:token" "Accept"
これはこの応答を与えました:Request header field token is not allowed by Access-Control-Allow-Headers in preflight response.
では、Suave の CORS リクエストで任意の量のヘッダーを許可するにはどうすればよいでしょうか?
編集
試み #3
addHeader
代わりに使用しましたsetHeader
:
let setCORSHeaders =
setHeader "Access-Control-Allow-Origin" "*"
>=> addHeader "Access-Control-Allow-Headers" "content-type"
>=> addHeader "Access-Control-Allow-Headers" "token"
今言っていることは...No 'Access-Control-Allow-Origin' header is present on the requested resource.
最初setHeader
にに変更してaddHeader
も、同じ応答が得られます。
修理
addHeader "Access-Control-Allow-Origin" "*"
>=> setHeader "Access-Control-Allow-Headers" "token"
>=> addHeader "Access-Control-Allow-Headers" "content-type"
>=> addHeader "Access-Control-Allow-Methods" "GET,POST,PUT"
仕事をしました-この後、送信されたものに問題がありましたが、CORS自体にはそれ以上の問題はありませんでした.