Node.js용 CORS의 고도로 구성 가능하고 미들웨어 호환 구현입니다.
Access-Control-Request-Headers
헤더를 전송하는 Chrome 52에 대한 해결 방법을 추가합니다.OPTIONS
요청을 처리해야 하는 경우 endPreflightRequests
옵션을 확인하세요.(err, matches)
(matches)
입니다. 실제 예제는 example/express/
참조하세요.
var express, corser, app;
express = require("express");
corser = require("corser");
app = express();
app.use(corser.create());
app.get("/", function (req, res) {
res.writeHead(200);
res.end("Nice weather today, huh?");
});
app.listen(1337);
실제 예제는 example/connect/
참조하세요.
var connect, corser, app;
connect = require("connect");
corser = require("corser");
app = connect();
app.use(corser.create());
app.use(function (req, res) {
res.writeHead(200);
res.end("Nice weather today, huh?");
});
app.listen(1337);
http
로 Corser를 사용하는 방법 var http, corser, corserRequestListener;
http = require("http");
corser = require("corser");
// Create Corser request listener.
corserRequestListener = corser.create();
http.createServer(function (req, res) {
// Route req and res through the request listener.
corserRequestListener(req, res, function () {
res.writeHead(200);
res.end("Nice weather today, huh?");
});
}).listen(1337);
CORS를 활성화하기 위해 적절한 응답 헤더를 생성하는 Corser 요청 리스너를 생성하는 것은 다음과 같이 간단합니다.
corser.create()
이는 Access-Control-Allow-Origin: *
의 응답 헤더를 설정하는 것과 같습니다. 오리진을 제한하거나 보다 정교한 요청 또는 응답 헤더를 허용하려면 구성 객체를 corser.create
에 전달해야 합니다.
Corser는 자동으로 비행 전 요청을 종료합니다. 실행 전 요청은 CORS 요청에 허용되는 메서드, 요청 헤더 및 응답 헤더를 서버와 협상하기 위해 브라우저가 특정 조건에서 보내는 특별한 OPTIONS
요청입니다. 다른 작업에 OPTIONS
메서드를 사용해야 하는 경우 endPreflightRequests
false
로 설정하고 해당 요청을 직접 종료하면 됩니다.
var corserRequestListener;
corserRequestListener = corser.create({
endPreflightRequests: false
});
corserRequestListener(req, res, function () {
if (req.method === "OPTIONS") {
// End CORS preflight request.
res.writeHead(204);
res.end();
} else {
// Implement other HTTP methods.
}
});
다음 속성을 가진 구성 객체를 corser.create
에 전달할 수 있습니다.
origins
대소문자를 구분하는 출처 화이트리스트입니다. 요청이 이 목록에 없는 원본에서 오는 경우 CORS에서 처리되지 않습니다. 모든 출처를 허용하려면( Access-Control-Allow-Origin: *
동작) 속성을 생략하거나 빈 배열( []
)로 설정하세요.
동적 원점 확인을 허용하려면 배열 대신 함수 (origin, callback)
를 전달할 수 있습니다. origin
은 Origin 헤더이고, callback
(err, matches)
함수입니다. 여기서 matches
지정된 Origin 헤더가 일치하는지 여부를 나타내는 부울 플래그입니다.
기본값: 모든 출처가 허용됩니다.
methods
메소드의 대문자 화이트리스트입니다. 요청이 이 목록에 없는 메서드를 사용하는 경우 CORS에서 처리되지 않습니다.
여기에 값을 설정하면 기본 단순 메서드 목록을 덮어씁니다. 이를 잃지 않으려면 추가하려는 메서드를 corser.simpleMethods
: corser.simpleMethods.concat(["PUT", "DELETE"])
와 연결하세요.
기본값: 간단한 방법( GET
, HEAD
, POST
).
requestHeaders
요청 헤더의 대소문자를 구분하지 않는 화이트리스트입니다. 요청이 이 목록에 없는 요청 헤더를 사용하는 경우 CORS에서 처리되지 않습니다.
여기에 값을 설정하면 기본 단순 요청 헤더 목록을 덮어씁니다. 이를 잃지 않으려면 추가하려는 요청 헤더를 corser.simpleRequestHeaders
: corser.simpleRequestHeaders.concat(["Authorization"])
와 연결하세요.
기본값: 단순 요청 헤더( Accept
, Accept-Language
, Content-Language
, Content-Type
, Last-Event-ID
).
responseHeaders
대소문자를 구분하지 않는 응답 헤더 허용 목록입니다. 이 목록에 없는 응답 헤더는 사용자 에이전트(브라우저)에 의해 필터링됩니다.
여기에 값을 설정하면 기본 단순 응답 헤더 목록을 덮어씁니다. 이를 잃지 않으려면 추가하려는 응답 헤더를 corser.simpleResponseHeaders
: corser.simpleResponseHeaders.concat(["ETag"])
와 연결하세요.
기본값: 단순 응답 헤더( Cache-Control
, Content-Language
, Content-Type
, Expires
, Last-Modified
, Pragma
).
supportsCredentials
CORS 요청의 일부로 쿠키 자격 증명을 전송할 수 있는지 여부를 나타내는 부울입니다. 현재는 소수의 HTML5 요소만 이 설정의 이점을 누릴 수 있습니다.
기본값: false
.
maxAge
실행 전 요청이 클라이언트측 실행 전 결과 캐시에 보관되는 최대 시간(초)을 나타내는 정수입니다.
기본값: 설정되지 않음.
endPreflightRequests
CORS 실행 전 요청을 자동으로 닫아야 하는지 여부를 나타내는 부울입니다.
기본값: true
.
Origin X is not allowed by Access-Control-Allow-Origin
요청의 Origin
헤더가 구성 객체의 origins
속성에 제공된 원본 중 하나와 일치하는지 확인하세요. origins
속성을 설정하지 않은 경우 다음 질문으로 이동하세요.
그래도 도움이 되지 않으면 요청에 단순하지 않은 방법이나 단순하지 않은 헤더를 하나 이상 사용할 수 있습니다(다음 질문 참조). 사양에 따르면 단순 메서드 집합은 GET
, HEAD
및 POST
이고 단순 요청 헤더 집합은 Accept
, Accept-Language
, Content-Language
, Content-Type
및 Last-Event-ID
입니다. 요청에서 다른 메소드나 헤더를 사용하는 경우 구성 객체의 methods
나 requestHeaders
속성에 이를 명시적으로 나열해야 합니다.
X-Requested-With
헤더를 사용하는 요청을 허용하려고 합니다. corser.create
에 다음 구성 객체를 전달합니다.
corser.create({
requestHeaders: corser.simpleRequestHeaders.concat(["X-Requested-With"])
});
Request header field Content-Type is not allowed by Access-Control-Allow-Headers
기본 구성 Content-Type
클라이언트가 "간단한" 요청(예: GET
, HEAD
, POST
메서드)과 Accept
, Accept-Language
, Content-Language
및 Content-Type
등과 같은 일부 헤더를 보내는 경우에만 작동합니다. Content-Type
중요한 제한 사항이 있습니다. application/x-www-form-urlencoded
, multipart/form-data
및 text/plain
만 허용됩니다.
일반적으로 API의 Content-Type
application/json
이며 이는 기본적으로 허용되지 않습니다. Content-Type
requestHeaders
키 아래의 구성 개체에 명시적으로 지정되어야 합니다.
corser.create({
requestHeaders: corser.simpleRequestHeaders.concat(["Content-Type"])
});
Refused to get unsafe header "X"
브라우저는 실행 전 요청에서 명시적으로 허용되지 않은 모든 단순하지 않은 응답 헤더를 차단합니다. 간단한 응답 헤더 세트는 Cache-Control
, Content-Language
, Content-Type
, Expires
, Last-Modified
, Pragma
입니다. 다른 응답 헤더에 액세스하려면 구성 개체의 responseHeaders
속성에 이를 명시적으로 나열해야 합니다.
클라이언트가 응답의 ETag
헤더를 읽을 수 있도록 허용하려고 합니다. corser.create
에 다음 구성 객체를 전달합니다.
corser.create({
responseHeaders: corser.simpleResponseHeaders.concat(["ETag"])
});