【综合】ajax跨域问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/w8897282/article/details/79885015

【1】什么是ajax跨域问题?

答:

前台调用后台,如果接口不是一个时,就会产生跨域问题。

【2】如何判断接口是不是同一个域或跨域产生的条件是什么?

答:

协议、域名、端口,三者任何一个有不同,即可能产生跨域问题

【3】跨域问题产生的具体原因有那三点?

答:

(1)浏览器的限制策略

(2)满足了跨域的条件

(3)请求类型是XHR

【4】如何解决跨域问题?

答:

(1)修改浏览器的策略——无实际应用价值
(2)破坏跨域的条件——请求方跨域和调用跨域
(3)更改请求类型——jsonp技术

【5】请简单解释下Jsonp解决跨域问题的思路是什么?

答:

看一下jsonp发送的报文类型是script,在之前分析跨域问题产生的条件之一就是请求报文的类型是xhr,那么jsonp的思路就是改变报文的请求类型,变为script。其次普通的ajax请求返回的json对象,而jsonp返回的是js脚本。最后jsonp发送的url后面接了一串**额外的**callback字符。

那么从这里我们就能简单分析jsonp的原理是:jsonp发送的url请求自动添加了一个callback参数,当后台发现callback参数时,就认为是一个jsonp请求,响应头在返回数据时,数据格式就由json变成script,而script的内容就是一个函数调用。

【6】请从报文头的角度讲讲浏览器是如何判断是否跨域

答:

通过对比普通请求和跨域请求浏览器里的请求头里的内容,可以发现跨域请求中增加了一个origin字段字段值为当前域名的信息。也就是说,当浏览器发现请求是跨域时,就会在请求头添加origin的字段。浏览器接收到响应头后,就会检查里面是否有允许跨域的字段,如果没有,就会报错。

【7】浏览器是先执行请求内容?还是先进行跨域判断?

答:

如果是简单请求,浏览器先执行请求内容,后进行跨域判断。如果是非简单请求,先进行预验头,再执行请求操作。

【8】什么是简单请求?什么是非简单请求?并简单列举

答:

【9】根据http协议,跨域请求中的关键头参数有哪些?分别都是什么意思

答:

Access-Control-Allow-Origin  :允许跨域请求的地址,如果是*,说明所有地址都允许
Access-Control-Allow-Methods :代表允许跨域的请求方法
Access-Control-Allow-Headers :代表允许跨域的请求头,如果是用户自定义的请求头,需要在这里声明

【10】如果是带cookie的请求,如何编写服务器响应头?

答:

1)增加 res.addHeader("Access-Control-Allow-Credentials","true");2)从request当中动态地获取origin,然后设置在响应头中

例如

【11】如果后台是spring编写的,使用按个注解可以解决跨域问题?

答:

@CrossOrigin

【12】如果后台是spring boot编写的,如何解决跨域问题?

答:

首先需要注册一个filterRegistrationBean ,然后让所有的请求都经过这filter。接下来我们在CrosFilter里的doFilter方法中添加服务器响应头

【13】Node使用了Express编写的后台如何进行跨域设置?

答:

app.all('*',function (req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
  res.header("Access-Control-Allow-Headers","Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With");
  if(req.method==="POST"&&req.body===undefined){
    console.log("POST方法body为空" )
    return null
  }
  next();
})

【14】被调用方解决跨域问题的核心思路是什么?

答:

根据Http协议,在服务器的响应头里添加允许跨域的Access-Control

【15】调用方解决跨域问题的核心思路是什么?

答:

反向代理,进行域名隐藏。

【16】在被调用方跨域的方案中,可以使用http服务器来完成,请问nginx配置是什么样子的?

答:

【17】在调用方解决跨域问题时,如何配置Nginx?

答:

首先修改Host,将127.0.0.1 映射域名a.com(可略),然后配置Nginx:

笔者个人订阅号~欢迎小伙伴们关注
微信公众号-感谢关注

若有疑问可以QQ联系笔者,虽然不一定100%解决你的问题,但是可以交流探讨一波:2276604211

顺便打个内推广告:如果有想入职中国银联上海技术开发的童鞋,也可以加上面的QQ资讯,笔者可以帮你回答一些相关问题~~

猜你喜欢

转载自blog.csdn.net/w8897282/article/details/79885015