博客
关于我
Linux下以C构建WEB服务并响应XHR(XMLHttpRequest)请求
阅读量:790 次
发布时间:2023-02-02

本文共 2533 字,大约阅读时间需要 8 分钟。

网页与硬件交互通常采用CGI方式,但除了CGI外,XHR也能有效实现无表单提交的交互。这引出了一个问题:当使用XHR与WEB服务端交互时,除了CGI响应外,服务端还有其他方法可选。

一、XHR的两种请求方式

XHR的POST和GET请求方式与表单提交相似。GET请求会将数据附加在URL中,使用问号”?"分隔,并以”&”符号分隔键值对。例如:

http://example.com/form?a=1&b=2

而POST请求则通过application/x-www-form-urlencoded格式提交数据,这种方式通常用于表单提交。

二、XHR数据的处理

XHR的数据处理可以分为以下几个方面:

1.ुआ एनcerpt

一旦服务器接收到XHR请求,第一步是分析请求方法是否为GET或POST。可以通过检查HTTP请求头中的方法字段来确定。

2.XHR的文件请求处理

对于文件请求,XHR会以类似表单提交的方式发送文件内容,文件数据可以通过FormData对象来包装。服务端需要解析FormData中的数据,提取文件内容以进行处理。

3.响应数据的构建

响应数据需要以HTTP格式返回,通常返回的数据类型为text/html。HTTP响应需要包括以下几个关键部分:

  • 状态码:如200 OK
  • 内容编码类型:如text/html
  • 内容长度:以Content-Length头 FieldType指定

构建HTTP响应头的主要步骤如下:

  • 初始化HTTP头
  • 设置状态码
  • 设置内容编码类型
  • 设置内容长度
  • 添加服务器信息
  • 构建完整的HTTP响应头
  • 4.分析和处理FormData数据

    对于XHR的POST请求,服务端接收的数据是以multipart/form-data格式传输的。需要对数据进行解析,提取各个参数的值进行处理。这涉及两个主要步骤:

  • 定位multipart/form-data边界
  • 解析每个参数的键值对
  • 通过对FormData结构体的递归解析,可以逐一提取出每个字段的值。此外,还需要注意键值对的编码方式,特别是在URL编码和处理方面。

    5.响应处理逻辑

    对于不同的请求类型(GET或POST),响应逻辑有所不同:

    • 对于GET请求,需要直接从URL中提取数据并处理。
    • 对于POST请求,需要解析FormData中的数据并处理。

    三、代码示例分析

    function Request() {    var url = document.getElementById("url").value;    var data1 = document.getElementById("data1").value;    var data2 = document.getElementById("data2").value;    var method = document.getElementById("method").value;    if (method === "POST") {        var formData = new FormData();        formData.append("Data1", data1);        formData.append("Data2", data2);    } else if (method === "GET") {        var url = url + "?Data1=" + encodeURIComponent(data1) + "&Data2=" + encodeURIComponent(data2);    } else {        alert(method + "不支持");        return;    }    var xhr = new XMLHttpRequest();    xhr.onreadystatechange = function() {        if (xhr.readyState === 4) {            if (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) {                callback(xhr.responseText);            } else {                alert(xhr.responseText);            }        }    };    xhr.open(method, url, true);    xhr.send(formData ? formData : null);}

    上述代码实现了对FormData数据的发送,适用于两种请求方式。这段代码的核心部分是xhr.send(),其中传递的是FormData对象或null,根据请求方法决定发送方式。

    四、服务器端响应实现

  • 接收请求:使用套接字监听端口,接收客户端的HTTP请求。
  • 判断请求方法:检查请求头中的Method 字段,确认为GET或POST。
  • 数据解析
    • 对于GET请求,从URL中提取数据。
    • 对于POST请求,解析multipart/form-data中的数据。
  • 生成响应:根据解析结果,构造HTTP响应。
  • 发送响应:将构建好的HTTP响应发送回客户端。
  • 五、实施思路总结

    在实现上,可以将数据处理分为以下几个步骤:

  • 解析请求方法:根据HTTP请求头确定请求方式。
  • 解析FormData数据
    • 获取数据边界
    • 解析数据块
    • 提取键值对
  • 构建HTTP响应头
    • 设置状态码
    • 设置内容编码类型
    • 设置内容长度
    • 添加服务器信息
  • 发送反馈数据:将处理结果通过HTTP响应返回给客户端。
  • 在实际实现中,需要注意以下几点:

    • 数据解析的正确性:确保能够准确读取和解析发送的数据。
    • 边界处理的严谨性:避免边界错误对数据解析造成影响。
    • 异常处理:考虑异常情况如连接失效、数据解析错误等,并做好合理处理。

    最终,通过上述方法,可以有效的实现通过XHR实现Web与硬件的交互,不再受限于传统的CGI方式。

    转载地址:http://abzfk.baihongyu.com/

    你可能感兴趣的文章
    Linux 最常用命令(简单易学,但能解决 95% 以上的问题)
    查看>>
    linux 服务 指定用户,linux指定用户名自启动服务
    查看>>
    Linux 服务器上安装和使用 Redis,只需这 4 步!
    查看>>
    Linux 服务器启动流程详解
    查看>>
    linux 服务器性能监控(一)
    查看>>
    Linux 权限管理基本命令
    查看>>
    Linux 查找搜索命令
    查看>>
    linux 查看 mongodb 连接数
    查看>>
    linux 查看文件大小及内容
    查看>>
    Linux 查看目录大小
    查看>>
    linux 根目录扩容
    查看>>
    linux 添加本地yum源
    查看>>
    linux 源码搭建lnmp_Linux源码安装lnmp
    查看>>
    Linux 环境下将 ASM 磁盘映射到物理磁盘的完整指南
    查看>>
    Linux 的 cat 命令居然有那么多门道,涨知识了!
    查看>>
    Linux 的NFS服务的配置
    查看>>
    linux 的sh脚本中的-p、2>&1 &、$!、[]、-f、grep、awk、-z 相关的操作
    查看>>
    linux 的vi vim 的常用的基本命令
    查看>>
    Linux 的性能调优的思路
    查看>>
    Linux 的文本搜索命令 grep
    查看>>