前几天在b站上看到袁老师在讲跨域CORS的问题,正好之前对这个地方的概念不够深,今天记一下笔记,加深一下印象。
跨域问题就是因为浏览器的同源策略,浏览器发出请求,服务端会发生校验,是否通过规则,通过就不会有跨域问题,如果没有通过,就会产生跨域问题。
而通不通过的规则,就是CORS规则,cors(Cross-Origin-Resource-Sharing)是一套机制,用于浏览器校验跨域请求。基本理念就是: 如果服务器明确表示允许,则校验通过 如果服务器明确拒绝或者没有表示,则校验不通过
CORS将请求分为两类:
简单请求:
一般不改动请求头就满足CORS安全规范(上图第二条)
除了简单请求其余均为预检请求(非简单请求)
简单请求怎么做呢
浏览器向服务器发送请求,浏览器发现自己跨域了,就会带上一个请求头,就是Origin,表达的是当前的页面源,服务器看到是自己人,就发送一个响应头给浏览器,Acess-Control-Allow-Origin,里面包含和页面源一样的源或者*(表示所有都通过),浏览器就会通过。
遇见请求会怎么做呢
浏览器发送预检请求前
首先会发送一个“询问”OPTIONS,OPTIONS会带三个东西:
1.Origin:my.com (发送请求的源)
2.Access-Control-Request-Method:POST (发送请求的方式)
3.Access-Control-Allow-Request-Headers:a, b, content-type. (请求头修改了那些东西)
如果服务器允许这些“询问”,就会返回一个响应给浏览器,浏览器知道可以跨域响应之后,就会重复简单请求的步骤,进行跨域响应。