2012-05-01 82 views
8

假設我有一個形式,現在正在做一個帖子:如何POST到HTTPs?

<form id="post-form" class="post-form" 
     action="https://stackoverflow.com/questions/ask/submit" method="post"> 

你會發現沒有網站action,瀏覽器遵循它從得到的頁面。

瀏覽器發佈

If the current page is...    then the browser will POST to 
======================================= ============= 
http://stackoverflow.com/questions/ask http://stackoverflow.com/questions/ask/submit 
https://stackoverflow.com/questions/ask https://stackoverflow.com/questions/ask/submit 

時遵循當前域規則,但我要確保瀏覽器會經常去安全頁:

http://stackoverflow.com/questions/ask https://stackoverflow.com/questions/ask/submit 

通常你會嘗試類似:

<form id="post-form" class="post-form" 
     action="https://stackoverflow.com/questions/ask/submit" method="post"> 

除t帽子需要知道託管站點的域和虛擬路徑名(例如, stackoverflow.com)。如果網站發生了變化:

  • stackoverflow.net
  • stackoverflow.com/mobile
  • de.stackoverflow.com
  • stackoverflow.co.uk/fr
  • beta.stackoverflow.com

然後形式action將不得不還更新:

<form id="post-form" class="post-form" action="https://stackoverflow.net/questions/ask/submit" method="post"> 

<form id="post-form" class="post-form" action="https://stackoverflow.com/mobile/questions/ask/submit" method="post"> 

<form id="post-form" class="post-form" action="https://de.stackoverflow.com/questions/ask/submit" method="post"> 

<form id="post-form" class="post-form" action="https://stackoverflow.co.uk/fr/questions/ask/submit" method="post"> 

<form id="post-form" class="post-form" action="https://beta.stackoverflow.com/questions/ask/submit" method="post"> 

如何指導瀏覽器去https版本的頁面


假設語法:

<form id="post-form" class="post-form" action="https://./questions/ask/submit" method="post"> 
+0

有你試過這個:http://stackoverflow.com/questions/4398951/force-ssl-https-using-htaccess-and-mod-rewrite? – j08691

+0

@ j08691我*發生*在ASP.net;但我希望獲得獨立於服務器(即客戶端)的解決方案。 –

+0

在Apache中,我猜測可能有一種方法可以在當前目錄中用.htaccess文件做到這一點。或者肯定這可以用PHP或ASP或其他服務器語言構建。 –

回答

3

您可以用JavaScript改變形式的行動:

var form = document.getElementById("post-form"); 
form.action = location.href.replace(/^http:/, 'https:'); 

但也有一些security considerations,我會建議你到表單中的URL重定向到HTTPS。雖然你可以從JavaScript做到這一點,但當它達到安全性時,你絕對不應該信任javascript,所以從服務器(它也更快,頁面不必加載,只有http頭)不會信任JavaScript。

+0

這仍然要求我將我的提交行爲從'「/ questions/ask/submit」'更改爲'「http://beta.de.stackoverflow.net/mobile/questions/ask/submit」':( –

+1

然後保存你可以使用,但是如果這樣做有不良副作用,那麼就把它打印到一個javascript變量中:var baseUrl =「beta.de.stackoverflow」。net/mobile /「;然後你可以連接form.action =」https://「+ baseurl + form.action,或者你可以使用location.hostname。 – Gavriel