浏览器跨域

598 词

跨域问题

背景

跨域问题导致了浏览器无法拿到服务器的响应结果,把它拦截了下来,请求实际上是到达了服务器的,跨域是在浏览器同源策略的校验不通过产生的。

具体过程

对于浏览器来说,对于不同的请求内容,它会有不同的处理方式。

简单请求

概念

  • 请求方法为GET POST HEAD
  • 头部字段符合CORS安全规范
  • 请求体内容为
    • text/plain
    • multiple/form-data
    • multiple/x-www-form-urlencoded

请求流程

  1. 浏览器发送请求到服务器。
  2. 服务器处理请求并返回响应。
  3. 浏览器检查 Access-Control-Allow-Origin,决定是否拦截响应。

复杂请求

概念

不是简单请求的都是复杂请求,复杂请求在实际请求发送之前会发送一个预检请求(preflight)Options方法。

请求过程

  1. 浏览器发送预检请求(OPTIONS)到服务器。
  2. 服务器返回预检响应。
    • 预检响应里面会有服务器允许的请求体和请求体格式、以及这个预检校验生效时间(Access-Control-Max-Age),在这个时间以内,浏览器不用发送预检请求询问了,直接允许跨域。
  3. 浏览器检查预检响应,决定是否发送实际请求。
  4. 如果预检通过,浏览器发送实际请求,服务器处理并返回响应。
  5. 浏览器检查 Access-Control-Allow-Origin,决定是否拦截响应。

在预检请求中,会携带实际请求用到的请求方法和请求头

留言