2012-05-01 44 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