跨域资源共享:Cross-origin Resource Sharing

浏览器同源策略

协议
域名
端口

CORS

CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。
服务器端拦截器CorsFilter ,设置:Access-Control-Allow-Origin

简单请求

  1. HEAD、GET、POST
  2. HTTP的头信息不超出以下几种字段:Accept、Accept-Language、Content-Language、Last-Event-ID、Content-Type

当浏览器发现发现的ajax请求是简单请求时,会在请求头中携带一个字段:Origin
Origin中会指出当前请求属于哪个域(协议+域名+端口),服务会根据这个值决定是否允许其跨域。

特殊请求

  1. PUT、DELETE、OPTIONS(预检请求)
  2. Access-Control-Request-Method:接下来会用到的请求方式,比如PUT
  3. Access-Control-Request-Headers:会额外用到的头信息

特殊请求会在正式通信之前,增加一次HTTP查询请求,称为"预检"请求(preflight)
浏览器先询问服务器,当前网页所在的域名是否在服务器的许可名单之中,以及可以使用哪些HTTP动词和头信息字段。只有得到肯定答复,浏览器才会发出正式的XMLHttpRequest请求,否则就报错。
Access-Control-Allow-Methods:允许访问的方式
Access-Control-Allow-Headers:允许携带的头
Access-Control-Max-Age:本次许可的有效时长,单位是秒,过期之前的ajax请求就无需再次

如果跨域请求要想操作cookie

服务的响应头中需要携带Access-Control-Allow-Credentials并且为true。
浏览器发起ajax需要指定withCredentials 为true
响应头中的Access-Control-Allow-Origin一定不能为*,必须是指定的域名

JSONP

仅支持get请求

NGNIX反向代理

你可能感兴趣的:(SpringMVC)