jsonp,cors and new

常规面试题,非常能体现技术深度

远古时代

JSONP

远古时代,老浏览器只有get,可用 JSONP

前后端都要做处理,现在就会感觉耦合性太大

flash

CORS

CROS中简单请求和非简单请求

简单请求规则

  • 请求方法是HEAD,GET或者POST
  • HTTP头中只能:Accept,Content-Type,Content-Language,Accept-Language,Last-Event-ID

简单请求,浏览器请求头会加上 Origin,server允许会返回 Access-Control-Allow-Origin及其他头

如 DELETE,则会先发一次 options

CROS常用属性

Access-Control-Allow-Origin/Methods/Headers/Credentials Access-Control-Expose-Headers Access-Control-Max-Age

实现

  • java

过滤器

webmvc

spring 4.2 @CrossOrigin

WebMvcCOnfigurerAdapter

  • nginx
location / {
    add_header 'Access-Control-Allow-Origin' '*';
    add_header 'Access-Control-Allow-Credentials' 'true';
    add_header 'Access-Control-Allow-Headers' 'Authorization,Content-Type';
    add_header 'Access-Control-Allow-Methods' 'GET,POST,PUT,DELETE,OPTIONS';
}

如果后端多返回了header,可以通过more-headers插件处理

  • other

document.domain

src标签,navigation对象,window.postMessage