究竟什么是跨域,如何解决跨域问题

简介: 在前后端分离的开发模式中,经常会遇到跨域问题,即 Ajax 请求发出去了,服务器也成功响应了,前端就是拿不到这个响应,这就是跨域问题。那跨域问题又是如何产生的,我们又该如何去解决跨域问题呢?

跨域指的是什么?

浏览器为了防止一些XSS、CSRF攻击,做了一层安全防护,这层防护就是同源策略。浏览器只支持同源的访问。所谓同源就是指“协议|域名|端口号”三者必须完全相同,即使是同一IP,不同域名也不行,二级域名也不行

不受同源限制的:

  • 页面中的连接,重定向以及表单提交不受同源策略限制
  • 跨域资源引入是可以的,但js不能读写加载的内容。

    • <script src=""></script>
    • <img>
    • <link>
    • <iframe>

跨域就是受同源策略的影响,操作另一个源的资源

解决跨域问题

跨域请求的响应一般会被浏览器所拦截,注意,是被响应被浏览器拦截,请求已被服务端处理,响应也成功到达客户端了,但就是获取不到。

1 前端解决跨域

  • 动态创建script
  • document.domain + iframe (只有在主域相同的时候才能使用该方法)
  • location.hash + iframe
  • window.name + iframe
  • postMessage(HTML5中的XMLHttpRequest Level 2中的API)

    配合使用 iframe,需要兼容 IE6、7、8、9

  • CORS

    它使用额外的 HTTP 头来告诉浏览器 让运行在一个 origin (domain) 上的 Web 应用被准许访问来自不同源服务器上的指定的资源。

  • JSONP

    Ajax 请求会受到同源策略限制,而 script 标签请求不会

  • web sockets

    同源策略对web sockets不适用

2 后端解决跨域

  • CORS

    CORS 其实是 W3C 的一个标准,全称是跨域资源共享。它需要浏览器和服务器的共同支持,具体来说,非 IE 和 IE10 以上支持CORS,服务器需要附加特定的响应头。

3 使用代理解决跨域问题

服务端与服务端的交互是不受同源策略限制的

使用代理去避开跨域请求,需要修改 nginx、apache 等的配置

Nginx Proxy

Nginx 是一种高性能的反向代理服务器,可以用来轻松解决跨域问题。

反向代理拿到客户端的请求,将请求转发给其他的服务器,主要的场景是维持服务器集群的负载均衡,换句话说,反向代理帮其它的服务器拿到请求,然后选择一个合适的服务器,将请求转交给它。

server {
  listen  80;
  server_name  client.com;
  location /api {
    proxy_pass server.com;
  }
}

Nginx 相当于起了一个跳板机,这个跳板机的域名也是client.com,让客户端首先访问 client.com/api,这当然没有跨域,然后 Nginx 服务器作为反向代理,将请求转发给server.com,当响应返回时又将响应给到客户端,这就完成整个跨域请求的过程。

目录
相关文章
|
缓存 JSON 前端开发
CORS 详解,终于不用担心跨域问题了
CORS 详解,终于不用担心跨域问题了
1555 0
CORS 详解,终于不用担心跨域问题了
|
4月前
|
JSON 前端开发 JavaScript
解决跨域问题
解决跨域问题
|
1月前
|
JavaScript 安全 前端开发
js开发:请解释什么是跨域请求(CORS),以及如何解决跨域问题。
CORS是一种W3C标准,用于解决浏览器同源策略导致的跨域数据访问限制。它通过服务器在HTTP响应头添加标志允许特定源进行跨域请求。简单请求无需预检,而预检请求(OPTIONS)用于询问服务器是否接受非简单请求。服务器端配置响应头如`Access-Control-Allow-Origin`等实现CORS策略,客户端JavaScript则正常发起请求。若配置不当,浏览器将阻止跨域访问,保障安全。
23 2
|
1月前
|
JSON 前端开发 安全
前端解决跨域的六种方法
跨域问题是指当一个网页试图访问来自不同源(域名、协议、端口)的资源时,浏览器会出于安全考虑而限制这种访问。这是因为浏览器的同源策略防止了恶意网站获取其他网站的敏感信息。
|
3月前
|
XML JSON 前端开发
跨域问题
跨域问题
21 0
|
8月前
|
前端开发 Java 应用服务中间件
项目里面怎么解决跨域的?
项目里解决跨域的方法
|
8月前
|
JavaScript 前端开发 中间件
前端解决跨域问题(9个方法)
前端解决跨域问题(9个方法)
995 0
|
9月前
|
移动开发 JSON 前端开发
前端跨域
跨域是指在浏览器中,一个页面的脚本试图去访问不同域名下的资源时,浏览器会阻止这种跨域的请求。这是为了保护用户的安全,防止恶意代码获取用户数据。但是,在一些场景下,我们需要进行跨域请求,这时就需要一些跨域解决方式。
|
10月前
|
JSON Android开发 数据格式
|
存储 前端开发 JavaScript
什么是跨域?如何解决跨域问题?
什么是跨域?如何解决跨域问题?
707 0
什么是跨域?如何解决跨域问题?