HTTP和AJAX

本文详细介绍了HTTP协议,包括请求和响应的结构、状态码以及MIME类型。此外,还探讨了HTTPS的安全特性。接着,文章转向AJAX,解释了其异步更新网页内容的原理,并展示了创建和使用AJAX对象的步骤,以及如何用Promise封装AJAX请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HTTP

http应用层协议,基于tcp/ip协议。

每一个独立的文件都会发起一个独立的请求,一个html文件会在访问的时候通常会发起不止一次请求。

URI:uniform resourse identifier:统一资源标识符

URL:uniform resource location:统一资源定位符

url是uri的落地方案

http:超文本传输文件

HTTPS:安全版本的http协议,它比http多一个一层验证。需要向相关部门去申请(企业)得到一个ssl加密的文件,需要放置在www服务器的指定位置。当用户访问这个给网站时,浏览器会自动读取这个ssl文件,同时将ssl文件发送给专门的服务器进行数据比对。

http发送和接收时都会以包的形式传输数据。

请求

1、请求行:方法(post、get)、URL地址、协议版本

2、请求头:当次请求的媒体类型,及用户代理信息(浏览器信息)

3、请求体:数据(文本、二进制)

相应:

1、状态行:服务器地址、协议版本、状态码

2、响应头:响应时间、媒体类型、相应数据的详细信息

3、响应体:数据(文本、二进制)

状态码:

200:一切正常

301、304:数据未修改

400:浏览器端语法错误

401:浏览器token验证失效

404:服务器没有找到该资源、

500:服务器发生重大错误

HTTP状态码由三个十进制数组组成,第一个十进制数字定义了状态码的类型、响应分为五类:信息响应(100-199),成功响应(200-299),重定向(300-399),客户端错误(400-499)和服务器错误(500-599):

分类分类描述
1**信息,服务器收到请求,需要请求者继续执行操作
2**成功,操作被成功接收并处理
3**重定向,需要进一步的操作以完成请求
4**客户端错误,请求包含语法错误或无法完成请求
5**服务器错误,服务器在处理请求的过程中发生了错误

MIME类型

通用规范,用来表示不同的媒体类型:

常见的媒体格式类型如下:

text/html:HTML格式

text/plain:纯文本格式

text/xml:XML格式

image/gif:gif图片格式

image/jpeg:jpg图片格式

image/png:png图片格式

appiication/json:JSON数据格式

url

http网络协议

www主机名(默认是www)

XXX.com域名

:5500端口(默认是80)

/public/indexx.html 路径

?id=1&a=2参数

#daadsa 锚点名称

AJAX

AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。

AJAX 不是新的编程语言,而是一种使用现有标准的新方法。

AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。

AJAX 不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。

使用ajax创建对象

1、创建对象

const xhr = new XmlHttpRequest();

兼容低版本ie浏览器

if(window.XMLHttpRequest){
xmlhttp = new XMLHttpRequest();
}else{
xmlhttp = ActiveXobject('Microsoft.XMLHttpRequest')
}
return xmlhttp
}

2、为xhr对象附加处理函数

 xhr.onreadystatechange = function () {
      if(xhr.readyState == 4){
        if(xhr.status == 200){
          xhr.response
        }else{
          
        }
      }
    }

onreadystatechange事件,监控就绪状态的变化,会触发四次,xhr.readyState会从0-1,1-2,2-3,3-4 xhr.status表示响应数据的状态码

3、打开通道

设置Ajax请求的配置并打开通道

xhr.open('post','/api/XXX?a=1',true);

xhr.open(请求方法,url地址,是不是异步)

4、设置请求类型

  xhr.setRequestHeader('Content-Type', 'Application/x-www-form-urlencoded');
  xhr.setRequestHeader('Content-Type', 'multipart/form-data');
  xhr.setRequestHeader('Content-Type', 'text/plain');

get请求通常不需要设置

post但是发送的数据是formData数据,multer组件不允许我们设置,如果需要设置则:

  xhr.setRequestHeader('Content-Type', 'multipart/form-data');

post发送常规数据时,需要主动设置:

  xhr.setRequestHeader('Content-Type', 'Application/x-www-form-urlencoded');

//发送数据时
xhr.send("a=1&b=2")

需要发送json数据:

	xhr.setRequestHeader('Content-Type', 'application/json');
//发送数据
	xhr.send(JSON.stringify({
        a:1,
        b:2,
    }))

当我们需要发送token数据时

  xhr.setRequestHeader('Authorization', 'Bearer ' + localStorage.getItem('token'))

5、发送数据

xhr.send();

使用Promise封装ajax

function ajax(method, url, data) {
      return new Promise(function (resolve, reject) {
        const xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function () {
          if (xhr.readyState == 4) {
            if (xhr.status == 200) {
              resolve(JSON.parse(xhr.response))
            } else {
              reject({
                code: xhr.status
              })
            }
          }
        }
        method = method.toLowerCase()
        //如果是get请求,将参数拼接到url中
        if (method == 'get') {
          const arr = []
          for (let key in data) {
            arr.push(
              key + '=' + encodeURIComponent(data[key])
            )
          }
          arr.join('&')
          url += '?' + arr.join('&')
        }


        xhr.open(method, url, true);

        xhr.setRequestHeader('Authorization', 'Bearer ' + localStorage.getItem('token'))
        //如果是post请求
        if (method == 'post') {
          xhr.setRequestHeader('Content-Type', 'application/json');
          xhr.send(JSON.stringify(data))
        } else {
          xhr.send();
        }
      })
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值