深入理解万维网: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;
}
相关推荐
S1998_1997111609•X1 小时前
论当今社会主义与人文关怀人格思想下的恶意仿生注入污染蜜罐描述进行函数值非法侵入爬虫的咼忄乂癿〇仺⺋.
数据库·网络协议·百度·ssh·开闭原则
T畅N3 小时前
审批流设计器(前端)
前端·elementui·vue·html·流程图·js
xlq223223 小时前
50.UDP套接字
网络·网络协议·udp
qq_三哥啊3 小时前
【mitmproxy】通过 mitmproxy 的HTTP代理模式获取 OpenCode 发起的 AI API 请求的详细信息
网络·http·代理模式
ZC跨境爬虫5 小时前
跟着 MDN 学 HTML day_17:媒体与 Web Audio API 自动播放指南——策略、检测与最佳实践
前端·笔记·ui·html·音视频·媒体
wapicn995 小时前
设置好这一步,让你的SSL证书在到期前自动续期,永不过期
网络·网络协议·ssl
孙同学_6 小时前
一文带你了解:从浏览器发起HTTP请求到得到网页的整个过程
网络·网络协议·http
水云桐程序员6 小时前
前端教程官方文档|HTML、CSS、JavaScript教程官方文档
前端·javascript·css·html·学习方法
JackieDYH8 小时前
CSS Flexbox 与 Grid 的默认行为-布局的底层机制
前端·css·html
菜蒙爱学习9 小时前
【Markdown】可用的所有 HTML 标准颜色
前端·html