在服务器端我正在使用Rails。故意,我没有配置CORS。因此,正如我所料,在浏览器中我无法向Rails服务器发出请求,因为我收到此错误:
但我可以使用curl:
为终端做macabeus@macabeus-acer ~ $ curl http://localhost:3000/people
[{"id":3,"name":"macabeus","age":20,"created_at":"2016-07-31T22:45:05.490Z","updated_at":"2016-07-31T22:45:05.490Z"},{"id":4,"name":"foo","age":10,"created_at":"2016-07-31T22:45:24.415Z","updated_at":"2016-07-31T22:45:24.415Z"}]
由于什么原因卷曲可以,但浏览器不能?我知道如何解决这个问题。我只想了解我之前提出的问题。
答案 0 :(得分:4)
区别在于请求中是否发送了标头Origin: http://...
。默认情况下,curl
不会发送任何额外的标头,您可以通过curl
选项运行-i
来确认:
$ curl -i http://localhost:3000/people
如果您在Origin
标头中发送任意值以及请求,请执行以下操作:
$ curl -i -H 'Origin: http://localhost:63343' http://localhost:3000/people
然后,您应该看到与浏览器中相同的CORS错误。
这背后的原因是如果请求是CORS请求,则标头Origin
会触发,即来自不同的站点,并且根据服务器端的配置,Origin
标头可能不是它来自同一个起源。