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).
相关推荐
摆烂工程师4 分钟前
教你如何查询 Codex 最新额度是多少,以及 ChatGPT Pro、Plus、Business 最新额度变化
前端·后端·ai编程
赵优秀一一5 分钟前
Python 工程化基础1:环境(conda)、pip、requirements.txt
linux·开发语言·python
捧月华如7 分钟前
响应式设计原理与实践:适配多端设备的前端秘籍
前端·前端框架·json
笨笨狗吞噬者9 分钟前
VSCode 插件推荐 Copy Filename Pro,快速复制文件、目录和路径的首选
前端·visual studio code
Armouy11 分钟前
Electron:核心概念、性能优化与兼容问题
前端·javascript·electron
刘~浪地球11 分钟前
数据库与缓存--MySQL 高可用架构设计
数据库·mysql·缓存
风酥糖13 分钟前
chroot的Linux服务配置-当云服务器真正用起来
linux·运维·服务器
木鱼布13 分钟前
安装arm虚机启动失败
linux·运维·arm开发
知识分享小能手14 分钟前
MongoDB入门学习教程,从入门到精通,MongoDB的了解应用程序的动态(18)
数据库·学习·mongodb
oradh15 分钟前
Oracle数据类型概述(一)
数据库·oracle·oracle基础·oracle入门基础·oracle数据类型