cors问题

发布时间 2023-10-13 14:12:20作者: CJTARRR

1.cors全称跨域资源共享.

2.跨域是指,浏览器对于js的同源策略限制.

跨域包含如下内容:
   1.域名不同
   2.端口不同
   3.二级域名不同
   4.协议不同(http协议和https协议是不同的)

3.解决跨域问题, cors

# cors对请求做了分类,分为简单请求和特殊请求.

1.简单请求
1)请求方法为:GET/HEAD/POST.
   2)http头信息不多于:Accept,Accept-Language,Content-Language, Last-Event-ID, Content-Type.
   3)Content-Type只限三种值:application/x-www-form-urlencoded, multipart/form-data, text/plain.
2.简单请求cors处理
服务端响应包含三个字段,Access-Control-Allow-Origin, Access-Control-Allow-Credentials,Content-Type
1)Access-Control-Allow-Origin:允许哪个域名进行跨域,是一个具体域名或者 * (代表任意域名).
   2)Access-Control-Allow-Credentials:是否允许携带cookie.默认情况下,cors不会携带,当其为true时,Access-Control-Allow-Origin不能为*, 必须指定具体域名(同时浏览器发起的请求需要指定请求头中withCredentials 为true.).
   3)Content-Type可带可不带.
   
3.特殊请求
不符合简单请求的条件, 则为特殊请求,如PUT请求.
4.特殊请求cors处理
浏览器在发送正式请求之前,会发送一个OPTIONS请求,服务端要做出相应的响应,这个请求叫"预检请求".
服务端需要在处理简单请求的基础上,再加3个响应头.Access-Control-Allow-Methods,Access-Control-Allow-Headers, Access-Control-Max-Age.
1)Access-Control-Allow-Methods: 允许的请求方式.
   2)Access-Control-Allow-Headers: 允许携带的请求头(仅针对自定义的字段,默认存在的字段不需要配置,如自定义的'X-Token'字段).
   3)Access-Control-Max-Age: 本次许可的有效时长,单位是秒,过期之前的请求就无需再次进行预检了.

注意:有时候,前端会将简单请求也按特殊请求的标准处理, 这时处理cors问题就只能按特殊请求的标准来.