web服务相关概念

从浏览器输入链接到显示网页中间过程

URL解析

域名解析(DNS查找)

建立连接

发送HTTP请求

服务器处理请求并返回响应

浏览器处理响应

显示页面

网站访问量统计的重要指标

http工作机制

一次http事务包括:

Web资源:web resource, 一个网页由多个资源(文件)构成,打开一个页面,通常会有多个资源展 示出来,但是每个资源都要单独请求。因此,一个”Web 页面”通常并不是单个资源,而是一组资源的集合

提高HTTP连接性能

http各版本特点

HTTP/0.9
HTTP/1.0
HTTP/1.1
HTTP/2
HTTP/3

队头阻塞(Head-of-Line Blocking,HOL Blocking)

队头阻塞是一种在多种网络协议中常见的问题,特别是在HTTP/1.x和HTTP/2的上下文中。这种现象发生在使用单一TCP连接传输多个请求和响应时, 如果一个数据包丢失或延迟,整个TCP连接上的后续数据传输都必须等待前面的数据包成功接收和确认,即使后续的数据包已经到达。这导致了网络利用率不高和响应时间增长。

在HTTP/1.x中

HTTP/1.1引入了管道化,理论上可以在一个TCP连接上同时发送多个请求。然而,由于HTTP/1.1的响应必须按请求顺序返回(FIFO), 一个慢响应会阻塞后面所有的响应,即使后面的响应已经准备好了。这就是HTTP/1.1中的队头阻塞

在HTTP/2中

HTTP/2引入了多路复用技术,允许在单一TCP连接上并行发送和接收多个请求和响应。虽然HTTP/2可以同时处理多个请求, 但由于它仍然依赖于单一的TCP连接,TCP层面的队头阻塞问题仍然存在。如果TCP数据包丢失,整个TCP连接的数据传输都会被阻塞,即使其他流(stream)的数据包已经到达。

HTTP/3如何解决队头阻塞

HTTP/3旨在通过使用基于UDP的QUIC协议来解决队头阻塞问题。QUIC协议为每个HTTP/3请求/响应创建独立的流,这些流相互独立,因此一个流的延迟或丢包不会影响其他流

QUIC的主要特性包括:

http请求报文结构

http响应报文结构

http 响应码分类以及常用状态码

1xx:100-101 信息提示
2xx:200-206 成功
3xx:300-307 重定向
4xx:400-415 错误类信息,客户端错误
5xx:500-505 错误类信息,服务器端错误



200: 成功,请求数据通过响应报文的entity-body部分发送;OK
301: Moved Permanently,请求的URL指向的资源已经被删除;但在响应报文中通过首部Location指明了资源现在所处的新位置
302: Moved Temporarily,响应报文Location指明资源临时新位置
304: 客户端发出了条件式请求,但服务器上的资源未曾发生改变,则通过响应此响应状态码通知客户端;Not Modified,但无需再发送原始数据即实体给客户端
307:  浏览器内部重定向,而无需再向服务器发送请求
401: 需要输入账号和密码认证方能访问资源;Unauthorized
403: 请求被禁止;Forbidden,一般是因为权限错误或主页文件不存在
404: 服务器无法找到客户端请求的资源;Not Found
405: 表明服务器禁止了使用当前 HTTP 方法的请求 ethod Not Allowed 
413: 上传的资源超过了最大限制值
499: 客户端主动断开连接。然而在实际业务开发中,当出现 HTTP 499 状态码时,大部分都是由于服务端
        请求时间过长,导致客户端等的“不耐烦”了,因此断开了连接。比如:慢SQL问题,499是客户端读超时关闭
        连接造成的,推荐从超时时间或者优化响应速度入手,web服务器发现客户端主动关闭连接后,记录到access
        日志中的。可能是客户端接收响应超时了,可以先在客户端统计下是不是这个原因,再调查为什么会导致超时
500: 服务器内部错误;Internal Server Error,比如:cgi程序没有执行权限,或连接数据库失败,rewrite死循环
502: Bad Gateway,代理服务器从后端服务器收到了一条错误响应或伪响应,如无法连接到网关;Bad 
        Gateway,比如:后端服务端口没有打开,或后端服务不可用或关机,iptable -j REJECT,确定服务器是down,相当于"确定人不存在了"
503: 服务不可用,临时服务器维护或过载,服务器无法处理请求,比如:超过连接数和连接频率
504: Gateway Timeout,网关超时,或者后端服务器无回应报文,比如:服务端口虽然打开,但服务返回结果
    时间过长,iptable -j DROP,不确定服务器down,相当于"人失踪了,不确定存在或不存在"