http协议介绍
什么是URL
通常我们在访问一个网站页面时,请求到的内容通称为资源。而资源这一概念非常宽泛,它可以是一份文档,一张图片,或所有其他你能够想到的格式。每个资源都由一个URI
来进行标识
比如:https//baidu.com/public/tt.jpg
这样的资源,我们会将其称为URL
地址
URL
简称统一资源定位符,用来唯一地标识万维网中的某一个资源。URL
由协议、主机名称、端口以及文件名几部分构成。
什么是html
html简称web page,一个完整的html页面可能会包含很多个URL
的资源。
反之我们也可以理解一个html文件是由多个不同的URL
资源拼接而成的。
什么是HTTP
HTTP(Hyper Text Transfer Protocol
中文名为超文本传输协议
是一种能够获取如HTML
这样网络资源的通讯协议。它是在Web
上进行数据交换的基础
简单理解:HTTP
协议就是将用户请求的HTML
页面从一台Web
服务器传输到客户端浏览器的一种协议。
url、html、http之间关系
一个完整的html
页面是由多个不同的url
资源组成的;而http
协议主要用来传输这种html
页面的
http工作原理
图解http工作原理
我们到底是如何获取到服务器上的页面。
抓包分析http原理
-
浏览器分析超链接中的URL,
-
dns请求:pc向DNS服务器202.103.224.68发出dns query请求,请求yulin.gov.cn的A记录
-
dns回复:dns服务器202.103.224.68回复dns response,解析出yulin.gov.cn域名对应的一条A记录
-
建立TCP连接
pc向dns解析yulin.gov.cn出的202.103.252.132地址发起tcp三次握手
-
http请求
pc向yulin.gov.cn服务器发出get请求,请求主页
-
http响应
yulin.gov.cn服务器回应http/1.1 200 OK,返回主页数据包GET /material/css/jy.css HTTP/1.1 Host: www.yulin.gov.cn Connection: keep-alive User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0 Accept: text/css,*/*;q=0.1 Referer: http://www.yulin.gov.cn/ Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6 Cookie: _trs_uv=kspf3bq5_3790_6y4u; _gscu_1512594966=69082889kev6dv37; _gscbrs_1512594966=1 HTTP/1.1 200 OK Server: nginx Date: Thu, 21 Mar 2024 07:05:00 GMT Content-Type: text/css Content-Length: 341 Last-Modified: Thu, 09 Nov 2023 08:28:21 GMT Connection: keep-alive ETag: "654c9825-155" Referrer-Policy: strict-origin-when-cross-origin Accept-Ranges: bytes
-
连接断开
完成数据交互过程,四次挥手断开连接
- 整个用户访问网站过程就是DNS-TCP-HTTP
http请求request
http
请求的一个例子
请求Method
-
客户端向服务端发送请求时,会根据不同的资源发送不同的请求方法
Method
:GET
:用于获取URI对应的资源;(比如看朋友圈)POST
:用于提交请求,可以更新或者创建资源,是非幂等的;(发朋友圈)PUT
:用于向指定的URI传送更新资源,是幂等的;(更新朋友圈)DELETE
用于向指定的URI删除资源;(比如删朋友圈)HEAD
:用于检查(仅获取Header部分的内容)
-
一般创建对象时用
post
,更新对象时用put
put
是幂等的,post
是非幂等的- 幂等:对应相同的输入,每次得到的结果都是相等的
请求Header
Accept: text/html,
# 请求的类型
Accept-Encoding: gzip, deflate, br
# 释放进行压缩
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
# 请求的语言
Cache-Control: max-age=0
# 缓存
Connection: keep-alive
# TCP长连接
Host: www.baidu.com
# 请求的域名
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0
# 请求浏览器的工具
请求Connection
Http
请求中的长连接与短连接是什么http1.0
协议使用的是短连接:建立一次tcp
的连接,发起一次http
的请求,结束,tcp
断开http1.1
协议使用的是长连接:建立一次tcp
的连接,发起多次http
的请求,结束,tcp
断开
Http响应Response
响应Header
HTTP/1.1 200 OK
# 返回服务器的http协议,状态码
Server: nginx
# 返回服务器使用的软件nginx
Date: Thu, 21 Mar 2024 08:20:03 GMT
# 返回服务器的时间
Content-Type: text/html
Connection: keep-alive
# TCP长连接
响应Status
http
响应状态码Status-Code
以3位数字组成,用来标识该请求是否成功,比如是正常还是错误等
http/1.1
中状态码可以分为五大类
状态码 | 说明 |
---|---|
1XX | 信息,服务器收到请求,需要请求者继续执行操作 |
2XX | 成功,操作被成功接收并处理 |
3XX | 重定向,需要进一步的操作以完成请求 |
4XX | 客户端错误,请求包含语法错误或无法完成请求 |
5XX | 服务器错误,服务器在处理请求的过程中发生了错误 |
响应Code
- 以下是常见状态码
状态码 | 说明 |
---|---|
200 | 表示成功,客户端成功接收到了服务端返回的数据,这是最常见的状态码 |
206 | 客户端发完请求后,服务端只是返回了部分数据,就会出现该状态码,例如当下载一个很大的文件时,在没有下载完成前就会出现该状态码 |
301 | 永久重定向(redirect)http-->https |
302 | 临时重定向(redirect) |
400 | 客户端请求语法错误,服务端无法理解 |
401 | 服务端开启了用户认证,而客户端没有提供正确的验证信息 |
403 | 服务端不允许客户端访问,或者没有找到默认返回页面(默认所有的web服务器返回的页面都是index.html,也可以调整默认返回页面app.html) |
404 | 客户端请求的资源不存在了(路径写错了;服务端真的没有) |
413 | 客户端向服务端上传一个比较大的文件,并且文件大小超过了服务端的限制1MB |
500 | 服务出现了内部错误,需要进行人为排查故障(连接数据库类服务异常,会出现500错误) |
502 | 服务器充当代理角色时,后端被代理的服务器不可用或没有正常回应 |
503 | 服务当前不可用,由于超载或系统维护,服务器暂时的无法处理客户端请求 |
504 | 服务器充当代理角色时,后端的服务端没有按时返回数据,超时了 |
留言