配置有些问题,配置的不对
浏览器可以自动的处理,有些
服务器支持了,前端走代理就好了,
因为你已经设置了Access-control-Allow-Headers: Content-type,已经实现了跨域,跟get方式没关系
不报错:
Access-Control-Allow-Origin:*, https://demo.hisouth.cn
报错:
Access-Control-Allow-Origin:*, https://demo.hisouth.cn, https://demo.hisouth.cn
我目前处理:
# 在options中,添加一次跨域请求
# https://www.cnblogs.com/sunmmi/articles/5956554.html
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' $http_origin;
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
add_header 'Access-Control-Max-Age' 86400;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
# 最后判断再匹配一次
# nginx 正则表达式
# https://www.cnblogs.com/bethal/p/5514557.html
if ($http_origin !~* '^http'){
add_header 'Access-Control-Allow-Origin' $http_origin;
}
浏览向某个域发起请求时,只能带上该域下的cookie。我的理解是,隐藏跨域时,浏览器没有跨域,只是Nginx跨域了,但是Nginx又没有跨域限制。浏览器一直都是向同一个域发起请求,所以cookie应该设置在该域下,然后cookie应该是被Nginx转发到后台了吧
400 了,这肯定是路径不对了,你先对一下请求路径吧
1.浏览器限制
2.前台和请求地址端口不一样.
3XHR(XMLHttpRequest)请求
这三个问题同时发生,才会产生跨域问题
用iframe报这个错 blocked a frame with origin ''..." from accessing a cross-origin frame,咋整
nginx也要配置好
已经可以测试通过了
简单请求 与 非简单请求
也不用很懂,百度一下 配置好一次 以后都不用再弄了
我想可能是理解上的问题。先说结论,同学你这种情况因为是ajax发送json数据所以一定是非简单请求。
想要成为简单请求,除了“是post“这个条件外还需要满足”没有自定义头“和”Content-Type是特定类型“的条件。
以下是我用自己的意思表达老师的笔记,你可以对号入座一下。
简单请求与非简单请求
简单请求
1. 你的方法(Method) 是 GET/HEAD/POST
2. 你的请求头(header)没有自定义头
3. 你的请求头(header)中的Content-Type字段的值是以下三种中的一种:
- text/plain,
- multipart/form-data,
- application/x-www-form-urlencoded
同时满足,注意,是同时满足,才为简单请求,否则就是非简单请求
非简单请求中常见的情况(并不是全部情况)
- 你的方法(Method) 是 PUT/DELETE 的 ajax 请求
- 你的请求头(header)有自定义头
- 你的请求头(header)中的Content-Type字段的值是application/json;charset=UTF-8
也就是说你在用 ajax 发 json 数据
访问前端代码有一个端口是8081,后台代码也有一个端口8080,在页面上输入的是访问前台的代码,前台的代码需要访问后台时才需要请求8080。。
springboot2.X放弃了
function拼写错了
老师用的开发编辑器是Sublime Text,此外还有比较流行的VS Code
nginx里面,$COOKIE_服务器cookie的名字 ,把“服务器cookie”换成你的cookie就可以取到。
java服务器端添加:
Cookie cookie = new Cookie("testKey", "testVal");
cookie.setDomain(request.getRemoteAddr());
cookie.setPath("/");
cookie.setMaxAge(2 * 60 * 60);
cookie.setHttpOnly(true);
// 写在doFilter前
response.addCookie(cookie);
防止csrf攻击 所以浏览器有同源策略
任何一个都算跨域