什么是HTTP请求标头?

时间:2012-08-12 12:30:57

标签: javascript ajax

Posting a form using AJAX

我的AJAX脚本之前没有工作(它不会发送数据),但设置请求标头可以解决问题。它的功能很棒,但我想了解为什么需要它才能工作。谢谢: - )

//Send the proper header information along with the request 
http.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
http.setRequestHeader("Content-length", params.length); 
http.setRequestHeader("Connection", "close"); 

javascript

function request(elm, type, url, str, fn) { 
var xhr = new XMLHttpRequest();
xhr.onreadystatechange=function()
{
    if (xhr.readyState==4 && xhr.status==200)
    {
        if (!fn) elm.innerHTML=xhr.responseText; 
        else fn(xhr);
    }
}
      xhr.open(type, url, true);
      //yay it works with this :-)
      xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      xhr.send(str);
}

var form = document.getElementById("form_login")
var btnLogin = form.getElementsByClassName("btn")[0];
addEvent(btnLogin, "click", function(e) 
{
    preventDefault(e);
    var post ="",input,inputs = form.getElementsByClassName("input");
    for (var i=0, l=inputs.length; i<l; i++) 
    {
        input = inputs[i].getElementsByTagName("input")[0];
        post += input.name + "=" + encodeURI(input.value) + "&";
    }
    post = post.substr(0,post.length-1);
    var help = form.getElementsByClassName("help")[0];
    request(help, "POST", "user/login-exe.php?dt='" + new Date() + "'", post);
});

如果它全部有效则会记录该位中的用户,但不会显示。

2 个答案:

答案 0 :(得分:3)

这不是严格要求,当请求指定$_POST的内容类型时,PHP将自动填充"application/x-www-form-urlencoded"

您仍然可以使用

访问这些值
file_get_contents("php://input");

事实上,任何服务器都应该允许您访问原始请求正文。

其他标题没有做任何事情,浏览器不允许您按照指定更改它们。如果您能够更改它们,您可能每次报告错误的Content-Length。因为.length计算UTF-16代码单元,其中Content-Length必须以字节为单位。

参考:http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader-method

  

如果header是一个不区分大小写的匹配项,则终止这些步骤   以下标题:

     
      
  • 接收字符集
  •   
  • 接受编码
  •   
  • 访问控制请求报头
  •   
  • 访问控制请求-方法
  •   
  • 连接
  •   
  • 内容 - 长度
  •   
  • 曲奇
  •   
  • COOKIE2
  •   
  • 内容传输编码
  •   
  • 日期
  •   
  • 期望
  •   
  • 主机
  •   
  • 保持活动
  •   
  • 来源
  •   
  • Referer的
  •   
  • TE
  •   
  • 拖车
  •   
  • 传送编码
  •   
  • 升级
  •   
  • 的User-Agent
  •   
  •   

答案 1 :(得分:0)

1。)&#34;内容类型&#34; <form>的标头:指定在将表单数据提交到服务器时对表单数据集进行编码的content-type

application / x-www-form-urlencoded:表示将表单的数据编码为 a。)控件名称和值按它们出现的顺序列出;控制名称由&#39; =&#39;分隔出来。控件名称和值由&#39;&amp;&#39;分隔。 b)控制名称和值被转义。空格字符替换为&#39; +&#39;和RFC1738中描述的其他保留字符进行转义。

2)&#34;内容长度&#34; :此标头以十进制八位字节表示邮件正文的大小 - What's the "Content-Length" field in HTTP header?

3)连接:连接状态。

我不这么认为设置&#34; Connection&#34;是required