跨域问题

Posted on By 任璐

跨域问题

浏览器将CORS请求分成两类:简单请求(simple request)和非简单请求(not-so-simple request)。只要同时满足以下两大条件,就属于简单请求。

  • 请求方法是以下三种方法之一:HEAD,GET,POST
  • HTTP的头信息不超出以下几种字段:
    • Accept
    • Accept-Language
    • Content-Language
    • Last-Event-ID
    • Content-Type(只限于三个值application/x-www-form-urlencoded、 multipart/form-data、text/plain)

浏览器自动处理cors 请求,对非简单请求会增加一次预检请求 methods:options 用来探视浏览器的状况 增加Origin 请求头 如果Origin指定的源,不在许可范围内,服务器会返回一个正常的HTTP回应。浏览器发现,这个回应的头信息没有包含Access-Control-Allow-Origin字段,就知道出错了,从而抛出一个错误,被XMLHttpRequest的onerror回调函数捕获。

注意,这种错误无法通过状态码识别,因为HTTP回应的状态码有可能是200。

跨域问题解决

cors nginx jsonp –几乎不用了

CORS与JSONP的使用目的相同,但是比JSONP更强大。 JSONP只支持get请求,CORS支持所有类型的HTTP请求。JSONP的优势在于支持老式浏览器,以及可以向不支持CORS的网站请求数据。

请求头特点:

Access-Control-Request-Headers –request Access-Control-Allow-Headers –response

通过script标签引入的js是不受同源策略的限制的