Linux之应用层协议HTTP(二)

HTTP 应答服务器端要做的事

1. 解析完请求,先确定三件核心信息

  1. 状态码:200 成功、404 找不到文件、400 请求格式错、500 服务器出错等
  2. 状态描述:和状态码配对
  3. 响应体(body):要发给浏览器的内容
状态码
状态码 英文描述 中文说明 场景举例
2xx 成功类
200 OK 请求成功 正常返回网页、接口数据(你的首页 index.html)
201 Created 创建成功 POST 请求成功新建资源
202 Accepted 已接受请求,尚未处理 异步任务提交,服务器收下任务还没执行
3xx 重定向类
301 Moved Permanently 永久重定向 网站域名永久更换,浏览器会缓存新地址
302 Found 临时重定向 登录跳转、临时切换页面,不缓存
304 Not Modified 资源未修改 协商缓存,浏览器本地文件可用,不用重传资源
4xx 客户端错误(请求有问题)
400 Bad Request 错误请求 请求报文格式错误、参数非法
401 Unauthorized 未认证,需要登录 没登录就访问需要权限的接口
403 Forbidden 拒绝访问,权限不足 登录了,但没有访问这个资源的权限
404 Not Found 资源不存在 访问的文件路径找不到(你现在的 err404.html 页面)
405 Method Not Allowed 请求方法不允许 接口只支持 GET,你发了 POST
408 Request Timeout 请求超时 客户端很久没发完请求,服务器断开
5xx 服务端错误(服务器内部出错)
500 Internal Server Error 服务器内部错误 代码崩溃、空指针、逻辑异常(C++ 程序异常)
501 Not Implemented 功能未实现 服务器不支持该请求方法
502 Bad Gateway 网关错误 反向代理拿到后端无效响应
503 Service Unavailable 服务不可用 服务器过载、正在维护,暂时无法提供服务
504 Gateway Timeout 网关超时 代理服务器等待后端响应超时

2. 拼装【响应报文】

代码

build

对于应答部分

在初始化的时候给出默认值

对于状态码和状态码描述要建立映射

我们要先对发过来的请求作出解析,找到他所要请求的内容.也就是uri所对应的内容,

首先就是返回/的时候我们要对应到所在的首页

找到了文件路径和文件名称可以获得唯一确定的访问内容.接下来就是对文件进行读取

接下来拿到资源要进行判断拿到的资源到底是有没有,就可以设计相应的状态码

如果访问的资源不存在也就是404,那么也就是说名我们要对其结果返回另外一个html,这里我们选择读取的文件是特定目录下的文件,显示该网页不存在,另外在设置相应的报头属性

如果存在我们就进行正常读取返回状态码200

当状态码是3xx的时候:

3xx 代表重定向 ,服务器告诉客户端:你要找的资源不在原地址了,需要换一个 URL 重新发起请求。 浏览器收到 3xx 后,默认会自动跳转到响应头 Location 里给的新地址。

所以对于3xx我们还需要在添加一个报头也就是说明其要跳转到哪一个网页

Serialization

将得到的资源内容进行拼接

补充细节

读取的网页可能并不是纯文本的,可能还有图片视频,音乐等等

所以我们还要对文件读取进行调整,变成二进制文本的读取

其他资源可以是服务器本地也可以是来自其他网站,可以解决服务器压力很大的问题,典型的就是图床

我们来讨论下一个问题我们没有给浏览器发送我们返回的类型,为什么浏览器自己可以知道???

首先就是不一定每个浏览器都会完成,各个浏览器的功能丰富度是不一样的,作为相应我们应该是要返回,那我们怎么知道呢???

相关推荐
andxe39 分钟前
工业级 PoE 交换机选型指南:破解边缘部署四大核心难题
运维·网络·安全·光通信·交换机
LK_073 小时前
【FastAPI】基础篇 01|开始之前:API、HTTP 与 FastAPI 到底是什么
网络协议·http·fastapi
say_fall3 小时前
【Linux网络编程】计算机网络基础:局域网与广域网、OSI七层模型与TCP/IP五层模型、封装解包与MAC/IP地址、端口号与socket编程接口
linux·网络·tcp/ip·计算机网络·信息与通信
阿星_3 小时前
pydio登陆不了分析问题
网络协议·http·https
Joy T3 小时前
Gzip 压缩原理与实践:HTTP 响应压缩、性能收益与工程配置
网络·网络协议·http
叼烟扛炮4 小时前
Linux 学习笔记(五十四):内网穿透实战——用 frp 让外网访问你的私人电脑
linux·服务器·网络·笔记·学习
CodeYp20195 小时前
第3讲:网络命令
linux·网络·命令
承渊政道1 天前
Linux网络学习【Reactor反应堆模式】
linux·网络·学习·ubuntu·reactor
爱和冰阔落1 天前
【Linux网络】TCP 服务器如何并发处理多个客户端?从 fork、僵尸进程到双重 fork
linux·运维·服务器·网络
严肃小白兔1 天前
Cloudflare 更新 API Token 管理:从最小权限到自动化凭据安全
网络·安全·自动化