Nodejsドメイン間CORS

3667 ワード

CORSはW 3 C規格であり、全称は「クロスドメインリソース共有」(Cross-origin resource sharing)である.これにより、ブラウザがソース間サーバにXMLHttpRequestリクエストを発行することができ、AJAXがソースとしか使用できない制限を克服します.現在、すべてのブラウザがこの機能をサポートしており、IEブラウザはIE 10を下回ってはならない.
(1)Access-Control-Allow-Origin
このフィールドは必須です.その値は、リクエスト時のOriginフィールドの値か、任意のドメイン名のリクエストを受け入れることを示す*です.
(2)Access-Control-Request-Method
このフィールドは、ブラウザのCORSリクエストがどのようなHTTPメソッドを使用するかをリストするために必要です.前例はPUTです.
(3)Access-Control-Expose-Headers
このフィールドはオプションです.CORSリクエストの場合、XMLHttpRequestオブジェクトのgetResponseHeader()メソッドには、Cache-Control、Content-Language、Content-Type、Expires、Last-modified、Pragmaの6つの基本フィールドしか入手できません.他のフィールドを取得するには、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ドメイン間リクエストの送信
  
  
  
      
      
  
      
      
      
      
    test  
  
  
  
  
  


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); } }) }