2017-03-10 15 views
1

私はCloud9とHerokuを使用して、MEANスタックベースのWebアプリケーションを開発しています。私は、すべてのユーザーがHTTPSを使用するように強制することにしたい、と私はExpressのミドルウェアを使用して良い方法を見つけました:ノード/ express - CORSによってブロックされずにHTTPSを強制する方法

app.use(function(req,res,next) { 
    if(req.headers["x-forwarded-proto"] == "http") { 
     console.log("HTTP call detected, not allowed); 
     return res.redirect('https://' + req.hostname + req.path); 
    } else { 
     console.log("HTTPs call detected, allowed"); 
     return next(); 
    } 

私は、これはすべて、POSTをGET PUTのために働くことを願って、私は受信DELETE要求を、そのいずれかの呼び出しを考えてto HTTPは、同じ、対応するHTTPS要求にリダイレクトする必要があります。今

これは、それ自体で動作しているようですが、私はXMLHttpRequestのは https://myappurlhere.herokuapp.com/appをロードすることはできませんCORSポリシーエラーに

を取得しています。いいえ 要求された リソースに 'Access-Control-Allow-Origin'ヘッダーが存在します。 Origin 'http://myappurlhere.herokuapp.com'は なので、アクセスは許可されません。応答にはHTTPステータスコード401がありました。

これは、ドメイン間の要求を防止する標準のCORSポリシーであるという概念を理解していますが、私はこれにどのようにアプローチするべきか正確には分かりません。私はこれが同じドメイン要求として行くと思ったが、明らかにそうではなかった。

私は、2番目のサーバーがHTTPトラフィックを実行してリダイレクトする必要があると主張する人もいますが、1台のサーバーしか使用していないと主張しています。なぜそれがうまくいかないのか分かりません。

大変助かりました。

よろしく

答えて

0
function requireHTTPS(req, res, next) { 
    if (!req.secure) { 
      return res.redirect('https://' + req.get('host') + req.url); 
    } 
     next(); 
} 
app.use(requireHTTPS); 

これは私のために働きました。

0

私は実際にHTTPSトラフィックを強制しましたが、私は実際の問題を解決したとは思いません。私が今使っていることはこれです:

app.use(function (req, res, next) { 
    res.setHeader('Strict-Transport-Security', 'max-age=8640000; includeSubDomains'); 
    if (req.headers['x-forwarded-proto'] && req.headers['x-forwarded-proto'] === "http") { 
     return res.redirect(301, 'https://' + req.host + req.url); 
    } else { 
     console.log("HTTPS call detected"); 
     return next(); 
    } 
}); 

これが効果的におそらくヘッダの変更のため、厳格なTLSを強制しているようです。しかし、これはリダイレクトが起こりそうにないことを意味します。 "http"のテストは常にfalseです。したがって、COTSリダイレクトポリシーの問題は残っています。

これは私が実際に入力したいと思うところです。クロスドメイン要求を許可するいくつかのポリシーを追加する必要がありますか?それは安全ではないように思えますし、なぜですか?私は同じドメインにいるので、HTTPSがほしいだけです。

すべての入力が高く評価されています。

関連する問題