get post 区别 以及get 为啥比post要快, ajax封装,以及 serialize表单序列化,ASP.net 默认是POST HTML 默认是Get

请求方式 get、post、delete、options、put等
经常在code中出现的是get post两种
get 请求:
1、传送的数据量较小(相对于post而言)。参数要放在url中,但url长度是有限制的【不同的浏览器长度不一样】,不是无限的,所以get传送的数据量不能超过2KB。
2、安全性非常低,因为参数暴露url中,而且get请求会被浏览器缓存起来。,你懂的
3、执行效率却比post要快。因为tcp协议
4、get请求的是静态资源,则会缓存,如果是数据,则不会缓存【并不是所有浏览器都会缓存的】

post请求:
1、传送的数据量较大,一般被默认认为不受限制的,但理论上,IIS4中最大量:80KB,IIS5中:100KB
2、安全性较高,因为参数是放在请求体中的。
3、执行效率比get慢些。
4、post将参数放在header内,用户看不到这个过程,
5、post请求要加请求头一般
content-type : application/x-www-form-urlencode
6、不会被缓存、保存在服务器日志、以及浏览器浏览记录中
7.post会有浏览器提示重新提交表单的问题【用普通的http协议提交会有,ajax等没有的】,get没有。

post能发送更多的数据类型(get只能发送ASCII字符

post在真正接受数据之前会先将请求头发送给服务器进行确认,然后才真正发送数据。(小部队先探路,安全可靠,大部队在通过)
post请求过程:
1、浏览器请求tcp连接(第一次握手)
2、服务器应答进行tcp连接(第二次握手)
3、浏览器确认,并发送post请求头(第三次握手,这个报文比较小【小部队】,所以http会在此时进行第一次数据发送)
4、服务器返回100 continue 响应
4、浏览器开始发送数据
6、服务器返回200 ok 响应

get请求过程:
1、浏览器请求tcp连接(第一次握手)
2、服务器应答进行tcp连接(第二次握手)
3、浏览器确认,并发送get请求头和数据(第三次握手,这个报文比较小,所以http会在此时进行第一次数据发送)
4、服务器返回200 Ok 响应

目测get的总耗是post的2/3左右

get请求产生一个TCP数据包;post请求产生两个TCP数据包(get请求,浏览器会把http header和data一并发送出去,服务器响应200返回数据;post请求,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 返回数据)

在这里插入图片描述

function sendPost(){
  var xhr=null;
  if(window.XMLHttpRequest){
      //  IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
      xhr=new XMLHttpRequest()
  }else{
      //IE6、IE5    
      xhr=new ActiveXOject("Microsoft.XMLHTTP")
  }
  xhr.setRequestHeader('content-type','application/x-www-form-urlencoded')
  xhr.onreadstatechange=function(){
      //0:请求未初始化
      //1:请求建立
      //2:请求已接受
      //3:请求处理中
      //4:请求结束
      if(xhr.readyState==4){
          if(xhr.status==200){
              console.log(xhr.responseText)
          }else{
              console.log('请求失败')
          }
      }
  }  
// xhr.get('post','xxxxxxx?userName=Ares_Wang&address=苏州','是否异步')
 xhr.open('post','请求的url','是否异步')
 xhr.send("userName=Ares_Wang&address=苏州")
}

url 编码、解码
encodeURI('http://www.baidu.com?username=我是Ares——Wang')
decodeURI('http://www.baidu.com?username=%E6%88%91%E6%98%AFAres%E2%80%94%E2%80%94Wang')

在这里插入图片描述

http 缓存的条件
1、使用get请求
2、请求url地址固定
3、IE低版本浏览器

只有任意一条不满足 就不会产生缓存,通常采取第二个 url地址不固定 加上时间戳。

//创建XHR对象
function createXHR(){
    if(typeof XMLHttpRequest  !='undefined'){
        return new XMLHttpRequest()
    }else if(typeof ActiveXObject !='undefined'){
        return new ActiveXObject('Microsoft.XMLHTTP')
    }else{
         throw new Error('浏览器不支持创建XMLHttpRequest 对象')
    }
}
//名值对转换字符串
function params(data){
    var temp=[]
    for (var key in data) {
       temp.push(encodeURIComponent(key)+'='+encodeURIComponent(data[key]))
    }
    return temp.join('&')
}
//封装Ajax
function ajax(obj){
  const xhr=createXHR()
  obj.url=obj.url+'?timestamp='+(new Date()).getTime()
  obj.data=params(obj.data)
  if(obj.method==='get'){
    obj.url+='&'+obj.data;
  }
  if(obj.async===true){
    xhr.onreadystatechange=function(){
        if(xhr.readyState==4){
            callback()
        }
    }
  }
  xhr.open(obj.method,obj.url,obj.async)
  if(obj.method==='post'){
    xhr.setRequestHeader('Content-Type','application/x-www-from-urlencodeed')
    xhr.send(obj.data)
  }else{
    xhr.send(null)
  }
  if(obj.async===false){
    callback()
  }
  function callback(){
    if(xhr.status===200){
        obj.success(xhr.responseText) //回调传递参数
    }else{
        //alert('获取数据错误!错误代号:'+xhr.status+',错误信息'+xhr.statusText)
        obj.error('获取数据错误!错误代号:'+xhr.status+',错误信息'+xhr.statusText);
    }
  }
}
/*
 调用ajax
 ajax({
    method:'post',
    url:  'http://xxxx',
    data:{
        'name':'xxx',
        'age':20
    },
    success:functon(text){
          alert(text)
    },
    error:function(text){
        alert(text)
    },
    async:true
 })
 */

利用闭包封装在一个函数中

//创建XHR对象
// function createXHR(){
//     if(typeof XMLHttpRequest  !='undefined'){
//         return new XMLHttpRequest()
//     }else if(typeof ActiveXObject !='undefined'){
//         return new ActiveXObject('Microsoft.XMLHTTP')
//     }else{
//          throw new Error('浏览器不支持创建XMLHttpRequest 对象')
//     }
// }
//名值对转换字符串
// function params(data){
//     var temp=[]
//     for (var key in data) {
//        temp.push(encodeURIComponent(key)+'='+encodeURIComponent(data[key]))
//     }
//     return temp.join('&')
// }
//封装Ajax
function ajax(obj){
  const xhr=(
    function createXHR(){
        if(typeof XMLHttpRequest  !='undefined'){
            return new XMLHttpRequest()
        }else if(typeof ActiveXObject !='undefined'){
            return new ActiveXObject('Microsoft.XMLHTTP')
        }else{
             throw new Error('浏览器不支持创建XMLHttpRequest 对象')
        }
    }
  )()
  obj.url=obj.url+'?timestamp='+(new Date()).getTime()
  //obj.data=params(obj.data)
  obj.data=(function(data){
    var temp=[]
    for (var key in data) {
       temp.push(encodeURIComponent(key)+'='+encodeURIComponent(data[key]))
    }
    return temp.join('&')
  })(obj.data)
  if(obj.method==='get'){
    obj.url+='&'+obj.data;
  }
  if(obj.async===true){
    xhr.onreadystatechange=function(){
        if(xhr.readyState==4){
            callback()
        }
    }
  }
  xhr.open(obj.method,obj.url,obj.async)
  if(obj.method==='post'){
    xhr.setRequestHeader('Content-Type','application/x-www-from-urlencodeed')
    xhr.send(obj.data)
  }else{
    xhr.send(null)
  }
  if(obj.async===false){
    callback()
  }
  function callback(){
    if(xhr.status===200){
        obj.success(xhr.responseText) //回调传递参数
    }else{
        //alert('获取数据错误!错误代号:'+xhr.status+',错误信息'+xhr.statusText)
        obj.error('获取数据错误!错误代号:'+xhr.status+',错误信息'+xhr.statusText);
    }
  }
}
/*
 调用ajax
 ajax({
    method:'post',
    url:  'http://xxxx',
    data:{
        'name':'xxx',
        'age':20
    },
    success:functon(text){
          alert(text)
    },
    error:function(text){
        alert(text)
    },
    async:true
 })
 */

在这里插入图片描述
在这里插入图片描述
//from :from 表单
function serialize(from){
var parts=[]
for(var i=0;i<from.elements.length;i++){
var field=from.elements[i]
switch(field.type){
//可忽略控件处理
case undefined: //未定义
case ‘submit’: //提交按钮
case ‘reset’: //重置按钮
case ‘file’: //文件输出类型
case “image”: //图像形式的提交按钮
case ‘button’: //一般按钮
break;
case ‘radio’:
case ‘checkbox’:
if(!field.selected)
break;
case ‘select-one’:
case ‘select-multiple’:
for(var j=0;j<field.optipns.length;j++){
var option=field.options[j];
if(option.selected){
var optValue=‘’;
if(option.hasAttribute){
optValue=(option.hasAttribute(‘value’)?option.value:option.text);
}else{
//低版本IE需要使用特性 的specified属性,检测是否已规定某个属性
optValue=(option.attributes(‘value’).specified?option.value:option.text)
}
parts.push(field.name+‘=’+optValue)
}
}
break;
default:
parts.push(field.name+‘=’+field.value)
}
}
return parts.join(‘&’)
}

ASP.NET 的默认提交方式: POST
HTML 的默认提交方式: GET

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值