38.应用层协议HTTP(一)

HTTP协议概念和理解


HTTP(HyperText Transfer Protocol,超文本传输协议)是一个至关重要的协议。它定义了客户端(如浏览器)与服务器之间如何通信,以交换或传输超文本(如HTML文档)(应用层协议)
URL(Uniform Resource Locator,统一资源定位符)是互联网上用于标识和定位资源的标准化地址格式。
URL构成实例:
https://news.qq.com/rain/a/20250418A05TE500

  • https(协议名称)
    成熟的协议,端口号是固定的!
    https:443
    http:80
    ssh:22
    news.qq.com(域名)
  • 域名 -> IP地址 -> 直接用IP为什么不好?IP不利用人的阅读,人看不出含义
    域名有对应的域名服务器进行解析(存放域名键值对的服务器,属于基础设施),域名转化成IP的过程称为DNS(Domain Name System,域名系统是互联网的核心服务之一,用于将人类可读的域名转换为计算机可识别的IP地址,实现网络访问的"地址翻译")
  • /rain/a/20250418A05TE500(资源路径)
    你访问的资源路径 -> linux路径分隔符

HTTP协议,本质也是Socket通信->必须知道服务器IP(域名)+ 端口号(成熟协议端口号固定)
HTTP协议本质理解:
人上网的行为就两种:
1)从远端拿数据(HTTP)
2)把自己本地的数据上传给远端
HTTP -> 传送文件的 -> 短视频,视频,网页,图片,音频 -> 在没有获取资源的时候,资源存在哪里?服务器内部 -> 以什么形式存在?一个文件
HTTP角度:"资源"即文件,文件在Linux特定路径下。
http[s]:port
域名:IP地址,具有唯一性
资源路径:目标机器上唯一一个文件
http[s]:port:定位到全网唯一主机的唯一文件(超文本传输协议)

url特殊字符处理

请求的时候,url中如果有特殊字符,客户端(一般是浏览器),会自动给我们进行对特殊字符进行编码encode,浏览器urlencode,服务器urldecode。

HTTP-request结构理解

HTTP协议:结构化的,协议是通信双方约定的结构体。

不是所有的HTTP请求,都会携带数据。

三个问题:

1.http如何做到报头和有效载荷的分离?以空行为分隔符

2.http协议如何理解?特殊字符串来划分区域

3.http协议,序列化与反序列化,在哪里表现?

HTTP协议,序列化与反序列化用的是特殊字符进行子串拼接,且不依赖任何第三方库。

request结构分析

Request请求行:请求方法 URI HTTP版本

  • 请求方法类型:最常见的GET(从远端服务器获取数据),POST(向远端服务器发送数据)
  • URI:统一资源标识符(Uniform Resource Identifier),用于表示资源所在的路径。
    其中 / 代表请求的是首页
  • HTTP版本:用于服务器进行判断版本(服务器根据客户端的HTTP版本请求可以提供相应版本的服务)

Response状态行:HTTP版本 状态码 状态码描述

URI理解

请求是怎么表示自己要请求什么资源?URI表示

网页内容必须在服务器指定路径下的文件(图片,视频... css,js....)

URI内容 / 不是Linux根目录,而是web根目录 -> 资源都放在web(http)根目录下 -> http请求的本质,其实就是请求我们代码中的 ./wwwroot 目录下的特定路径下的资源。而URL中的路径,就是我们要请求的资源的路径。

URI路径转化成物理路径:

  • / ,访问的是首页:./webroot + /index.html
  • /a/b/c.html ,访问的是其他页面:./webroot + /a/b/c.html

报文完整性判断方法

tcp协议是面向字节流的,读取后,需要对报文的完整性进行判断,方法:

1)读到完整的请求报头(空行分割)

2)对报头进行反序列化,提取一个属性:Content-Length(有效载荷长度)

3)从剩余字符串中,提取Content-Length个字符。

首页结构理解

a标签是存放资源路径或者url的。点击链接,浏览器会向服务器发起http请求。

我们在浏览器端请求的时候,首页作为站点的入口,一个网站就是一颗多叉树。

点击链接的时候,浏览器会形成新的访问地址,发送二次请求 -> 我们请求的资源,都是通过http request的 URI 表示的。

code理解

HTTP Response会通过特定状态码来标识对应的情况。

相关推荐
小猪写代码4 小时前
Linux-ARM-裸机开发-开发环境搭建
linux·arm开发
小猪写代码4 小时前
Ubuntu vscode软件的安装和使用
linux·vscode·ubuntu
胡斌附体4 小时前
linux docker 数据迁移
linux·docker·存储·迁移·rsync保留权限复制
error:(4 小时前
【Linux命令从入门到精通系列指南】rm 命令详解:安全删除文件与目录的终极实战手册
linux·chrome·安全
yy_xzz4 小时前
Debian 安装 hplip 依赖冲突问题排查与解决
linux·开发语言·python
轻松Ai享生活5 小时前
详解Unix Socket,已经与TCP/UDP 的区别
linux
轻松Ai享生活5 小时前
linux日志缺失排查流程
linux
进击的_鹏5 小时前
【Linux】基础指令和基础知识点
linux·运维·服务器
望获linux5 小时前
【Linux基础知识系列:第一百三十四篇】理解Linux的进程调度策略
java·linux·运维·服务器·数据库·mysql