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