HTTP概述

### 1 用户访问网站流程

“`sh
输入网址:

用户在浏览器地址栏输入网站的URL(统一资源定位符)。
DNS解析:

浏览器向DNS(域名系统)服务器请求将域名解析为IP地址。
DNS服务器查询其数据库,返回与域名对应的IP地址。
建立连接:

浏览器使用DNS解析得到的IP地址,通过TCP(传输控制协议)向服务器发起连接请求。
服务器响应请求,完成TCP三次握手过程,建立连接。
发送HTTP请求:

浏览器构建HTTP(超文本传输协议)请求,发送到服务器。
请求包含请求方法(如GET或POST)、请求的资源路径、HTTP版本和可能的请求头信息。
服务器处理请求:

服务器接收到HTTP请求后,根据请求的资源路径处理请求。
如果请求的是静态资源(如HTML文件、CSS文件、图片等),服务器直接从文件系统中检索资源。
如果请求的是动态内容,服务器可能会执行服务器端脚本(如PHP、Python、Node.js等),生成响应内容。
返回响应:

服务器将处理结果(可能是HTML页面、图片、视频等)作为HTTP响应返回给浏览器。
响应包含状态码(如200表示成功)、响应头信息和响应体(实际的数据内容)。
渲染页面:

浏览器接收到服务器的响应后,开始解析HTML文档,并根据HTML、CSS和JavaScript文件渲染页面。
浏览器请求页面中引用的其他资源(如CSS、JavaScript文件、图片等),并重复上述过程以获取这些资源。
执行JavaScript:

浏览器执行页面中的JavaScript代码,这可能包括与服务器的进一步交互(如AJAX请求)。
页面交互:

用户与页面进行交互,如点击链接、填写表单等,这些操作可能会触发新的HTTP请求。
关闭连接:

对于非持久连接,每次HTTP请求/响应后,TCP连接会被关闭。
对于持久连接(如HTTP/1.1的keep-alive或HTTP/2),TCP连接可以被重用,减少了建立和关闭连接的开销。
缓存处理:

浏览器可能会缓存一些资源,以便在用户再次访问同一网站时加快加载速度。
“`

### 2 http概述

默认端口是80

HTTP超文本传输协议: 数据请求与响应.

传输:网站的数据如何传递给用户.

超文本:文本,图片,视频….

用户打开网站后:网站如何传递数据给用户.

专业名字:数据请求与响应

请求request:打开网站,访问网站.

响应response:网站显示出,返回给你想要的内容.

“`sh
[root@m01 /server/ans]# curl -v www.baidu.com
* Trying 39.156.66.18:80…
* Connected to www.baidu.com (39.156.66.18) port 80 (#0)
> GET / HTTP/1.1
> Host: www.baidu.com
> User-Agent: curl/7.71.1
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK < Accept-Ranges: bytes >大于号是请求
<小于号是响应 -L 选项可以确保 curl 能够正确地获取到最终的目标资源 用于有跳转的uri [root@m01 /server/ans]# wget --debug www.baidu.com ``` http1.0:短连接,每次请求都需要重复建立断开连接,占用服务端资源,基于tcp http1.1:加入长连接功能,80和443,基于tcp http2.0:增加并发,访问更快,基于https,tcp http3.0:基于udp,应用于流媒体, 大部分企业还在使用http1.1, 一部分使用http2.0 目前http3.0(*QUIC*) 流媒体直播在使用. ### 3 http请求 #### 1 请求报文起始行 ```sh ---request begin--- #请求开始 GET / HTTP/1.1 #请求方法、http协议版本 User-Agent: Wget/1.14 (linux-gnu) #UA头 Accept: */* # Host: www.baidu.com #请求的uri Connection: Keep-Alive #连接方式,长连接 ---request end--- ``` ![image-20250107124519966](D:\Program Files (x86)\Typora\005-nginx\image-20250107124519966.png) ![image-20250107124532202](D:\Program Files (x86)\Typora\005-nginx\image-20250107124532202.png) #### 2 常见的请求方法 | GET | 下载 | | ------ | ------------------------------------------------------------ | | POST | 上传 | | HEAD | 类似于GET,仅仅输出响应头部信息,(查看服务端信息,一般用于检查,)curl -l | | DELETE | 删除 | 资源的位置(URI): 这个资源在**网站站点目录**的哪个地方,叫什么名字. 这里面写的/lidao.mp4,斜线并非是Linux系统的根目录.这个/叫网站的站点 目录. URI(统一资源标识符) 站点目录是用于存放网站代码的地方.未来在nginx中我们可以指定与查看 ```sh [root@m01 /server/ans]# curl -I www.baidu.com HTTP/1.1 200 OK Accept-Ranges: bytes Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform Connection: keep-alive Content-Length: 277 Content-Type: text/html Date: Fri, 08 Nov 2024 02:44:04 GMT Etag: "575e1f60-115" Last-Modified: Mon, 13 Jun 2016 02:50:08 GMT Pragma: no-cache Server: bfe/1.0.8.18 [root@m01 /server/ans]# wget --method=HEAD --debug www.baidu.com 使用wget和curl发出HEAD请求方法,查看服务端信息,服务端是否可以访问 ``` ```sh 温馨提示: GET /lidaoav.mp4 HTTP/1.1 这里的/不是根,是网站站点目录,未来可以在web服 务中进行配置. /app/code/www/ 站点目录 访问/lidaoav.mp4 === /app/code/www/lidaoav.mp4 ``` ![image-20250107124543540](D:\Program Files (x86)\Typora\005-nginx\image-20250107124543540.png) #### 3 请求头 | 字段(关键字) | 含义 | | -------------- | ---------------------------------------------- | | User-Agent | UA头,客户端代理(用什么工具访问网站),浏览器 | | Host | Host头,表示访问的目标网站,域名或ip | | 。。。 | | #### 4 其他 空行: 分割请求头与请求报文主体 请求报文主体(body): 一般上传的时候才有 #### 5 浏览器调试查看 浏览器的调试功能DevTools F12查看网络部分即可 #### 6 小结 核心内容:请求起始行,请求方法,请求uri 核心内容:请求头中,UA头,HOST头 核心请求报文:用户目录,上传下载,资源位置、名字,自报家门(UA) ### 4 http响应 #### 1 响应报文与起始行 ![image-20250107124553870](D:\Program Files (x86)\Typora\005-nginx\image-20250107124553870.png) 协议与版本 HTTP/1.1 状态码:数字3位,用户描述服务端是否能找到或处理用户的请求 ```sh HTTP/1.1 200 OK Cache-Control: no-cache, private Content-Encoding: gzip Content-Type: application/json Date: Fri, 08 Nov 2024 03:09:20 GMT Server: Apache Tracecode: 05608097990288220170110811 Vary: Accept-Encoding Content-Length: 59 ``` #### 2 响应头 | 响应头字段 | | | -------------- | -------------------------------- | | server | 显示服务端使用的web服务器及版本 | | content | 媒体类型(文件类型) | | Content-Length | 大小 | | location | 跳转之后的新位置,跳转的时候才有 | | via/cache | 查看是否cdn | | | | #### 3 其他 空行 响应报文主体,服务端返回给客户端的数据 #### 4 http协议状态码 | 状态码 | 含义 | | ------ | ------------------ | | 2xx | 表示正常 | | 3xx | 表示需要跳转,正常 | | 4xx | 异常,客户端问题 | | 5xx | 异常,服务端问题 | 详细状态码 | 详细的状态码 | 说明 | | ----------------------------------- | ------------------------------------------------------------ | | 200ok | 访问正常 | | 301 moved Permanetly | 永久跳转 | | 302 found或foundtemporarily | 临时跳转 | | 304 not modified | 浏览器缓存 | | 401 | 认证失败 | | 403 forbidden | 权限拒绝(拒绝访问),1、权限问题 2首页文件问题 | | 404 notfound | 文件找不到,一般辅助错误日志排查 | | 405 method not allowed | 不准许的请求方法,一般服务器或安全软件限制 | | 413 request entity too large | web服务文件大小限制 | | 500 internal error | 内部错误,selinux,其他原因辅助错误日志排查 | | 502 bad gateway | 网关错误,一般发生在负载中(类似情况下),请求发送到后面,后面无人处理 | | 503 service temporarily unavailable | 服务临时不可用,一般人为设置,升级 | | 504 gateway time-out | 网关超时 | curl -Lv -L跟随跳转,遇到301/302会读取响应头中的Location头重新访问 http响应代码 [HTTP 响应状态码 - HTTP | MDN (mozilla.org)](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status) http:用户的请求与响应后格式与定义 http请求报文 请求起始行GET uri http/1.1 请求头head: User-Agent:客户端代理(浏览器) Host:域名 空行 请求报文主体(body):POST http响应报文 响应报文的起始行:http/1.1 状态码 响应头:server(web服务器) 空行 状态码与含义 ### 5 web集群-衡量系统访问量指标 概述 | 指标 | 说明 | | ---------- | --------------------------------------------- | | 并发访问量 | 同一时间内访问用户的数量,tcp已建立连接的数量 | | ip | 访问网站的公网ip | | pv | 页面访问量,page view,用户访问一次,pv+1 | | 传统网站 | 门户网站,搜索网站 | | uv | 独立访客数量,接近于用户数量 | | DAU | 每天用户活跃数量,日活 | | MAU | 月活 | | | | ### 6 常见的网站服务(web中间件) | 网站服务 | 说明 | 官网 | | --------------------------- | ----------------------------------------- | -------------------------- | | nginx | 大部分使用,异步模型(epoll) | http://nginx.org/en/docs | | tengine | 基于nginx二次开发,淘宝开源,更多内置模块 | https://tengine.taobao.ora | | openresty | 基于nginx二次开发,加强lua功能与模块 | | | apache(httpd) | 目前较少使用,select模型,同步 | | | ... | | | | 特殊环境 | | | | tomcat/jboss/jetty/weblogic | 运行java环境的,web服务 | | | php | 预习php,需要nginx(LNMP) | | | python/golang | | | | ... | | | | 国产 | | | | | | |

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注