发表于: 2017-06-25 23:40:34

1 1090


get 与 post的区别?application json 与form表单的区别?


1.背景介绍

HTTP的来历:

超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基。Ted Nelson组织协调万维网协会(World Wide Web Consortium)和互联网工程工作小组(Internet Engineering Task Force )共同合作研究,最终发布了一系列的RFC,其中著名的RFC 2616定义了HTTP 1.1。

HTTP是一种基于请求响应的通信协议,客户端对服务器发出一个取得资源的请求,服务器将要求的资源响应给客户端,每次的联结只作一次请求/响应,并且响应之后就不会记得客户端的信息,更不会去维护于客户端有关的状态,基于它的这种特性,http又被称之为无状态的通信协议

URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查 ,改 ,增 ,删 4个操作。到这里,大家应该有个大概的了解了,GET一般用于获取/查询 资源信息,而POST一般用于更新 资源信息

2.知识剖析

什么是rest风格?

restful风格,就是一种面向资源服务的API设计方式,它不是规范,不是标准,它一种设计模式。说简单一点,就是它纯粹面向资源,面向服务的思想,目前J2EE6的JAX-RS就是这种rest风格实现的新技术。

资源是由URI来指定。 对资源的操作包括获取创建、修改和删除资源,这些操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法 通过操作资源的表现形式来操作资源。 资源的表现形式则是XML或者HTML,取决于读者是机器还是人,是消费web服务的客户软件还是web浏览器。当然也可以是任何其他的格式。

3.常见问题

get 与 post的区别?

4.解决方案

1.get请求

get请求,顾名思义,就是向服务器取得指定的资源,在发出get请求时必须一并告诉服务器所请求资源的URL,以及一些标头信息

2.post请求

POST请求,顾名思义,就是在请求的时候发布信息给服务器,对于大量或复杂的信息发送,基本都会采用POST来进行发送

post和get之间的差别?

1. GET请求通过URL(请求行)提交数据,在URL中可以看到所传参数。POST通过“请求体”传递数据,参数不会在url中显示
get是把参数数据队列加到提交表单的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
2. get传送的数据量较小,不能大于2KB,长度受url的长度限制,而长度又是根据特定的浏览器和服务器设置的,理论上get的长度可以无限长。 post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。 
因为get设计成传输小数据,而且最好是不修改服务器的数据,所以浏览器一般都在地址栏里面可以看到,但post一般都用来传递大数据,或比较隐私的数据,所以在地址栏看不到。
3. GET对数据进行查询,POST主要对数据进行增删改!简单说,GET是只读,POST是写。

5.编码实战

demo

6.扩展思考

application/json与form表单?

application/json 这个 Content-Type 作为响应头大家肯定不陌生。实际上, 现在越来越多的人把它作为请求头,用来告诉服务端消息主体是序列化后的 JSON 字符串。 由于 JSON 规范的流行,除了低版本 IE 之外的各大浏览器都原生支持 JSON.stringify, 服务端语言也都有处理 JSON 的函数。angular中默认的就是这个格式
    
        $('#signIn').click(
         
//点击登录按钮触发的函数:获取服务器返回的信息
         
function () {
            
$.post(
                 
'/carrots-admin-ajax/a/login', {
                     
name:$("#name").val(),
                     
pwd:$("#password").val(),
                 }
, function (value) {
                     
//回调函数
                     
var a = JSON.parse(value);
                     
if (a.code == 0) {
                         
alert(a.message)
                     
} else {
                        
 alert(a.message)
                     
}
                     
if (a.message == 'success') {
                         
$state.go('pageTab')
                     
}
                 
}
             
)    
我们在提交表单的时候,form表单参数中会有一个enctype的参数。enctype指定了HTTP请求的Content-Type。常用有两种:application/x-www-form-urlencoded和multipart/form-data。
这两种方式也是经常被互相转换的使用的,一般情况从json转换成form的情况会相对多一些。
    
      xhr = new XMLHttpRequest();
      
xhr.onreadystatechange = function () {
      
if(xhr.readyState == 4) {
          
//服务器已成功接收数据
          
if (xhr.status >= 200 && xhr.status < 300 ) {
             
console.log(xhr.responseText);
            
 var a = JSON.parse(xhr.responseText);
             
console.log(a.message);
             
$("#hint").text(a.message);
              
if(a.code==0){
                  
window.location.href = "index.html";
              
}
          
}
         
}
     
};
     
xhr.open("post","/carrots-admin-ajax/a/login",true);
     
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded;charset=UTF-8');
     
xhr.send("name="+na+"&pwd="+pw); 
    

7.参考文献

参考文献一:http请求

参考文献二:get和post的区别

参考文献三:form表单

参考文献四:码迷之原型form表单post数据的两种方式

8.更多讨论

1,到底该如何选用post和get?

2,还有其他form表单的提交方式吗?

3,如何看待post比get安全性更高呢?



返回列表 返回列表
评论

    分享到