深入理解万维网:URL、HTTP与HTML

深入理解万维网:URL、HTTP与HTML

  1. 统一资源定位符(URL)

1.1 什么是URL?

统一资源定位符URL(Uniform Resource Locator)是万维网上用于标识和定位各种文档的标准方法,它使每个资源在互联网范围内具有唯一标识。

示例URL:

复制代码
https://www.makeru.com.cn:443/index.html

1.2 URL语法结构

复制代码
scheme://host.domain:port/path/filename

• scheme - 定义因特网服务类型

• host - 定义域主机(默认www)

• domain - 定义因特网域名

• port - 定义主机端口号

• path - 定义服务器路径

• filename - 定义资源名称

1.3 常见URL Scheme

Scheme 描述 用途
http 超文本传输协议 普通网页,不加密
https 安全超文本传输协议 加密的安全网页
ftp 文件传输协议 文件上传下载
file 本地文件协议 访问本地文件
  1. HTTP与HTTPS协议

2.1 HTTP协议基础

HTTP(Hypertext Transfer Protocol)是用于分布式、协作式超媒体信息系统的应用层协议。

特点:

• 基于TCP/IP通信协议

• 默认端口80

• 无状态协议

• 使用请求-响应模型

2.2 HTTPS协议

HTTPS(Hypertext Transfer Protocol Secure)是HTTP的安全版本:

• 添加SSL/TLS加密层

• 默认端口443

• 提供数据加密、完整性校验和身份验证

2.3 HTTP请求-响应流程

  1. 建立TCP连接

  2. 客户端发送HTTP请求

  3. 服务器处理请求

  4. 服务器返回HTTP响应

  5. 关闭连接(HTTP/1.1默认保持连接)

  6. HTTP消息结构

3.1 HTTP请求消息

复制代码
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html

3.2 HTTP响应消息

复制代码
HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Content-Type: text/html
Content-Length: 143

<!DOCTYPE html>
<html>
...
</html>
  1. HTTP方法
方法 描述
GET 获取资源
POST 提交数据
PUT 更新资源
DELETE 删除资源
HEAD 获取头部信息
OPTIONS 查询服务器支持的方法
  1. HTTP状态码

5.1 状态码分类

分类 描述
1xx 信息响应
2xx 成功响应
3xx 重定向
4xx 客户端错误
5xx 服务器错误

5.2 常见状态码

状态码 描述
200 请求成功
301 永久重定向
404 资源未找到
500 服务器内部错误
  1. HTML基础

6.1 HTML文档结构

html 复制代码
<!DOCTYPE html>
<html>
<head>
    <title>页面标题</title>
</head>
<body>
    <h1>我的第一个标题</h1>
    <p>我的第一个段落。</p>
</body>
</html>

6.2 常见HTML元素

<h1>-<h6>:标题

<p>:段落

<a>:超链接

<img>:图像

<div>:块级容器

<span>:行内容器

  1. 使用Socket实现HTTP通信

7.1 基础Socket实现

c 复制代码
#include <sys/socket.h>
#include <netinet/in.h>

int main() {
    // 创建套接字
    int fd = socket(AF_INET, SOCK_STREAM, 0);
    
    // 绑定地址
    struct sockaddr_in addr = {
        .sin_family = AF_INET,
        .sin_port = htons(8080),
        .sin_addr.s_addr = INADDR_ANY
    };
    bind(fd, (struct sockaddr *)&addr, sizeof(addr));
    
    // 监听并接受连接
    listen(fd, 5);
    int cfd = accept(fd, NULL, NULL);
    
    // 处理请求
    char buf[BUFSIZ];
    recv(cfd, buf, BUFSIZ, 0);
    printf("%s\n", buf);
    
    // 关闭连接
    close(cfd);
    close(fd);
    return 0;
}

7.2 处理GET请求

c 复制代码
int do_get(int fd, char *buf, size_t len) {
    char type[16], resource[16];
    sscanf(buf, "%s%s\n", type, resource);
    
    if(strncasecmp("GET", type, 3)) {
        send(fd, "HTTP/1.1 501 Not Implemented\r\n\r\n", 29, 0);
        return -1;
    }
    
    char *pathname = (strlen(resource) == 1 && resource[0] == '/') ? 
                    "index.html" : &resource[1];
    
    FILE *fp = fopen(pathname, "r");
    if(!fp) {
        send(fd, "HTTP/1.1 404 Not Found\r\n\r\n", 26, 0);
        return -1;
    }
    
    char response[BUFSIZ];
    fread(response, 1, len, fp);
    
    char header[1024];
    sprintf(header, "HTTP/1.1 200 OK\r\n"
                   "Content-Length: %ld\r\n"
                   "Content-Type: text/html\r\n\r\n", strlen(response));
    
    send(fd, header, strlen(header), 0);
    send(fd, response, strlen(response), 0);
    
    fclose(fp);
    return 0;
}
相关推荐
rockingdingo2 小时前
Codex Claude 智能体做3D/潮玩/IP设计——装上Craftsman Agent工匠智能体Skills 游泳男孩IP案例分享
网络协议·tcp/ip·3d
泡海椒2 小时前
告别手写 HTTP 模板!JQuick-Curl:直接把 curl 命令跑在 Java 中
java·网络协议·http
AI备忘录4 小时前
(十六)GRE/IPSec 隧道配置命令五厂商对照:华为 华三 锐捷 迈普 思科
运维·服务器·网络·网络协议·网络安全·华为
牛马工作号4 小时前
大二层组网技术详解:VXLAN、GRETAP 等
网络·网络协议·安全·arp·大二层网络
pullyysusie7 小时前
展厅无线按钮触控点播音视频解决方案及应用
网络协议·音视频·集成学习·智能硬件
瓦格哈儿7 小时前
内网环境也需要证书?聊聊内网 IP 证书的适用边界
网络协议·ssl
A hao7 小时前
户外LED广告牌需要什么防护等级IP级别?
大数据·网络·图像处理·人工智能·网络协议·tcp/ip·广告
发光小北9 小时前
Bronze100 系列 自研PLC你用过吗?
网络协议
Patrick_Wilson12 小时前
RPC 与 REST 的本质区别看这一篇就够了:别再只看 URL 里有没有动词
http·rpc·restful
秋田君14 小时前
QT_HTTP协议编程
qt·http·iphone