http协议

简介

  1. 超文本传输协议,默认80端口,用于万维网服务器传输超文本到本地浏览器的传送协议
  2. HTTP是一个基于TCP/IP通信协议来传递数据的(HTML,图片,文件等)
  3. HTTP协议工作于C/S或B/S架构,浏览器作为HTTP客户端通过URL向HTTP服务器即web服务器发送请求,web服务器根据接受的请求,向客户端发送响应信息

    URL—统一资源标识符

  4. HTTP使用的统一资源标识符(URI)来传输数据和建立连接的

  5. URL是一种特殊的URI,名称:统一资源定位符,是互联网上用来标识某一处资源的地址

举例:
http://www.baidu.com/http/eagels.html ——->URL
80端口(http默认)
443端口(https默认)—https=http+ssl认证
http:// - 使用HTTP协议
www.baidu.com : 域名->ip[:80]->主机名
/http/:虚拟目录
eagels.html:文件资源
?<….>:参数

工作流程

针对server端来说:

  1. 接收连接请求,处理请求并建立连接
  2. 接收请求(获取url)
  3. 处理请求(认证等)
  4. 访问资源
  5. 构建响应报文
  6. 发送响应报文
  7. 记录日志

    请求报文

    request消息格式:
    请求行
    请求头部
    空行
    请求数据(主体)

请求行:URL,请求方法,远程地址,状态码,版本,referrer政策
GET /index.php HTTP/1.1 (请求方法 URL 协议/版本号)
请求头部:
accept #接收的媒体类型
accept-encoding #支持的编码方式
accept-language #支持的语言
cache-control #缓存相关
connection #保持连接
cookie字段 #做会话保持
host #请求资源的主机
referer #指明当前资源的原始URL
user-agent #用户相关信息(系统、浏览器型号)
image.png

cookie/sesion

HTTP协议为无状态协议—通过cookie和sesion做会话保持实现
cookie—客户端
键:值—>标识浏览器,缓存在本地浏览器中
sesion—服务端—一些cookie
键:值—>客户端角度发送请求报文时,缓存在服务器上,可避免本地cookie缓存过多占用过多内存
刷新页面不会丢失当前页面的数据
cookie和sesion的区别在于将cookie字段存放在本地浏览器还是服务端sesion服务器

cookie

客户端第一次发送连接请求(例如login)时cookie字段为空,认证成功建立连接后服务端返回的响应信息中包含cookie字段信息,下一次客户端使用同一个浏览器发送连接时会携带cookie字段,服务端收到后直接建立连接发送数据资源
image.png

sesion

客户端第一次发送连接请求(例如login)时cookie字段为空,服务端通过hush将用户生成的cookie字段保存在sesion数据库中,下一次客户端使用同一个浏览器发送连接时,服务端对比sesion数据库中的cookie字段,存在记录直接建立连接发送数据资源
image.png

请求方法

GET:请求指定的页面信息
HEAD:类似于GET请求,仅返回报头
POST:向指定的资源提交数据进行处理请求(例如提交表单或者上传文件)
PUT:从客户端向服务端传送数据取代指定的文档内容
DELETE:请求服务器删除指定的页面
CONNECT:预留给能够将连接改为管道方式的代理服务器
OPTIONS:允许客户端查看服务端的性能
TRACE:回显服务端收到的请求,主要用于测试或者诊断

GET和POST的区别

  1. GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如editpost.aspx?name=test&id=123456. POST方法是把提交的数据放在HTTP包的body中
  2. GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而post方法提交的数据没有限制
  3. GET方法需要使用request.querystring来取得变量的值,而post方法通过request.form来获取变量的值
  4. GET方法提交数据会带来安全问题

    响应报文

    repose消息格式:
    状态行: 协议/协议版本 状态码 状态信息
    响应报文:说明客户端使用一些附加信息
    空行
    响应数据

状态码:
1××:指示信息—表示请求已经接受,继续处理
2××:成功—表示请求已经被成功处理,理解,接收
3××:重定向—要完成请求必须进行更进一步的操作
4××:客户端错误—请求的语法有错误或者无法实现
5××:服务端错误—服务端未能实现合法请求
常见状态码:
200:OK请求已经正常处理完毕
301:请求永久重定向
302:请求临时重定向
304:请求被重定向到客户端本地缓存—浏览器缓存(图片,JS文件)
400:客户端请求存在语法错误
401:客户端请求没有经过授权
403:客户端的请求被服务器拒绝,一般为客户端没有访问权限
404:客户端请求的URL在服务端不存在
500:服务端永久错误
503:服务端发生临时错误
502:服务端内部网关错误

HTTP协议版本

HTTP/0.9:仅支持GET方法,仅能访问HTML格式的资源
HTTP/1.0:增加POST和HEAD方法,MIME支持多种数据格式,开始支持cache
HTTP/1.1(常见):支持持久连接(保持连接),一个TCP连接允许多个请求,新增PUT、PATCH、delete方法等
HTTP/2.0:性能大幅提升,新的二进制格式,多路复用,header压缩,服务端推送

Linux网络io模型

网站访问量

IP访问量
PV网页访问量
UV访客访问量

响应模型

单进程IO模型:一个进程只能按照一个顺序处理一个请求
多进程IO模型:一个父进程管理多个子进程,每个子进程处理一个请求
复用IO模型:
多线程模型:一个父进程管理多个线程,每个线程处理一个请求
事件驱动:一个父进程管理多个子进程,每个子进程处理多个请求
复用的多进程IO模型:一个父进程管理多个子进程,每个子进程管理多个线程,,每个线程处理一个请求

《图解TCP/IP》—>《TCP/IP详解 123卷》
《图解HTTP》—>《HTTP详解》
《操作系统》
《MySQL技术内幕:innodb》《高性能MySQL》
《redis运维和开发》
《Google运维揭秘》—SRE
《深入理解nginx》