44、HTML与HTTP服务器交互笔记

HTML与HTTP服务器交互笔记

一、Text类型(HTML)处理

  1. Content-Type设置

    服务器通过send_head函数为HTML文件设置Content-Type: text/html;charset=utf-8,确保中文正常显示(如01.html中的"展望2026,中国房地产政策..."等中文内容)。

    代码片段:

    c 复制代码
    case FILE_HTML:
        http_cmd[2] = "Content-Type: text/html;charset=utf-8\r\n";
        break;
  2. HTML文件功能

    • 03.html:登录表单页,通过form标签提交数据到/login路径,包含用户名(username)和密码(userpass)输入框。
    • 01.html:登录成功页,包含文本、标题、列表、图片引用(1.jpg2.png)、超链接等HTML元素。
    • 02.html:跳转页,背景色为红色,可通过01.html的"go to 2"链接访问。
    • 04.html:登录失败页,显示"密码错"提示。

二、JPEG类型处理

  1. 识别与响应

    服务器通过判断URL后缀(.jpg)识别JPEG文件,设置Content-Type: image/jpeg,并发送对应文件(如01.html中引用的1.jpg)。

    代码片段:

    c 复制代码
    else if (strlen(url) > 4 && 0 == strcmp(&url[strlen(url) - 4], ".jpg"))
    {
        send_file(conn, url + 1, FILE_JPG); // url+1去除前缀"/",直接访问文件名
    }
  2. 注意事项

    • 需确保JPEG文件(如1.jpg)与服务器程序在同一目录,否则open函数会报错。
    • 服务器通过file_size函数获取文件大小,并在响应头中设置content-length,便于客户端接收完整文件。

三、短对话(单次请求-响应)

  1. 交互流程

    客户端(浏览器)与服务器的交互为"短对话"模式:

    • 客户端发送HTTP请求(如GET /login?username=zhangsan&userpass=123 HTTP/1.1)。
    • 服务器解析URL,验证参数后返回对应文件(01.html04.html)。
    • 响应完成后,服务器通过close(conn)关闭连接(Connection: keep-closed)。
  2. 代码实现

    主循环中accept接收连接后,处理请求并立即关闭连接:

    c 复制代码
    while (1)
    {
        int conn = accept(listfd, (SA)&cli, &len);
        // 处理请求(recv、解析URL、send_file)
        close(conn); // 短对话:一次请求后关闭连接
    }

四、长对话(持久连接)

  1. 当前限制

    现有代码未实现长对话,因响应头设置Connection: keep-closed,且每次请求后主动关闭连接。

  2. 实现思路

    若需支持长对话(同一连接处理多次请求),需修改:

    • 响应头设置Connection: keep-alive
    • 服务器不立即关闭conn,而是在循环中持续接收该连接的请求(直到客户端断开)。
      示例伪代码:
    c 复制代码
    // 修改send_head中的Connection
    http_cmd[4] = "Connection: keep-alive\r\n";
    
    // 处理连接时使用循环接收多次请求
    while (1) {
        int ret = recv(conn, buf, sizeof(buf), 0);
        if (ret <= 0) break;
        // 解析并处理请求...
    }
    close(conn);

五、总结

  • 服务器通过URL解析区分请求类型(HTML、JPG、PNG等),并设置正确的Content-Type
  • 短对话适用于简单请求,实现简单但效率较低;长对话需持久连接,适合多次连续请求(如页面包含多个图片资源)。
  • HTML文件通过表单、超链接等元素与服务器形成交互闭环(如登录流程)。
相关推荐
jamon_tan8 分钟前
Linux下cmake构建方法
linux
JiaWen技术圈13 分钟前
内核子系统 nf_tables 深度解析
linux·服务器·安全·运维开发
信徒_15 分钟前
负载均衡技术选型
运维·负载均衡
计算机安禾17 分钟前
【Linux从入门到精通】第32篇:Nginx入门——高性能Web服务器搭建
linux·服务器·nginx
动恰客流管家21 分钟前
动恰3DV3丨客流统计系统:旺季人手不够淡季闲人太多?客流统计帮你科学优化人力成本
大数据·运维·人工智能·3d
乐维_lwops26 分钟前
智变2026:中国IT运维管理软件行业全景洞察——从AI重塑到信创深水区
运维·人工智能
ZenosDoron27 分钟前
Linux 中,rm -r 和 -f
linux·运维·服务器
Hello.Reader31 分钟前
Ubuntu 上正确安装 Kali 虚拟机、Docker 与 kail 工具指南
linux·ubuntu·docker
WarPigs36 分钟前
Windows IIS开启和配置服务器
运维·服务器
原来是猿38 分钟前
Linux UDP Socket 编程入门:Echo Server/Client实现
linux·运维·udp