目 录CONTENT

文章目录

HTTP协议分析

简中仙
2023-05-25 / 0 评论 / 0 点赞 / 35 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
本文最后更新于2023-10-07,若内容或图片失效,请留言反馈。 本文如有错误或者侵权的地方,欢迎您批评指正!

HTTP协议分析

什么是http协议?

http超文本传输协议,互联网应用最为广泛的应用,通常用在web客户端使用web浏览器访问时使用的协议, HTTP协议是建立在TCP协议之上的一种应用。 常用的浏览器有火狐浏览器、windows系统自带的IE浏览器、谷歌浏览器,当我们想要访问一个网页时,在浏览器中输入对应的网址(例如访问www.baidu.com),就可以看到我们想要是访问的页面,那么这个背后到底是怎么实现的呢?作为普通的上网者不会去关注实现的过程,但是作为一个运维人员或从事互联网相关岗位的人员,需要清晰的掌握是其背后实现的过程

用户访问网站的基本流程

第一步:用户在浏览器中输入想要访问页面(例如[www.baidu.com](h
ttp://www.baidu.com))回车后系统首先会在本地查找是否有DNS缓存或者查看hosts文件中是否有记录,如果有就直接从本地获取对应的IP地址,一般用户第一次请求是没有缓存记录的,hosts文件通常用来做内部测试使用的

第二步:系统将浏览器的解析请求交给客户端本地配置的dns服务器让其解析(Ldns local dns),如果有就直接返回客户端的相应的解析记录,客户端本地缓存dns解析记录,如果没有dns 服务器将请求交给其他dns服务器

第三步:LDNS将请求交给dns服务器从(.)根开始请求对[www.baidu.com](h
ttp://www.baidu.com)域名对应的IP地址,并根据各层级分层查找,如果还没有找到,表示企业的域名管理员没有将域名配置完成,即网站域名还有配置完成,找到baidu.com对应的解析记录(例如1.1.1.1

第四步:dns服务器将对应的解析记录交给ldns服务器,ldns服务将解析缓存起来,通常缓存有TTL生存值

第五步:dns服务器返回给客户端解析记录,客户端将解析记录缓存到本地,下次访问的时候能够快速访问网页

第六步:客户端浏览器获取到了www.baidu.com对应的IP地址,接下来,浏览器会请求获得IP地址对应的服务器,网站服务器收到请求后返回相应的数据

http协议的版本

http协议www(万维网,简称web)应用 b/s结构 (browser/server) 浏览器/服务器架构

HTTP协议诞生发展到现在已经经历了若干版本,其中最主要的版本为HTTP/1.0,HTTP1.1, http1.0是第一个得到广泛使用的版本,http1.1为当前使用的主流版本

HTTP/0.9简介

已经过时了,它的组成很简单,只允许客户端发送GET这一种请求,而且还不支持请求头。由于没有协议头,造成了http 0.9协议只支持一种内容,即纯文本。不过网页仍然支持用HTML语言。仅于用户传输html文档,因为网络的快速的发展已经不是当初的看个网页就能满足日常需求,会有视频,图片等来增加情调,所以就出现了升级版本

HTTP/1.0简介

HTTP/1.0是第一个得到广泛使用的http版本,http/1.0在http/0.9的基础上增加了HTTP请求头,可支持更多的请求方法,并且能够对多媒体对象进行处理(如图像,视频)。http/1.0 规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立TCP连接,服务器完成请求处理后断开TCP连接,服务器不跟踪每个客户,也不记录过去的请求

  1. 引入了MIME((Multipurpose Internet Mail Extesions)机制:是多用途互联网邮件扩展,引入这个技术之后,http可以发送多媒体(比如视频 、音频等)信息。此机制让http不在单单只支持html格式,还可以支持其他格式来进行发送了。
  2. 引入了keep-alive机制,支持持久连接的功能(但这个keep-alive原理是在首部添加了某个字段而形成的,并非原生就支持此功能)
  3. 引入支持缓存功能

HTTP1.1简介

http/1.1的重点是修复http设计中的缺陷,从可扩展性、缓存处理、带宽优化、持久连接、host头(讲解web虚拟主机)、错误通知、消息传递、内容协商等多个方面都做了相关的改进,http/1.1是当前互联网主流的http版本

在连接方面http/1.1支持持久连接,在一个tcp连接上可以传送多个http请求和响应,减少了建立和关闭连接的消耗和时间延迟

在请求头方面,http/1.1增加了更多的请求头和响应信息,用来增强http功能,例如host主机头功能,可以让web浏览器使用主机头来明确表示要访问服务器的哪个web站点,这样就可以使用web服务器在同一个IP地址和端口号上配置多个虚拟web站点

http/1.1.的持久连接,也需要增加新的请求头来帮助实现,例如connection请求头的值为keep-alive时,表示客户端通知服务器返回本次请求结果后保持连接,connection请求头的值为close时,表示客户端通知服务器返回本次请求结果后关闭连接,http/1.1还提供了身份认证和状态管理和cache缓存机制相关的请求头和响应头等

HTML文本介绍

<html>
    <head>  设置文档头部
        <title> TITLE </title>  设置文档标题
    </head>
        <body>  网页文件内容
                <h1>H1</h1>           -->最大的标题(一号标题)
                   <p></p>            -->创建一个段落
                <h2>H2</h2>           -->二号标题
        <p><a href="admin.html">ToGoogle</a> </p> -->创建指向位于文档内部书签的链接
        </body>
</html>

Web页面资源类型

静态页面、动态页面、伪静态页面

静态页面的特点:开发者编写的是什么,他就显示的就是什么,一旦编写完成,就不会有任何改变,静态页面的维护和更新相对比较麻烦,静态页面一遍适用于更新较少的宣传展示网站.

静态页面的特征:

1) 每个页面都有一个固定url地址,且url一般以html等形式为后缀,而且地址中不含有?或&特殊符号

2) 网页内容发布到网站服务器上,无论是否有用户访问,每个页面的内容都是保存在网站服务器文件系统上,也就是说静态网页是实实在在存在服务器上的文件,每个网页都有一个独立的文件

3) 网页内容固定不变的,因此,容易被搜索引擎收录(优点)

4) 当网站信息量很大时完全依靠静态网页比较困难(缺点)

5) 网页的交互性差,在程序和功能实现方面有很大的限制(缺点)

6) 能够接受更多的并发访问量

静态页面常见的扩展名

纯文本文件 .html .htm .xml .shtml .js .css等

图片类文件或数据文档 .jpg .gif .png .bmp .txt .doc .ppt

视频类流媒体文件 .mp4 .swf .avi .wmv .flv

动态页面的特征:

1)动态网页的url后缀是.php .jsp .asp .netd并且一遍在动态网页网址中会有标志性的符号?&,在大多数情况下后端都需要数据库支持,服务器上有相应的解析程序来运行动态网页 ---引出:登录淘宝页面,说动态页面的功能

2)动态网页可以实现更多的功能(用户注册、登录、在线调查、订单管理等)

3) 动态网页并不是独立存在与服务器上的网页文件,当用户请求服务器上的动态程序时,服务器解析这些程序并可能通过读数据库来返回一个完整的网页内容,例如每个用户的登录账号密码

4)动态网页中的?在搜索引擎的收录方面存在一定的问题,搜索引擎一般不会从一个网站的数据库访问全部页面,或者处于技术方面的考虑,所有蜘蛛一般不会抓取网址中?后面的内容,因此在企业通过搜索引擎进行推广时,需要针对采用动态网页的网站做一定的技术处理(伪静态技术),以便适应搜索引擎的抓取要求如果用户请求的是动态内容,那么此时http服务器会调用后端服务器,由动态语言去处理用户的请求,如果需要请求数据的时候,会向内核申请调用,从而向磁盘 中获取用户指定的数据,通过解释器运行,运行的结果通常会生成 html 格式的文件。然后 构建成响应报文,最终发回给客户端。

http请求报文格式

请求行+请求首部+空白行+请求实体

http请求头部格式的长度是可变的

1、请求行

<method>

表示请求的方式,常见的方式有get、head、post、put等

Get:

客户端向服务器发送请求资源信息,并返回资源信息,通常是可以缓存

相当于你问别人借东西,别人需要将东西借给你,你需要得到具体的资源

Head:

跟get方法类似,但不需要服务器响应请求资源,而返回头部响应首部

相当于你问别人借东西,别人只需要告诉你有或者没有,有的话会告诉你有什么类型的,而不是将 他的东西借给你,

Post:

基于html页面将数据发送给服务器,服务器通常需要存储提交的数据,通常存放在mysql这种关系 型数据库中

比如:需要存储用户账户和密码一般会采用post方式

Put:

与get方式相反,向服务器发送资源,服务器通常需要存储此资源(存放位置通常是文件系统)

比如:使用你在博客网站也写了一篇文档,保存到服务器中就需要采用

put

与get方式相反,向服务器发送资源,服务器通常需要存储此资源(存放位置通常是文件系统)

比如:使用你在博客网站也写了一篇文档,保存到服务器中就需要采用put

DELETE请求服务器端删除URL指定的资源
MOVE请求服务器将指定的页面移至另一个网络地址
OPTIONS探测服务器端对请求的URL所支持使用的请求方法
TRACE跟一次请求中间所经历的代理服务器、防火墙或网关等。

<request-url>

请求的是那个资源,这里是相对路径,如/images /index.html等

url可以是绝对路径

url:URL(统一资源定位符),对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址,互联网上的每个文件都有一个唯一的url,它包含的信息指出文件的位置以及浏览器怎么处理它,与我们的地址原理相同

<version>

http使用的版本号 一般表示为HTTP/1.1 HTTP/1.0

2、请求首部

请求首部
Client-IP客户端IP地址
Host请求主机,可以基于域名或者IP
Referer指明了请求当前资源原始资源的url,使用referer可以防盗链
User-Agent用户代理,一般而言是浏览器
Accept首部指客户端可以接受那些编码的类型
Accept服务端能够发送的媒体的类型
Accept-Charset接受的字符集
Accept-Encoding支持压缩的压缩格式
Accept-Lanage所能接受的语言编码格式

条件式请求首部:(在http1.1才会使用到)

当发送请求时,先问问对方是否满足条件,如果满足条件就请求,不满足就不请求

跟安全相关的请求:

Authorization

Cookie

Upgrade-Insecure-Requests:升级不安全的请求 如访问百度

Cookie,有时也用其复数形式 Cookies,指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)

响应报文格式

起始行

<version>: http的版本

<status>: 状态码

<reason-phrase>: 状态码的信息

状态码说明
1XX信息性状态码,用于指定客户端相应的某些操作
2XX成功状态码,我请求一个资源,这个资源在,这就表示请求成功了
3XX重定向的状态码,有时会返回的是一个新地址,而非结果
4XX客户端类错误,你请求的资源不存在,或者你请求的时候,我们这个资源拒绝你访问,你没有权限
5XX服务器类的错误信息。向服务器发起请求,服务器发现需要运行一个脚本,从而调用解析库。如果在调用过程中出错就会出现这种情况。或者你的脚本有语法错误,也可能会导致这个问题。

常见的状态码

常用状态码说明
200服务器成功返回网页,这是成功的HTTP请求返回的标准状态码
201CREATED上传文件成功后显示
301Move Permanently,永久重定向,会返回一个新地址,并告诉我们你所请求的地址将永久挪到那个新地址去了
302Fonud,临时重定向,临时放到某个地方,会在响应报文中使用“Location:新位置”
304Not Modified,资源没有做任何修改
307Internal Redirect 内部重定向
403Forbidden请求被拒绝
404Not Found请求的资源不存在
405Method Not Allowed你使用的方法不被允许,不支持
500Internal Server Error:服务器内部错误
502Bad Gateway,代理服务器从上游服务器收到一条伪响应;上一层服务器返回了一个无法理解的报文,所以代理服务器就会表示错误
503Service Unavailable,服务暂时不可用
响应首部说明
Accept-Ranges服务器支持的请求:字节
Cache-Control缓存类型
No-cache代表不缓存过期资源,缓存会向源服务器进行有效确认
No-store代表不进行任何缓存
Proxy-revalidata表示共享缓存,如果已经本地已经有缓存,还要去检查是否有改变
No-transform不得对资源进行转换或转变
Private用缓存的内容回应先访问该资源的用户
Connection持久连接 http/1.1中采用的协议
Content-Length传输长度
Content-Type服务器发送或接受的mime类型
DATE当前的gmt时间,表示消息发出的时间,相差8个小时
Last-Modified需要和expires结合使用,用来控制请求文件的有效时间,当请求的资源子有效时间,从本地缓存中获取数据,当有效时间过期后才从服务器更新数据
Pragma表示是否缓存
Servre服务器web服务的版本
Etag在网络上有一些缓存服务器,另外,浏览器自身也有缓存功能
ExpiredWEB服务器表明该实体将在什么时候过期,对于过期了的对象,只有在 跟WEB服务器验证了其有效性后,才能用来响应客户请求

Etag:基于一个前提:图片不会经常改动,服务器在返回状态码时200同时在etag中添加一个标签,当浏览器再次访问该图片的时,就会去服务器校验这个值,如果图片没有变化的时,直接使用缓存里面的值,这样可以减轻服务器的负担,有加快了访问速度

Cookie相关的HTTP扩展头
Cookie客户端将服务器设置的Cookie返回到服务器
Set-Cookie服务器向客户端设置Cookie
Cookie2(RFC2965)客户端指示服务器支持Cookie的版本
Set-Cookie2(RFC2965)服务器向客户端设置Cookie

RFC2965 w3c定义的cookie的标准的第二个版本

一次Web资源请求的具体过程

(1)客户端在Web浏览器输入需要访问的地址

(2)Web浏览器会请求DNS服务器,查询解析到指定域名和Web服务器的地址

(3)客户端与请求的Web服务器端建立连接(TCP三次握手)

(4)TCP建立成功之后发起HTP请求

(5)服务器端收到客户端HTTP请求之后会处理该请求

(6)处理客户端指定请求的资源

(7)服务器构建响应报文响应给客户端

(8)服务器端将此信息记录到日志中

HTTP的事务

包含了一个HTP请求和对应请求的响应就叫做一个http事务,也可以理解http事务就是一个完整的HTTP请求和HTTP响应的过程。

常用的MIME类型

test/htmlhtml、htm文本类型
text/plaintext文本类型
image/jpegjpeg图像类型
image/gifgir图像类型
vedio/mpeg4音频标记类型
applicaton/vndms-powerpoint动态资源的标记方式

URI和UIRL

URI:同一资源标示符。用于标识某一互联网资源名称的字符串,通过这种标识来允许你用户对资源可通过特定的协议进行交互操作。在Web上可用的每种资源,包括HTML文档、图像、视频片段、程序等,由一个通用资源标识符进行定位。所以我们可以使用URI来标识每个资源的名称

URL:统一资源定位符。用于描述一个特定服务器上某资源的特定位置

URL的格式分为三个部分,i. scheme(方案,也叫协议):http://

ii internet地址:一般这个地址指的是服务器:www. baidu. cin:8080

iii 特定服务器上的资源:dowload/bash-4.3.1-1.rpm

CGI 通用网关接口,web服务器发现需要执行脚本了,就通过CGI协议跟后端的应用程序打交道,把用户的请求动态交给服务器,这个服务器的结果通过CGI协议返回给http服务器。

http如何并发的接收多个用户请求

http默认是工作在阻塞模型下的,默认一次只接收一个请求,处理完请求后再去接收下一个请求,所以只能一个一个来。并发响应用户请求,就需要多进程模型。web服务器自己会生成多个子进程响应用户请求,当一个请求发到web服务器,web主进程不会直接响应,而是会生成一个子进程来响应,当子进程和此用户建立连接之后,web主进程就会再等待另一个用户的请求,当再来一个请求的话,再次生成一个子进程来响应。

cookie与session的区别

cookie以文本格式存储在浏览器上,存储量有限;而会话存储在服务端,可以无限量存储多个变量并且比cookie更安全。

cookie:由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理。Cookie就是一个键值对!比如我们在网页上登录某个软件时输入用户名及密码时如果保存为cookie,则每次我们访问的时候就不需要登录网站了。也可以禁用或者编辑cookie。

session:Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。 Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。

HTTP统计术语

PV:页面浏览量

UV:独立客户浏览量

IP:独立ip浏览量

0

评论区