HTTP 互联网性能提升: 提升硬件和软件 通过协议的支撑来进行交流 资源子网 : 解决双方如何进行数据交换, 对数据格式进行描述, 交换方式的描述 通信子网 : 数据的通用传输模式 Serve : listen Client : 随时开启随机端口对Serve进行访问 传输层只能表示进程地址(端口) —> 源主机地址到目标主机地址(TCP/IP) —> 源主机的MAC与网关的MAC进行通信—>封装数据包 —-> 网络传输 端口 : 0-1023 (永久分配给应用程序使用) 仅管理员有权限使用 端口 : 1024 – 41951 注册端口, 可能被人为注册, 不严格要求, 端口 : 41952 – 65535 供客户端使用的随机端口 , 称为动态端口或私有端口 由 /proc/sys/ipv4/ip_local_port_range进行定义 裸套接字 : 由应用层直接发往网络层的 BSD Socket API : SOCK_STREAM, SOCK_DGRAM, SOCK_RAW 地址格式 : IPv4 : AF_INET ipv4的互联网地址 IPv6 : AF_INET6 Unix_Sock : AF_UNIX 使用文件进行通信(客户端与服务端在同一台主机上通信, 只封装应用层首部 , 存入内存中, 读取通过文件IO来进行通信) 主控进程架构 : 负责接收用户请求, 有请求后生成子进程处理用户请求, 完成后销毁子进程. 补充 : 调优 修改用户同时能打开的文件数量(提高网站并发吞吐量) 内核空间不产生生产力, 用户空间的进程运行用户生产力程序, 提高生产力的对策就是提高CPU在用户空间的所用时间. http 协议 : 超文本传输协议(设计之初只是用来传输字符) MINE : 多用途邮件扩展(提升了Http的传输功能, 能传输图片等多媒体格式的文件, 服务器发送的数据要主动通过MINE类型来告知客户端) 条件式请求机制 : 根据时间戳进行数据请求 html : 标签化的语言 ( 都能被http协议进行传递 ) http的实现 : 通信模型 : 请求和响应 http 处理过程 : 1. 建立或处理请求 2. 接收请求 3. 解析请求, 处理请求 4. 加载用户请求的资源 5. 构建响应报文 6. 发送响应报文 7. 记录访问于日志中 web 资源 : URL : 统一资源定位符; scheme://host[:port]/url 绝对url 的根 要映射为服务器上对应的路径. (DocumentRoot ” “在配置文件中进行设置) PV : 页面浏览量 UV : 独立IP浏览量, 有多少个实体用户进行访问 request : 起始行 : 首部(HEADERS) : name: value response : < reason phrase > HEADERS GET , HEAD(只发响应报文首部, 判断资源是否存在) PUT POST(提交表单和数据) DELETE ( 删除远程服务器的数据 ) OPTIONS (获取支持方法的列表) TRACE (指明资源获取请求的方式 ) 响应码 1xx : 2xx : 成功响应 3xx : 重定向响应, 永久或临时 4xx : 错误响应, (客户端请求不存在资源) 5xx : 服务器错误 httpd 特性 : 高度模块化设计 : core + module DSO : 动态装载卸载模块 MPM : 多道处理模块(实现并发处理用户请求) prefork : 进程模型 , 每个进程相应一个请求 worker : 线程模型, 每个线程响应一个请求 event : 线程模型, 每个进程响应多个请求, 内部基于多个线程来实现, 基于时间流来进行响应 丰富功能 : CGI : 支持动态网站 虚拟主机 : 支持多个站点 , 基于端口和主机名 反向代理 : 支持多种协议 负载均衡 : 支持多个调度模式 安装和使用 : base : epel : 第三方rpm包打包机构( 官方维护 ) 基本法则 : 1. 不要重启系统 2. 不要重启服务 , 先离线再重启服务 3. 不要安装来历不明的程序包 4. 删除rm 命令 5. 执行命令前先进行记录, 进行检查 程序环境 : 主程序文件 : /usr/bin/httpd 模块文件 : /usr/lib64/httpd/modules/*.so 主配置文件 : /etc/httpd/conf.d/*.conf /etc/conf/httpd.conf /etc/httpd/conf.modules.d/*.conf 站点默认文档路径 : /var/www/html/ 日志文件路径 : /var/log/httpd/ access_log : 访问日志 error_log : 错误日志 Unit file : /usr/lib/systemd/system/httpd.service 自带脚本 : /usr/bin/apachectl 补充: Http报文
请求报文格式 ;
响应报文格式 :
Http都以一个起始行作为开始, 说明了
请求报文 : 要做什么
响应报文 : 发生了什么
请求行 : 包含了一个方法和一个请求的URL 响应行 : 承载了状态信息和操作产生的所有结果和数据, 包含了 [ HTTP版本, 数字状态码, 操作状态的文本形式的原因短语] 方法 : 方法用来告诉服务器要做什么常用的HTTP方法 :
GET : 从服务器获取一份文档
HEAD : 只从服务器获取文档的首部
POST : 向服务器发送要处理的数据
PUT : 将请求的主题存到服务器上
TRACE : 对报文进行追踪
OPTIONS : 决定可以在服务器上执行哪些方法
DELETE : 从服务器上删除一份文档
状态码 :
常见状态码 :
100-199 : 100-101(已定义) 信息提示
200-299 : 200-206(已定义) 成功
300-399 : 300-305(已定义) 重定向
400-499 : 400-415(已定义) 客户端错误
500-599 : 500-505(已定义) 服务端错误
原因短语 :
为状态码提供了文本形式的解释
版本号 :
以HTTP/x.y 的形式出现在请求和响应的报文中
告知对方使用何种协议进行处理
配置文件解析 :
Listen [IP:]port 修改端口需要重启服务, 在原有的基础上加监听的端口的话, 重载服务就可以了, 浏览器默认与服务端的80端口通信, 其他端口需自行指定.
KeepAlive on|off 保持连接, 保持连接不断开, 继续等待客户端请求其他资源
MaxKeepAliveRequest 10 最大保持连接数量
KeepAliveTimeout 10 保持连接超时时长(可以用ms来定义)
LoadModule mod_name mod_path 加载模块, 2.4的httpd将模块定义到了单独的配置文件中.
DirectoryIndex filename1,filename2 定义默认主页页面
DocumentRoot “/path”
ServerName www.nextkara.com