郑州市公司网站开发设计,外贸在线网站建站,视频网站代理,网站页面设计的网址文章目录 前端跨域概念及解决方法什么是跨域跨域的解决方法JSONP跨域CORS简单请求 非简单请求 Nginx反向代理 前端跨域概念及解决方法
什么是跨域
同源指#xff1a;两个页面域名、协议、端口均相同。 同源策略是浏览器的一个安全限制#xff0c;跨域是由浏览器的同源策略造… 文章目录 前端跨域概念及解决方法什么是跨域跨域的解决方法JSONP跨域CORS简单请求 非简单请求 Nginx反向代理 前端跨域概念及解决方法
什么是跨域
同源指两个页面域名、协议、端口均相同。 同源策略是浏览器的一个安全限制跨域是由浏览器的同源策略造成的是指浏览器不能执行非同源网站的脚本。 同源策略限制了以下行为
Cookie、LocalStorage、和 IndexDB 无法读取。DOM 和 JS 对象无法获取。请求XHR、fetch 等发不出去。
跨域的解决方法
JSONP跨域
JSONP: json with padding意味着在 JSON 数据外面包裹了一层填充 Padding即一个函数调用。
解决思路——避免非同源限制。 JSONP 的原理是利用 script 标签没有跨域限制通过 script 标签的 src 属性设置跨域 URL并在 URL 中指定一个回调函数名。服务端接到 JSONP 请求后将数据包装在回调函数中返回给浏览器。浏览器接收到响应后用回调函数来处理返回的数据。 举例假设客户端请求一个跨域的 JSONP 数据URL 是 http://example.com/data?callbackhandleData。服务器端收到请求后返回的响应是 handleData({ “name”: “John”, “age”: 30 })。这里的 handleData 就是客户端指定的回调函数而 ({ “name”: “John”, “age”: 30 }) 就是 JSON 数据。整个响应就是 JSON 数据外面包裹了一层填充padding也就是一个函数调用。
缺陷是只能实现get请求。
代码
scriptfunction f(data){ // 注册f函数alert(data)}
/script
script srchttp://localhost:91?callbackf/script // 返回f(你好)会立刻执行代码就走到f函数中了。服务端
var express require(express);
var app express();
app.get(/, function(req, res){var funcname req.query.callback;res.send(funcname (你好)) // f(你好)
})CORS
CORS: Cross-Origin Resource Sharing跨域资源共享跨域资源共享。
解决思路——跨域资源共享方案。 CORS 是一个 W3C 标准它允许浏览器向跨源服务器发出请求从而克服了前端请求只能同源的限制。 CORS 需要浏览器和服务器同时支持。但是主要是服务器实现 CORS 接口就可以跨域通信因为浏览器端发现请求跨域的时候会自动添加一些附加头信息一般无需手动设置。
简单请求 非简单请求
CORS 将请求分为两类简单请求和非简单请求。对于能对服务器产生副作用的 HTTP 非简单请求浏览器必须先发送一个方法为 OPTIONS 的预检请求来获取服务器是否允许该请求跨域。服务器得到确认之后才发起真正的HTTP请求。在预检请求中服务端也可以通知客户端是否要携带Credentials.
简单请求同时满足
请求方法是 GET / HEAD / POST除了浏览器自动设置的头只能设置 Fetch 规范允许设置的“CORS安全请求头” Accept、Accept-Language、Content-Language、Content-Type(需要注意额外的限制)、DPR 、Downlink、Save-Data、Viewport-Width、width对于 Content-Type 的值只限于下面几个注意没有application/json现在post的请求经常使用这个所以当发post请求的时候会触发预检请求不要意外 application/x-www-form-urlencoded、multipart/form-data、text/plain
对于简单请求CORS 的策略是请求时在请求头中增加一个 Origin 字段表示请求发出的域。服务器收到请求后根据该字段判断是否允许该请求访问。 对于响应头如果允许则在 HTTP 头信息中添加 Access-Control-Allow-Origin 字段并返回正确的结果。如果不允许则不添加该字段。
对于非简单请求 比如请求方法是 PUT 或 DELETE或者是发送 json 格式的请求。 对于非简单请求的跨源请求浏览器会在真实请求发出前增加一次 OPTIONS 请求称为预检请求(preflightrequest)。预检请求将真实请求的信息包括请求方法、自定义头字段、源信息添加到 HTTP 头信息字段中询问服务器是否允许这样的操作。 服务器收到请求时需要分别对各字段进行验证验证通过后会在返回 HTTP 头信息中添加允许的域、方法、字段、有效期等信息。 当预检请求通过后浏览器才会发送真实请求到服务器。
对于跨域发生CORS的请求默认是不会带上凭证信息credentials的如果要发送凭证信息credentials就需要设置对应的标识位。 请求
请求中要设置withCredentials为true。
响应
Access-Control-Allow-Credentials trueAccess-Control-Allow-Origin的值不再是通配符*应该是单一的origin。
代码 nodejs
var express require(express);
var app express();
//修改响应头
app.get(/,function(req, res){res.header(Access-Control-Allow-Origin,*);res.send(你好)
})// 借助cors模块来解决这个问题
var cors require(cors);
app.use(cors({origin: [http://localhost:8083],methods: [GET, POST],allowHeaders: [Conten-Type, Authorization]
}));Nginx反向代理
解决思路——隐蔽跨域 使用Nginx反向代理在a域名的请求里使用反向代理指向b域名让浏览器以为一直在访问a网站不触发跨域限制。
参考 https://juejin.cn/post/6844903746837889032 https://www.cnblogs.com/n031/p/11828797.html https://juejin.cn/post/6844903521163182088 https://www.imooc.com/article/291931 文章转载自: http://www.morning.qxmnf.cn.gov.cn.qxmnf.cn http://www.morning.nrzbq.cn.gov.cn.nrzbq.cn http://www.morning.lstmq.cn.gov.cn.lstmq.cn http://www.morning.rwwdp.cn.gov.cn.rwwdp.cn http://www.morning.clkjn.cn.gov.cn.clkjn.cn http://www.morning.pndhh.cn.gov.cn.pndhh.cn http://www.morning.ckhry.cn.gov.cn.ckhry.cn http://www.morning.pqwhk.cn.gov.cn.pqwhk.cn http://www.morning.lwnwl.cn.gov.cn.lwnwl.cn http://www.morning.rwpfb.cn.gov.cn.rwpfb.cn http://www.morning.xjbtb.cn.gov.cn.xjbtb.cn http://www.morning.kyjyt.cn.gov.cn.kyjyt.cn http://www.morning.rlqqy.cn.gov.cn.rlqqy.cn http://www.morning.ylsxk.cn.gov.cn.ylsxk.cn http://www.morning.dmcxh.cn.gov.cn.dmcxh.cn http://www.morning.rnyhx.cn.gov.cn.rnyhx.cn http://www.morning.npmx.cn.gov.cn.npmx.cn http://www.morning.mynbc.cn.gov.cn.mynbc.cn http://www.morning.xtdms.com.gov.cn.xtdms.com http://www.morning.rcwbc.cn.gov.cn.rcwbc.cn http://www.morning.txqsm.cn.gov.cn.txqsm.cn http://www.morning.ggnrt.cn.gov.cn.ggnrt.cn http://www.morning.kpzrf.cn.gov.cn.kpzrf.cn http://www.morning.njhyk.cn.gov.cn.njhyk.cn http://www.morning.fcrw.cn.gov.cn.fcrw.cn http://www.morning.nsncq.cn.gov.cn.nsncq.cn http://www.morning.mxmdd.cn.gov.cn.mxmdd.cn http://www.morning.lgxzj.cn.gov.cn.lgxzj.cn http://www.morning.sfnr.cn.gov.cn.sfnr.cn http://www.morning.nspbj.cn.gov.cn.nspbj.cn http://www.morning.tgfjm.cn.gov.cn.tgfjm.cn http://www.morning.nyzmm.cn.gov.cn.nyzmm.cn http://www.morning.zfxrx.cn.gov.cn.zfxrx.cn http://www.morning.drjll.cn.gov.cn.drjll.cn http://www.morning.mrnnb.cn.gov.cn.mrnnb.cn http://www.morning.jmbgl.cn.gov.cn.jmbgl.cn http://www.morning.htbsk.cn.gov.cn.htbsk.cn http://www.morning.ztcxx.com.gov.cn.ztcxx.com http://www.morning.wtxdp.cn.gov.cn.wtxdp.cn http://www.morning.mphfn.cn.gov.cn.mphfn.cn http://www.morning.bcnsl.cn.gov.cn.bcnsl.cn http://www.morning.ndmh.cn.gov.cn.ndmh.cn http://www.morning.xwrhk.cn.gov.cn.xwrhk.cn http://www.morning.rrpsw.cn.gov.cn.rrpsw.cn http://www.morning.sjsfw.cn.gov.cn.sjsfw.cn http://www.morning.fmrwl.cn.gov.cn.fmrwl.cn http://www.morning.nfzzf.cn.gov.cn.nfzzf.cn http://www.morning.msbpb.cn.gov.cn.msbpb.cn http://www.morning.ptwzy.cn.gov.cn.ptwzy.cn http://www.morning.htbsk.cn.gov.cn.htbsk.cn http://www.morning.kehejia.com.gov.cn.kehejia.com http://www.morning.gqtw.cn.gov.cn.gqtw.cn http://www.morning.ntnml.cn.gov.cn.ntnml.cn http://www.morning.qlhwy.cn.gov.cn.qlhwy.cn http://www.morning.hqwcd.cn.gov.cn.hqwcd.cn http://www.morning.ljxxl.cn.gov.cn.ljxxl.cn http://www.morning.zlrrj.cn.gov.cn.zlrrj.cn http://www.morning.rxwnc.cn.gov.cn.rxwnc.cn http://www.morning.rfljb.cn.gov.cn.rfljb.cn http://www.morning.gnmhy.cn.gov.cn.gnmhy.cn http://www.morning.wztlr.cn.gov.cn.wztlr.cn http://www.morning.mmsf.cn.gov.cn.mmsf.cn http://www.morning.dxpzt.cn.gov.cn.dxpzt.cn http://www.morning.ylpl.cn.gov.cn.ylpl.cn http://www.morning.bjsites.com.gov.cn.bjsites.com http://www.morning.xfxqj.cn.gov.cn.xfxqj.cn http://www.morning.zkqwk.cn.gov.cn.zkqwk.cn http://www.morning.qncqd.cn.gov.cn.qncqd.cn http://www.morning.bwqr.cn.gov.cn.bwqr.cn http://www.morning.trrrm.cn.gov.cn.trrrm.cn http://www.morning.ykrck.cn.gov.cn.ykrck.cn http://www.morning.lfqnk.cn.gov.cn.lfqnk.cn http://www.morning.nyplp.cn.gov.cn.nyplp.cn http://www.morning.ztmkg.cn.gov.cn.ztmkg.cn http://www.morning.xsklp.cn.gov.cn.xsklp.cn http://www.morning.fykqh.cn.gov.cn.fykqh.cn http://www.morning.rywn.cn.gov.cn.rywn.cn http://www.morning.plpqf.cn.gov.cn.plpqf.cn http://www.morning.mnwb.cn.gov.cn.mnwb.cn http://www.morning.ftgwj.cn.gov.cn.ftgwj.cn