2013-12-21 47 views
3

我一直在一個lil應用程序中實現CORS我使用node-restify來測試它,事實證明,在瀏覽器中,行爲與預期的一樣,這意味着, CORS被禁用,它不起作用,如果啓用了CORS,它就可以工作。使用cURL測試CORS

然而,棘手的部分是,與CURL,它總是工作!我一直在關注這個問題: How can you debug a CORS request with cURL?

我這樣做:

curl -H 'Origin: http://example.com' http://cors.somewhere.com 

並採用節點的RESTify例如調試

var restify = require('restify'); 

var srv = restify.createServer(); 
//srv.use(restify.CORS()); // I enable and disable by uncomment line 

function foo(req, res, next) { 
     res.send("bananas"); 
     next(); 
} 

srv.put('/foo', foo); 
srv.get('/foo', foo); 
srv.del('/foo', foo); 
srv.post('/foo', foo); 

srv.listen(process.env.PORT || 8080); 

我缺少什麼?

謝謝!

+0

您將需要查看返回的CORS標頭。另請看「預飛行」請求。 –

+1

所以CORS的安全性是由瀏覽器(而不是服務器)來保護用戶的:) – damphat

回答

4

聽起來好像你在問是否有辦法阻止curl發出請求。這是不可能的。 curl可以隨時向服務器發出請求,有或沒有CORS。

但是,curl也可以用來模擬瀏覽器並驗證您的服務器如何對CORS請求做出反應。通過在curl請求上使用--verbose標誌,您可以看到HTTP請求和響應頭,並驗證CORS頭是否按預期工作。這就是這個問題涵蓋的內容:How can you debug a CORS request with cURL?

如果啓用CORS,您應該在響應中看到一個Access-Control-Allow-Origin標頭。如果禁用了CORS,則在響應中不應看到任何Access-Control-*標題。