CORS(跨域资源共享)

通过XHR实现Ajax通信的一个主要限制就是跨域安全策略。CORS(Cross Origin Resource Sharing,跨域资源共享)定义了在必须访问跨域资源时,浏览器与服务器如何沟通。

cors,把请求分为2种

  • 简单请求(simple request)
  • 非简单请求 (preflight request),请求方法是OPTIONS

那区分二者的标准是什么? 如下:

  • 请求的方法只能是GET, POST, HEAD的一种
  • 请求的header的只能是Accept,Accept-Language, Content-Language,Content-Type这些字段,不能超出这些字段
  • 对于请求的header的Content-Type字段,只能是以下值
    text/plain
    multipart/form-data
    application/x-www-form-urlencoded

都满足以上条件的就是简单请求,否则就是非简单请求。
比如我们经常使用的Content-Type:application/json; charset=utf-8,这个请求就是非简单请求

作者:答案cp3
链接:https://juejin.cn/post/7028169618405457956
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

IE对CORS的实现

通过XDR实现,XDR与XHR的区别:

  • 不携带cookie
  • 只能设置请求头部信息中的Content-Type字段
  • 不能访问响应头部信息
  • 只支持Get和Post请求

其他浏览器对CORS的实现

通过跨域XHR实现,限制如下:

  • 不能使用setRequestHeader()设置自定义头部
  • 不能发送和接受cookie
  • 调用getAllResponseHeaders()方法时总是返回空

预检请求(Preflighted Requests)

一个 CORS 预检请求是用于检查服务器是否支持 CORS 即跨域资源共享。支持开发人员使用自定义的头部、GET或POST之外的方法,以及不同类型的主体内容。
这种请求使用OPTION方法发送下列头部信息

  • Origin:与简单请求相同
  • Access-Control-Request-Method:请求自身使用的方法
  • Access-Control-Request-Headers:自定义的头部信息,多个头部信息用逗号隔开。
    如果预检请求通过了,在一定时间内重复请求是不用再次发起预检请求。

你可能感兴趣的:(Javascript,CORS,javascript)