CORS要求を受け入れるSuave APIを取得しようとしています。Suaveで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
:
setHeader "Access-Control-Allow-Origin" "*"
>=> setHeader "Access-Control-Allow-Headers" "Content-Type,token"
しかし、これは、その後を示すエラーを与えた:
How to set a Json response in suave webpart、私は、カンマで区切ったリストを経由して、両方のヘッダーを設定しようとしました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.
また、この同じ質問に基づいて、私はf ollowing:この応答を与えた
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.
だから、
、私はサーブで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自体でより多くの何も。
これは理にかなっていて、簡単に適用することができたので、当然それはまだ壊れています:(上記の編集を参照してください。 – Max
https://www.html5rocks.com/en/tutorials/cors/は 'Access-Control -Allow-Methods'も必要ですが、どこに設定していますか?そうでない場合は、実際の問題は 'Access-Control-Allow-Methods'ヘッダがなく、エラーメッセージが誤解を招く可能性があります。この時点で推測するだけです。私は、https://www.html5rocks.com/en/tutorials/cors/を読んで、CORSヘッダーの正しいセットを見つけるまで、さまざまなヘッダーの組み合わせを試してみるといいでしょう。 – rmunn
これは私を正しい方向に導いてくれます - それは全体の 'Suave.CORS'名前空間があることが判明しました。私はこれまでずっと使っていたかもしれません。 – Max