解决跨域问题
这个问题面试经常问,可是每次看完只会就不太记得,因此在这里记录一下,方便以后工(跳)作(槽)查看。
什么是跨域?
浏览器从一个域名的网页去请求另一个域名的资源时,域名,段口,协议任一不同,都是跨域。
域名
主域名不同 http://www.baidu.com/index.html -->http://www.sina.com/test.js
子域名不同 http://www.666.baidu.com/index.html -->http://www.555.baidu.com/test.js
域名和域名ip http://www.baidu.com/index.html -->http://180.149.132.47/test.js
端口
http://www.baidu.com:8080/index.html–> http://www.baidu.com:8081/test.js
协议
http://www.baidu.com:8080/index.html–> https://www.baidu.com:8080/test.js
备注:
1.端口和协议的不同,只能通过后台来解决
2.localhost和127.0.0.1虽然都指向本机,但也属于跨域。
跨域限制
1.无法读取非同源网页的Cookie,LocalStorage和IndexedDB
2.无法接触非同源网页的DOM
3.无法向非同源地址发送AJAX请求(可以发送,但浏览器会拒绝接受响应)
如何使前端应用通过AJAX跨域访问后端应用呢?
这需要使用到CORS技术来实现,这也是目前最好的解决方案了。
CORS全称为Cross Origin Resource Sharing(跨域资源共享),服务器只需要添加相关响应头信息,即可实现客户端发出AJAX跨域请求。
CORS技术非常简单,易于实现,目前绝大多数浏览器均已支持该技术,服务端可通过任何编程语言来实现,只要能将CORS响应头写入response对象中即可。