CORS in Rails

Problem

跨網域存取的時候需要使用 CORS 來讓不同網域也可以存取相同網域的資源。請看下圖,Server 返回的 Response 必須明確指出哪些網域可以存取該 Server 的資源。
有這樣的行為模式的話,是不是可以在 Controller 中的 Response 加上 Header 來達成 CORS 呢?

答案是否定的。

因為當 PUT 或是 POST … 等等的 HTTP Verb 使用 CORS 時,
需要先使用 PATCH 這個 HTTP Verb 來確認有沒有跨網域存取的權限。
當 PATCH 動作打到 Rails Route 的時候,就會發現,沒有對應的 Route,於是就回 404 了。

(圖片來源: MDN)

Solution

所以如果以後有 CORS 需求的話,請使用 gem ‘rack-cors’,從 middleware 層處理 CORS,會是比較萬用的解法。

歡迎訂閱,獲取最新資訊、教學文章,一起變強。

評論