CORS 是一種機制,允許來自其他網域 (例如 myothersite.com) 頁面上的瀏覽器腳本與您的伺服器 (例如 api.mysite.com) 通訊。 就像 JSONP 一樣,CORS 的目標是規避同源政策,讓您的 Sails 伺服器可以成功回應來自託管在其他網域頁面上的用戶端 JavaScript 程式碼的請求。 與 JSONP 不同,它不僅適用於 GET 請求,還允許您將特定來源 (staging.yoursite.com
或 yourothersite.net
) 加入白名單,並阻止來自其他來源 (evil.com
) 的請求。
Sails 可以設定為允許來自您指定的網域列表或來自所有網域的跨來源請求。 這可以針對每個路由進行設定,也可以針對應用程式中的每個路由進行全域設定。
基於安全考量,CORS 在 Sails 中預設為停用。 但啟用它很簡單。
若要允許來自受信任網域白名單的跨來源請求到您應用程式中的任何路由,只需在 config/security.js
中啟用 allRoutes
並提供 origin
設定即可
cors: {
allRoutes: true,
allowOrigins: ['http://example.com','https://api.example.com','http://blog.example.com:1337','https://foo.com:8888']
}
若要允許來自任何網域到您應用程式中任何路由的跨來源請求,請使用 allowOrigins: '*'
cors: {
allRoutes: true,
allowOrigins: '*',
allowCredentials: false
}
請注意,當使用 allowOrigins: '*'
時,allowCredentials
設定必須為 false
,這表示包含 Cookie 的請求將被封鎖。 此限制的存在是為了防止第三方網站能夠欺騙您已登入的使用者向您的應用程式發出未經授權的請求。 您可以使用 allowAnyOriginWithCredentialsUnsafe
設定來解除此限制 (風險自負!)。
請參閱 sails.config.security.cors
以取得所有可用選項的完整參考。
除了 config/security.js
中的全域 CORS 設定之外,這些設定也可以在 config/routes.js
中針對每個路由進行設定。
如果您在 config/security.js
中設定 allRoutes: true
,但想要排除特定路由,請在該路由的目標中設定 cors: false
'POST /signup': {
action: 'user/signup',
cors: false
}
若要為特定路由啟用或覆寫全域 CORS 設定,請提供作為字典的 cors
'GET /videos': {
action: 'video/find',
cors: {
allowOrigins: ['http://example.com','https://api.example.com','http://blog.example.com:1337','https://foo.com:8888'],
allowCredentials: false
}
}
- CORS 支援僅與 HTTP 請求相關。透過 Socket 發出的請求不受跨來源限制的約束。 為了確保您的應用程式透過 Socket 是安全的,請設定
onlyAllowOrigins
設定 (通常在config/env/production.js
中)。- Internet Explorer 7 不支援 CORS。 幸運的是,IE8 及更高版本以及所有其他現代瀏覽器都支援它。
- 閱讀 MDN 上關於 CORS 的更多資訊。
- 閱讀 CORS 規範。