当前位置: 首页 > news >正文

深入理解万维网: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文档结构

<!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实现

#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请求

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;
}
http://www.xdnf.cn/news/567775.html

相关文章:

  • 电路设计基础
  • 前端JavaScript-嵌套事件
  • matlab加权核范数最小化图像去噪
  • Linux——PostgreSQL数据库日常维护
  • 25_05_19Linux实战篇、第一章_02若依前后端部署之路(前端)
  • 在 Excel xll 自动注册操作 中使用东方仙盟软件————仙盟创梦IDE
  • 代码随想录 算法训练 Day8:字符串part01
  • 关于TCP三次握手
  • 【ULR #1】打击复读 (SAM, DAG链剖分)
  • PHP学习笔记(八)
  • Linux操作系统之进程(二):进程状态
  • cocos creator使用jenkins打包微信小游戏,自动上传资源到cdn,windows版运行jenkins
  • 攻防世界-stegano
  • 物流项目第五期(运费计算实现、责任链设计模式运用)
  • TDengine 运维—容量规划
  • 学习 Android(十一)Service
  • 安卓蓝牙frameworks/base/core/java/android/bluetooth这个路径下文件的作用
  • Android 自定义SnackBar和下滑取消
  • 命令行参数和环境变量
  • 力扣热题100,力扣148.排序链表力扣.26找出字符串中第一个匹配项的下标力扣146.LRU缓存序列管理器
  • MySQL 8.0 OCP 1Z0-908 171-180题
  • Keepalived 配置深度解析及最佳实践
  • 回表是数据库概念,还是mysql的概念?
  • MyBatis 关联映射深度解析:_association_ 与 _collection_ 实战教程
  • k8s-ServiceAccount 配置
  • spring5-配外部文件-spEL-工厂bean-FactoryBean
  • 【疑难杂症】Mysql 无报错 修改配置文件后服务启动不起来 已解决|设置远程连接
  • Redis SETNX:分布式锁与原子性操作的核心
  • Docker run命令-p参数详解
  • Python打卡训练营day28-类的定义与方法