- http请求主要是客户端B/S都是http协议,一种数据包格式 服务器端做出响应
get请求不用提交数据,post需要
- 请求行分为三部分
请求方式 get是静态资源请求,这个刚代表资源目录,随便那个目录,而不是服务器的根目录 第三个是协议版本,现在一般都是1.1版本 看不见的?R/n一定要注意
- get请求 携带动态数据的方式
不会出现在数据部分,而是求晴天的第二部分,请求目录结束之后,问号开始,取地址符分割的键值对,请求栏也有缓冲区,大概是8k超过8K就后面的没了
- 怎么知道请求行解析完了嗎 /r/n 怎么知道请求头键值对 冒号加空格 空行的作用
- 四种传输方式
文件描述分割用封号,描述完有\r\n 分界线号码是随机生成 分界线之间是数据块
- 服务器响应格式
空行怎么加\r\n 格式是必须有的 utf-8支持中文用封号隔开 200状态码 成功! 其他可加可不加
- 状态码
503 一会再来试一试 500比较宽泛,我也不知道 301 302 临时 永久重定向 映射 403不搭理你
- 边缘非阻塞 检测到只通知一次 那么就需要把所有的消息都检测出来
处理get请求 一个buffer 缓冲区的写事件对程序员没有用 因为一检测都是缓冲区可写
- buffe不够大也没关系 后面的数据咱不要了
只有请求行最有用 为了避免数据覆盖,需要一个临时的复制进去,后面
- 如何判断是读取失败还是数据读完了 因为是非阻塞的都是返回-1 如何判断
Linux系统函数会提供一个全局变量errornumber,通过error值确定 erron.h
- 字符串匹配
百分号就是占位符 后面词的占位符
- 处理请求行代码
比较不区分带小写的在头文件 strings里
- 修改工作路径
chdir 将服务器工作路径切换到请求的路径,以操作这里面的资源
- 如何将目录中的文件发送给客户端 很简单首先要发文件名其次是文件内容所以需要文件描述符
文件传输是TCP 两段建立连接后就可以流失发送,不在乎是不是一整块 一个字节还是一个G
- 如何打开文件 open函数指出文件名和打开方式
采用一种严苛的条件 断言 头文件
read读数据 返回一个块 当块等于0就是读完了 休眠非常重要 人为的拥塞控制 有一个用户区到内核去的复制
- Linux系统文件发送
sendfile四个参数 发送的用于通信的文件描述符 2.文件系统内部打开的文件描述符 3 偏移量一般是0从头开始读 4读多少个字节一般是·读完
lseek求偏移量 第三个参数是指针null lseek的第二个参数是打开的位置 seekend的指针位置+0
- 新注释方式更好
- 发送前三部分响应头
C语言拼接字符串是sprintf
- 如何知道文件类型
一个机智的小涵书,从右往左找
- 如何返回错误信息·
后面的不用执行
- 如何返回文件内容
stat系统函数获取文件属性 索引节点
- 学习资源
- 发送客户端目录
拼接字符串 ST里的长度以免文件大小过长都是长整形
- 如何添加目录跳转
加转义字符 如果是目录就跳转到子目录,所以必须加斜杠,如果是文件就不需要
- 为何会出不显示的bug sendfile号称勿复制
lsee 会把文件描述符的指针也在执行过程中移动,现在就是移动到末尾了,解决办法就是移动到头就行了。st.size 根据sendfile返回的值判断什么错误 如果是-1就是发生错误,如果是0说明0字节
- 为什么还要有发送错误 通信文件描述符和监听发送文件描述符异步
cfd非阻塞 一直在循环里面读取发送 这时候fd还没有在内核里面的缓冲区写进去
offset 偏移量可以自己修改
- 如何将字符转换过来 自己下载或者写一下具体的函数 原理在于整形和字符型的类型转换
- 多线程 监听线程只有一个 连接建立可以多线程 通信可以多线程
pthreadcreate创建有四个参数 分别是传出参数 就是创建的子线程的线程ID ,第二个参数null就可以,第三个创建的任务回调函数地址,第四个 函数参数只有一个就是结构体指针,封装好参数,线程ID也可以封装进里面,然后创建的时候传出就可以了