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
具体的なapiを扱うコントローラtest.js
テンプレートページ、ajaxドメイン間リクエストの送信
(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);
}
})
}