DAY 44 HTML and HTTP Server Interaction Notes

HTML and HTTP Server Interaction Notes

I. Text Type (HTML) Processing

  1. Content-Type Setting

    The server sets Content-Type: text/html;charset=utf-8 for HTML files via the send_head function to ensure proper display of Chinese characters (e.g., "Looking ahead to 2026, China's real estate policies..." in 01.html).

    Code snippet:

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

    • 03.html: Login form page, submits data to the /login path via the form tag, including username (username) and password (userpass) input fields.
    • 01.html: Login success page, containing text, headings, lists, image references (1.jpg, 2.png), hyperlinks, and other HTML elements.
    • 02.html: Redirect page with a red background, accessible via the "go to 2" link in 01.html.
    • 04.html: Login failure page, displaying a "Wrong password" prompt.

II. JPEG Type Processing

  1. Identification and Response

    The server identifies JPEG files by checking the URL suffix (.jpg), sets Content-Type: image/jpeg, and sends the corresponding file (e.g., 1.jpg referenced in 01.html).

    Code snippet:

    c 复制代码
    else if (strlen(url) > 4 && 0 == strcmp(&url[strlen(url) - 4], ".jpg"))  
    {  
        send_file(conn, url + 1, FILE_JPG); // url+1 removes the prefix "/" to directly access the filename  
    }  
  2. Notes

    • Ensure JPEG files (e.g., 1.jpg) are in the same directory as the server program; otherwise, the open function will report an error.
    • The server retrieves the file size via the file_size function and sets content-length in the response header for the client to receive the complete file.

III. Short Dialogue (Single Request-Response)

  1. Interaction Flow

    The client (browser) and server interact in a "short dialogue" mode:

    • The client sends an HTTP request (e.g., GET /login?username=zhangsan&userpass=123 HTTP/1.1).
    • The server parses the URL, verifies parameters, and returns the corresponding file (01.html or 04.html).
    • After responding, the server closes the connection via close(conn) (Connection: keep-closed).
  2. Code Implementation

    The main loop accepts connections via accept, processes the request, and immediately closes the connection:

    c 复制代码
    while (1)  
    {  
        int conn = accept(listfd, (SA)&cli, &len);  
        // Process request (recv, parse URL, send_file)  
        close(conn); // Short dialogue: close connection after one request  
    }  

IV. Long Dialogue (Persistent Connection)

  1. Current Limitations

    The existing code does not support long dialogues because the response header sets Connection: keep-closed, and the connection is actively closed after each request.

  2. Implementation Approach

    To support long dialogues (handling multiple requests on the same connection), modifications are needed:

    • Set the response header to Connection: keep-alive.
    • The server does not immediately close conn but continues to receive requests from the same connection in a loop (until the client disconnects).
      Example pseudo-code:
    c 复制代码
    // Modify Connection in send_head  
    http_cmd[4] = "Connection: keep-alive\r\n";  
    
    // Process multiple requests in a loop  
    while (1) {  
        int ret = recv(conn, buf, sizeof(buf), 0);  
        if (ret <= 0) break;  
        // Parse and process request...  
    }  
    close(conn);  

V. Summary

  • The server distinguishes request types (HTML, JPG, PNG, etc.) via URL parsing and sets the correct Content-Type.
  • Short dialogues are suitable for simple requests, easy to implement but less efficient; long dialogues require persistent connections and are ideal for multiple consecutive requests (e.g., pages with multiple image resources).
  • HTML files form an interaction loop with the server via form elements, hyperlinks, etc. (e.g., login flow).
相关推荐
小雨下雨的雨1 小时前
井字棋AI机器人实现详解 - Minimax算法实战-鸿蒙PC Electron框架完成
前端·人工智能·算法·华为·electron·鸿蒙
睡不醒男孩0308232 小时前
第二篇:深入探索开源数据库高可用:构建基于CLup的PostgreSQL生产级高可用与读写分离架构
数据库·postgresql·开源·clup
方便面不加香菜2 小时前
Linux--基础IO(一)
linux·运维·服务器
2401_868534784 小时前
NFV:将安全设备部署到虚拟机上
网络
zhengfei6114 小时前
【渗透工具】Payloader — 渗透测试辅助平台(payload一键所有)
网络·安全·web安全
Micro麦可乐4 小时前
Spring Boot 实战:从零设计一个短链系统(含完整代码与数据库设计)
数据库·spring boot·后端·哈希算法·雪花算法·短链系统
码农阿豪4 小时前
从零到一:Spring Boot快速接入金仓数据库实战
数据库·spring boot·后端
鼎讯信通4 小时前
风电光缆运维提质增效:G-4000A 光缆故障追踪仪破解风场巡检难题
运维·网络·数据库
ZC跨境爬虫5 小时前
跟着 MDN 学JavaScript day_7:数学运算与逻辑判断实战测试
开发语言·前端·javascript·学习·ecmascript
三十..5 小时前
MySQL 从入门到高可用架构实战精要
运维·数据库·mysql