nodejs 跨域CORS 学习
来源:互联网 发布:mysql 存储引擎 编辑:程序博客网 时间:2024/05/29 17:15
文章参考
http://www.ruanyifeng.com/blog/2016/04/cors.html
CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。
它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。
目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。
(1)Access-Control-Allow-Origin
该字段是必须的。它的值要么是请求时Origin字段的值,要么是一个*,表示接受任意域名的请求。
(2)Access-Control-Request-Method
该字段是必须的,用来列出浏览器的CORS请求会用到哪些HTTP方法,上例是PUT。
(3)Access-Control-Expose-Headers
该字段可选。CORS请求时,XMLHttpRequest对象的getResponseHeader()方法只能拿到6个基本字段:Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma。如果想拿到其他字段,就必须在Access-Control-Expose-Headers里面指定。上面的例子指定,getResponseHeader('FooBar')可以返回FooBar字段的值。
启动nodejs web应用的app.js
处理具体api的控制器 test.js
http://www.ruanyifeng.com/blog/2016/04/cors.html
CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。
它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。
目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。
(1)Access-Control-Allow-Origin
该字段是必须的。它的值要么是请求时Origin字段的值,要么是一个*,表示接受任意域名的请求。
(2)Access-Control-Request-Method
该字段是必须的,用来列出浏览器的CORS请求会用到哪些HTTP方法,上例是PUT。
(3)Access-Control-Expose-Headers
该字段可选。CORS请求时,XMLHttpRequest对象的getResponseHeader()方法只能拿到6个基本字段:Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma。如果想拿到其他字段,就必须在Access-Control-Expose-Headers里面指定。上面的例子指定,getResponseHeader('FooBar')可以返回FooBar字段的值。
启动nodejs web应用的app.js
var express = require("express");var http = require("http");var app = express();var router = express.Router();var testRouter = require('./routes/test/test');app.use('/test', testRouter);http.createServer(app).listen(3000);
处理具体api的控制器 test.js
var express = require('express');var router = express.Router();/* GET home page. */router.get('/', function(req, res, next) { res.render('index', { name: 'Express 路由1' });});/* GET home page. */router.get('/cors', function(req, res, next) { res.render('test/index', { name: 'Express 路由1' });});/* GET home page. */router.get('/getData', function(req, res, next) { //设置允许跨域请求 var reqOrigin = req.header("origin"); if(reqOrigin !=undefined && reqOrigin.indexOf("http://localhost:3000") > -1){ //设置允许 http://localhost:3000 这个域响应 res.header("Access-Control-Allow-Origin", "http://localhost:3000"); res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS"); res.header("Access-Control-Allow-Headers", "Content-Type,Content-Length, Authorization, Accept,X-Requested-With"); } res.json(200, {name:"张三1",age:40});});module.exports = router;
模板页面,发送ajax跨域请求
<!DOCTYPE html><html lang="zh-CN"><head> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script src="../public/js/jquery.min.js"></script> <script src="../public/js/hb_common.js"></script> <link rel="stylesheet" href="../public/css/bootstrap.min.css"> <link rel="stylesheet" href="../public/css/hb_wap.css"> <title>test</title></head><body ><button class="btn btn-primary" id="btn" onclick="corsGetData()">cors跨域获取数据</button><br><button class="btn btn-primary" id="btn4" onclick="getData()">不跨域获取数据</button><br></body><script> function getData(){ $.ajax({ url: "http://localhost:3000/test/getData", type:"GET", cache: false, success: function(html){ alert(html); $("#results").append(html); } }) } function corsGetData(){ $.ajax({ url: "http://www.huangbiao.com:3000/test/getData", type:"GET", cache: false, success: function(html){ alert(html); $("#results").append(html); } }) }</script></html>
0 0
- nodejs 跨域CORS 学习
- cors学习
- CORS跨域
- 跨域 CORS
- cors 跨域
- 跨域-CORS
- cors 跨域
- 跨域CORS
- cors跨域
- CORS跨域
- 跨域CORS
- 跨域cors
- NodeJS+ExpressJS解决跨域请求CORS
- NodeJS+ExpressJS解决跨域请求CORS
- node跨域cors模块
- JavaScript 跨域(CORS)
- ajax之cors跨域
- 关于配置cors跨域
- PYTHON-进阶-编码处理小结
- 关于Spring Boot的博客集合
- Spring和Hibernate整合封装的HQL没有分页问题的解决
- Eclipse将引用了第三方jar包的Java项目打包成jar文件的两种方法
- python学习笔记3_应用和工具
- nodejs 跨域CORS 学习
- Apache CXF 构建RESTful Web Service
- spring MVC学习
- 安卓沉浸式讲解
- eclipse包名显示样式解决办法
- rhel7 Centos 7密码重置方法
- Android中的SystemClock类
- 移植安装linux的包时,常见的库链接,可能会导致编译不成功
- 查找并删除当前目录及其子目录下的所有重复文件