跳至主要內容

4日


4日

跨域和cors的区别

  • 跨域(Cross-Origin):指的是在浏览器的同源策略下,一个网页的脚本试图访问另一个源(域、协议、端口)的资源时发生的情况。简单来说,如果两个页面的协议、域名、端口有任何一个不同,就称为跨域。

  • 跨域资源共享(CORS):是一种机制,允许服务器在响应中添加一些头部信息,从而告诉浏览器该服务器允许哪些源可以访问它的资源。通常情况下,跨域请求是被浏览器阻止的,但是通过在服务器端配置 CORS 头部信息,可以实现跨域请求的授权。

简单请求和预检请求

  • 简单请求(Simple Request)

    • 请求方法是以下之一:GET、HEAD、POST。

    • 请求中的头信息是以下之一:Accept、Accept-Language、Content-Language、Content-Type(仅限于 application/x-www-form-urlencoded、multipart/form-data、text/plain)。

    • 请求中的任何XMLHttpRequestUpload对象的实例都没有注册任何事件监听器。

    • 请求中没有使用ReadableStream对象。 简单请求不会触发预检请求,浏览器会直接发送请求。

  • 预检请求(Preflight Request)

    • 使用非简单请求(例如使用自定义头部信息或使用非简单的Content-Type)时,浏览器会在正式发送跨域请求之前发送一个OPTIONS请求,以确定服务器是否允许实际的请求。这个预检请求包含了一些必要的信息,例如请求的方法(例如PUT、DELETE等)、自定义头部信息等。

    • 服务器接收到预检请求后,会检查Origin(来源)、Access-Control-Request-Method(请求方法)以及Access-Control-Request-Headers(请求头信息),然后决定是否允许实际的跨域请求。

    • 如果服务器确认允许实际的请求,则在响应中包含对应的头部信息(如Access-Control-Allow-Origin);否则,浏览器将拦截实际请求。

需要注意的

  • 简单请求和预检请求都会触发跨域,只是预检请求多了预检这一步骤
  • 通过CORS只有服务端能够解决跨域问题,如果要在前端解决,需要使用其他策略
上次编辑于:
你认为这篇文章怎么样?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
评论
  • 按正序
  • 按倒序
  • 按热度