美文网首页
ajax跨域问题

ajax跨域问题

作者: 多关心老人 | 来源:发表于2018-01-11 23:01 被阅读0次

跨域请求ajax,在正式发出请求前会自动发送一个preflight request请求,这个请求方式是options,不带cookie和参数,拿到服务器返回如果Access-Control-Allow-Origi允许当前域名跨域访问,那么随后会正式发送你的ajax请求。如果不允许就会报错。
要注意preflight request请求的地址和正常请求地址是一样的,注意没有cookie和参数,后台业务逻辑要注意NPE问题。

HTTP请求头参考https://www.jianshu.com/p/d05303d34222

#请求域
Origin: ”http://localhost:3000“

#这两个属性只出现在预检请求中,即OPTIONS请求
Access-Control-Request-Method: ”POST“
Access-Control-Request-Headers: ”content-type“

HTTP响应头,参考https://www.jianshu.com/p/d05303d34222

#允许向该服务器提交请求的URI,*表示全部允许,在SpringMVC中,如果设成*,会自动转成当前请求头中的Origin
Access-Control-Allow-Origin: ”http://localhost:3000“

#允许访问的头信息
Access-Control-Expose-Headers: "Set-Cookie"

#预检请求的缓存时间(秒),即在这个时间段里,对于相同的跨域请求不会再预检了
Access-Control-Max-Age: ”1800”

#允许Cookie跨域,在做登录校验的时候有用
Access-Control-Allow-Credentials: “true”

#允许提交请求的方法,*表示全部允许
Access-Control-Allow-Methods:GET,POST,PUT,DELETE,PATCH

下面是一个在百度网页中跨域请求另一个网站的network信息:

Request URL:http://bike-api.jdd.com/bike/api/game/status.do
Request Method:OPTIONS
Status Code:200 OK
Remote Address:192.168.137.142:80
Referrer Policy:unsafe-url

Response Headers
view source
Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:device
Access-Control-Allow-Methods:POST
Access-Control-Allow-Origin:http://www.baidu.com
Access-Control-Max-Age:1800
Allow:GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH
Connection:keep-alive
Content-Length:0
Date:Tue, 02 Jan 2018 11:25:57 GMT
Server:nginx
Vary:Origin

Request Headers
view source
Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:zh-CN,zh;q=0.8,en;q=0.6
Access-Control-Request-Headers:device
Access-Control-Request-Method:POST
Connection:keep-alive
Host:bike-api.jdd.com
Origin:http://www.baidu.com
Referer:http://www.baidu.com/
User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36

编写CORS可以用CorsFilter,CorsInterceptor和@CorsOrigin(在Controller上加)3种方法。
CorsFilter可以对全部url起作用,interceptor只拦截springmvc请求,@corsorigin只对某个Controller起作用。
任务:pre-flight request会经过interceptor,不知到会不会进入controller执行业务逻辑???
理想情况下,pre-flight request应该在CorsFilter或者CorsInterceptor直接返回,不应该进入用户的filter,interceptor和controller.

相关文章

  • 解决ajax跨域问题

    Jsonp解决ajax跨域问题 CORS解决ajax跨域问题

  • Http浅析【2】——ajax跨域问题

    视频参考:ajax跨域完全讲解 本文精华版:【综合】ajax跨域问题 什么是跨域问题 简单来讲,当前台调用后台,如...

  • 前端跨域

    什么是ajax跨域 ajax跨域的原理 ajax出现请求跨域错误问题,主要原因就是因为浏览器的“同源策略”,可以参...

  • ajax跨域请求

    ajax跨域请求(jsonp) 利用JSONP解决AJAX跨域问题的原理与jQuery解决方案JSONP jQue...

  • window.postMessage解决前端ajax跨域问题

    postMessage畅快解决跨域问题 本文主要是记录使用window.postMessage解决ajax跨域问题...

  • 使用JSONP解决ajax跨域

    在日常开发中,不免遇到跨域的问题。在这里我们介绍使用Jsonp来解决ajax跨域的问题 什么是跨域? 跨域,指的是...

  • Flask-cors跨域

    什么是跨域 为什么要考虑跨域问题 同源策略 解决跨域问题 方式一: 使用 JSONP (一种非Ajax技术,需要前...

  • SpringMVC 进行ajax跨域请求访问

    关于 springmvc 3.x 版本对ajax跨域请求访问 ajax 请求后,浏览器出现跨域的问题那么在当前环境...

  • 解决跨域问题

    概述 在浏览器端进行 Ajax 请求时会出现跨域问题,那么什么是跨域,如何解决跨域呢?先看浏览器端出现跨域问题的现...

  • 跨域问题

    概述 在浏览器端进行 Ajax 请求时会出现跨域问题,那么什么是跨域,如何解决跨域呢?先看浏览器端出现跨域问题的现...

网友评论

      本文标题:ajax跨域问题

      本文链接:https://www.haomeiwen.com/subject/xopqnxtx.html