使用href的POST请求

时间:2014-10-07 21:52:38

标签: javascript php html

我试图用href请求发帖子请求(我需要在页面中使用url中的参数重定向到页面) 这是检查POST请求的代码,如果它可以提供帮助:

if ($_POST['pw'] == 'password') {
    echo ('<iframe height="100%" width="100%" scrolling="no"  src="html/book.html?pw=passcode&ver=2014_09_29_11:08&" allowfullscreen webkitallowfullscreen mozallowfullscreen />');
} else {
    die ("<h1>Access Denied !</h1>");
}

3 个答案:

答案 0 :(得分:1)

使用纯HTML,您不能发送href请求作为POST,它们是定义的GET请求。

但是,您可以使用JavaScript来拦截调用并提交隐藏的表单。这是一个例子。我将使用jQuery,但当然这也可以使用普通的JS。

<a href='somepage.php' id='mylink'>link text</a>

在JS中,我们捕获click事件并动态插入表单,之后我们将通过POST发送。当然,您不需要使用JS生成表单,您也可以将表单作为纯HTML直接插入页面。

$("#mylink").click(function(event){
  event.preventDefault(); // don't "execute" the link

  var $form = $("<form action='somepage.php' method='post' style='display: none' target='_blank'>" +
    "<input type='hidden' name='foo' value='bar' />" +
    "<input type='submit' />" + 
    "</form>").appendTo($('body'));

  $form.submit();
});

当你在PHP中编写模板时,可以在服务器端插入正确的input元素和表单的action属性。

然而,复杂的方法是解析链接的href属性中的URL。但这是一个完全不同的主题,所以为了简洁起见,我将省略它。

安全警告:当然不要通过GET请求发送密码。但是,此解决方案期望在用户的浏览器上启用JS。如果不是,或者代码不起作用,请求将通过GET 发送。

正确的方法是使用真实的<form>元素或AJAX发送帖子请求。

答案 1 :(得分:1)

不,您不能使用srchref属性发出HTTP POST请求,只能通过这种方式发出HTTP GET请求。

GET请求通过查询字符串在URL中传递其参数,并且具有空请求正文。他们看起来像:

GET /page.php?var1=foo&var2=bar HTTP/1.1
Host: www.example.com

POST个请求在请求正文中传递其参数。他们看起来像

POST /page.php HTTP/1.1
Host: www.example.com

var1=foo&var2=bar

可能发出POST请求,其中还包含GET个参数,但这在技术上是不好的做法,依赖于容忍的Web服务器和CGI网关允许这样做。例如:

POST /page.php?var1=foo HTTP/1.1
Host: www.example.com

var2=bar

鉴于您的问题的上下文,应该提到POST请求对于密码传输只是稍微更安全,因为它们不包括查询字符串中的密码,该密码可能由服务器记录或存储在浏览器的历史记录中。 但是,它们仍以纯文本形式传输,从上面的示例中可以看出这一点。

使用SSL。

此外,返回给客户端的任何信息都可能会缓存在浏览器中,因此发送回<iframe src="/page.php?password=foobar ...>也是非常糟糕的安全措施。使用会话进行本地身份验证和无密码身份验证方案(如OAuth)进行远程身份验证。

答案 2 :(得分:-1)

if ($_POST['pw'] == 'password') {
    header('location:#####FULL URL HERE#######');
 else {
    die ("Invalid password");