【发布时间】:2016-05-21 01:49:55
【问题描述】:
我试图弄清楚什么是 cors。 在 MDN 中它描述为:
当资源从与第一个资源本身所服务的域不同的域请求资源时,它会发出跨域 HTTP 请求。
我不确定我知道什么是网络资源。 另外,我知道 cors 允许我通过将域放在标题中来使用我域中另一个域的 Web 资源,但它只是约定还是其他?
【问题讨论】:
我试图弄清楚什么是 cors。 在 MDN 中它描述为:
当资源从与第一个资源本身所服务的域不同的域请求资源时,它会发出跨域 HTTP 请求。
我不确定我知道什么是网络资源。 另外,我知道 cors 允许我通过将域放在标题中来使用我域中另一个域的 Web 资源,但它只是约定还是其他?
【问题讨论】:
让我试着做一个简短的解释。
网络资源
网络资源是您在网络上请求的任何内容。可以是图像、json 有效负载、pdf、html 页面等。仅此而已。
CORS
当您想在浏览器中执行 ajax 请求(通常来自 javascript)时,您通常只能向同一域上的资源(url)发出请求。例如。 www.x.com 只能向www.x.com 请求资源。假设您在www.x.com 上有一个想要从api.x.com 获取资源的网页。除非服务器 (api.x.com) 启用了 CORS,否则这是不可能的。
那么它是如何工作的呢?嗯,流程是这样的(简化了很多)。
当您执行 ajax 请求时,例如对 json 有效负载的 GET 请求,浏览器会看到这一点并向服务器发出 OPTIONS 请求,并在其中说明它是谁(Origin 标头中的www.x.com) .然后服务器应该用一个带有标题的响应来回答www.x.com 可以执行 GET 请求。服务器通过添加标头Access-Control-Allow-Origin: www.x.com 来实现这一点。如果允许的来源与请求中的来源匹配,则浏览器发出 GET 请求,并且服务器返回 json 有效负载。如果允许的来源不匹配,则浏览器拒绝执行请求并在控制台中显示错误。
如果你正在做客户端 (www.x.com),并且正在使用 - 比如说 jquery - 你不需要做任何事情。一切都会自动发生。
如果你在做服务器 (api.x.com),你必须启用 CORS。如何做到这一点变化很大,但http://enable-cors.org/server.html 有一个很好的指南,说明如何在不同的服务器类型上做到这一点。他们还有一些关于它如何工作的更深入的指南。具体来说,你可能想看看这里https://www.nczonline.net/blog/2010/05/25/cross-domain-ajax-with-cross-origin-resource-sharing/
希望对你有所帮助
【讨论】: