2013-04-02 3 views
14

私のアプリケーションではブックマークレットが使用されています。MyRouteRのCORSを許可する必要がありますので、ブックマークレットコードでこのルートをAJAXリクエストに使用できます。Yesodで原点通過リクエストを許可する

config/routesの私の最初のドラフトでは、1つの要求メソッドPUTにつきまして、MyRouteRがサポートされました。しかし、OPTIONSメソッドもサポートする必要があることが判明しました。どのブラウザがCORSプリフライトリクエストに使用するのですか。

私は設定/ルートに以下になってしまった:

/myroute MyRouteR PUT OPTIONS 

私は一種のこのためのオプションを追加するように設定/ルートを処理するテンプレートHaskellではいくつかの関連する機械があるだろう期待していましたルートのメソッドリストは自動的に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感じています。したがって、2つの質問:

  1. 私たちはYesodicよりも優れた形容詞を持っていますか?
  2. ルートがクロスオリジン要求をサポートするもう1つの良い方法はありますか?
+1

'setHeader'が、私は「平均時間 –

答えて

3

UPDATE:http://hackage.haskell.org/package/wai-cors:このためのいくつかの一般的なミドルウェアを公開し、他の 誰か。


私は現在、同じことに取り組んでいますし、まだ解決策を実装していない、しかし私はそれがwikiページAllowing WOFF fonts to be accessed from other domains (CORS)上のサンプルコードに似WAI Middlewareを介して行うことができます想像してみてください。これはあなた自身を繰り返さずに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", "*") 
+0

に廃止されましたので、私は上記の' addHeader'に 'setHeader'を変更私はそれをテストしていないので答えを受け入れる準備ができていません。私はその場で別の回避策を講じており、現在は十分に機能しています。私はすぐにこれをテストしようとします。誰か他の人がそれをテストしてうまく動作することがわかったら、体重を測ってください。 –

+0

ありがとう、私のために働くかどうかお知らせします。私はおそらく今月中に自分でテストするでしょう。 –

+0

インポートを入れてください – FtheBuilder

関連する問題