XMLHttpRequest cannot load api.example.com. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8100' is therefore not allowed access.在解决这个问题后,我还是感觉云里雾里,阅读了很多资料,最终认为自己“理解”了,以下是我的理解内容:
浏览器为了用户数据安全,默认不允许跨域。只要 XMLHttpRequest 发起请求的源和浏览器地址栏中的源不一致,请求就会被限制。解决办法是采用跨域资源访问(CORS),后端在 Response Header 中写入 Access-Control-Allow-Origin: * 。后来又查了一下 Access-Control-Allow-Origin 的作用,发现这个理解有点肤浅。
JS 和 HTML 是同源的,即显示在浏览器地址栏中的 Scheme + Host + (Port)。A 网站在发起 XMLHttpRequest 请求时,浏览器会在该请求的 Header 中添加 Origin: A 字段,来表明请求者的身份。需要注意这里的 A 并不是 XMLHTTPRequest 的 Host,而是 JS 文件的来源。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |