跨域总结

发生跨域的条件

  1. 浏览器限制
  2. 发出的请求跨域
  3. XHR请求

解决方法

针对上面三个条件的解决方法nginx

  1. 浏览器限制spring

    能够修改浏览器设置,可是无心义,不能修改全部用户的浏览器设置。apache

  2. 发出的请求跨域json

    • 修改被调用方(返回头,让浏览器支持跨域)
    • 修改调用方(代理服务器转发?)
  3. XHR请求跨域

    JSON浏览器

JSONP

返回js代码,发出的请求时script缓存

将callback值做为函数名返回。"_"参数防止被缓存。服务器

jsonp只支持get请求。cookie

被调用方解决

响应头增长字段,告诉浏览器容许跨域。框架

服务器端实现

Filter 解决方案

跨域请求,请求头增长了origin 字段

编写filter 增长response 字段

简单请求&非简单请求

预检命令

非简单请求,会有“预检命令”

预检命令会发送 content-type method,看服务器是否支持此类型跨域。

预检命令缓存

####带cookie的跨域

  • 当代cookie 时,Acces-Control-Allow-Origin 不能为* 号
  • 增长Access-Control-Allow-Credentials:3600

问题:Acces-Control-Allow-Origin 不能为* 那其余跨域怎么办呢?

能够在filter中 获取request的origin字段,而后设置到response的Acces-Control-Allow-Origin 。

nginx配置

  • 包括增长 响应头、
  • 将origin和自定义header返回
  • 处理预检命令OPTIONS

apache配置

spring 框架解决方案

@CrossOrigin

调用方解决方案

代理服务器

相关文章
相关标签/搜索