mirror of
https://github.com/alibaba/anyproxy.git
synced 2025-07-27 07:45:41 +00:00
add support for CROS
This commit is contained in:
@@ -27,7 +27,8 @@ var handleRule = {
|
||||
|
||||
function userRequestHandler(req,userRes){
|
||||
var host = req.headers.host,
|
||||
path = url.parse(req.url).pathname,
|
||||
urlPattern = url.parse(req.url),
|
||||
path = urlPattern.path,
|
||||
ifLocalruleMatched = false;
|
||||
|
||||
console.log(color.green("\nreceived request to : " + host + path));
|
||||
@@ -37,6 +38,13 @@ function userRequestHandler(req,userRes){
|
||||
in https server : /work/alibaba
|
||||
*/
|
||||
|
||||
if(req.method == "OPTIONS"){
|
||||
console.log("==>OPTIONS req for CROS, will allow all");
|
||||
userRes.writeHead(200,mergeCROSHeader(req.headers)); //remove any cache related header, add crossdomain headers
|
||||
userRes.end();
|
||||
return;
|
||||
}
|
||||
|
||||
for(var index in handleRule.map){
|
||||
var rule = handleRule.map[index];
|
||||
|
||||
@@ -58,7 +66,6 @@ function userRequestHandler(req,userRes){
|
||||
if(fs.existsSync(targetLocalfile)){
|
||||
try{
|
||||
var fsStream = fs.createReadStream(targetLocalfile);
|
||||
userRes.writeHead(200,{"cache-control":"max-age=0"}); //remove any cache related header
|
||||
fsStream.pipe(userRes);
|
||||
ifLocalruleMatched = true;
|
||||
break;
|
||||
@@ -79,24 +86,24 @@ function userRequestHandler(req,userRes){
|
||||
var ifHttps = !!req.connection.encrypted && !/http:/.test(req.url);
|
||||
|
||||
var options = {
|
||||
hostname : req.headers.host,
|
||||
port : req.port || (ifHttps ? 443 : 80),
|
||||
hostname : urlPattern.hostname || req.headers.host,
|
||||
port : urlPattern.port || req.port || (ifHttps ? 443 : 80),
|
||||
path : path,
|
||||
method : req.method,
|
||||
headers : req.headers
|
||||
};
|
||||
|
||||
var proxyReq = (ifHttps ? https : http).request(options, function(res) {
|
||||
userRes.writeHead(res.statusCode,res.headers);
|
||||
userRes.writeHead(res.statusCode,mergeCROSHeader(req.headers,res.headers));
|
||||
res.pipe(userRes);
|
||||
});
|
||||
|
||||
proxyReq.on("error",function(e){
|
||||
console.log("err with request :" + req.url);
|
||||
console.log("err with request :" + e.code + " " + req.url);
|
||||
userRes.end();
|
||||
});
|
||||
proxyReq.end();
|
||||
|
||||
|
||||
req.pipe(proxyReq);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -147,7 +154,6 @@ function connectReqHandler(req, socket, head){
|
||||
socket.write('HTTP/' + req.httpVersion + ' 200 OK\r\n\r\n', 'UTF-8', function() {
|
||||
conn.pipe(socket);
|
||||
socket.pipe(conn);
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
@@ -177,6 +183,18 @@ function setRules(newRule){
|
||||
}
|
||||
}
|
||||
|
||||
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
|
||||
function mergeCROSHeader(reqHeader,originHeader){
|
||||
var targetObj = originHeader || {};
|
||||
|
||||
targetObj["Access-Control-Allow-Credentials"] = "true";
|
||||
targetObj["Access-Control-Allow-Origin"] = reqHeader['origin'] || "-___-||";
|
||||
targetObj["Access-Control-Allow-Methods"] = "GET, POST, PUT";
|
||||
targetObj["Access-Control-Allow-Headers"] = reqHeader['access-control-request-headers'] || "-___-||";
|
||||
|
||||
return targetObj;
|
||||
}
|
||||
|
||||
module.exports.userRequestHandler = userRequestHandler;
|
||||
module.exports.connectReqHandler = connectReqHandler;
|
||||
module.exports.setRules = setRules;
|
||||
|
Reference in New Issue
Block a user