文章目录
-
目录
文章目录
前言
一.网址组成
二.HTTP协议解析
Http 请求报文
报文请求方法
报文头
Cache-Control 常见缓存控制行为
Http 响应报文
常见状态码
三.域名解析(DNS)
DNS域名服务器分类
递归查询
迭代查询
四.端口号
五.路径信息
六.Https协议
对称加密算法
非对称加密算法
总结
前言
我们想象一个场景,当我们在浏览器中输入网址后,网页会自动生成对应网页且打开曾经登录过的网站,发现无需重新登录直接进入首页,这是如何做到的呢?
其实,当们在浏览器输入网址后浏览器会通过网址中域名解析出的IP地址访问该网址对应的服务器;服务器收到浏览器发出的请求后,根据网址中包含的执行方法,路径信息等信息返回相应的文本信息,最终浏览器解析服务器返回的信息从而生成对应的网页!!!
一.网址组成
一个完整的网址(URL)通常包含以下部分:
- 协议(Protocol):表示访问网页时使用的通信协议,常见的有HTTP、HTTPS、FTP等。HTTP(超文本传输协议)是一种用于传输超文本的协议,是互联网上应用最为广泛的协议之一。HTTPS(安全超文本传输协议)是一种加密的HTTP协议,可以保证数据传输的安全性。FTP(文件传输协议)则是一种用于文件传输的协议。
- 域名(Domain Name):表示网站的名称,是网站在互联网上的唯一标识。域名由多个部分组成,包括主域名和子域名。例如,在www.example.com中,“www”是子域名,“example”是主域名,“.com”是顶级域名。域名也可以被视为一个IP地址的代称,目的是为了便于记忆。
- 端口号(Port):表示用于访问网站的端口号,默认为80。端口号的范围是0~65535。
- 路径(Path):表示网站上具体的文件或目录路径。路径通常由多个目录和文件名组成,用斜杠(/)分隔。例如,在www.baidu.com/news/index.html中,“news/index.html”就是路径。
- 此外,一个完整的网址还可能包含查询参数和锚点。查询参数用于向服务器发送额外的数据,通常以“?”开头,后跟参数名和参数值。锚点则用于指定网页内部的定位点,以“#”开头,用于跳转到网页的特定位置。
二.HTTP协议解析
http协议详解
HTTP协议(超文本传输协议)是用于从万维网(WWW)服务器传输超文本到本地浏览器的传输协议。它是互联网上应用最为广泛的一种网络协议。
- 工作原理:HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端(即WEB服务器)发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。
- 特点:HTTP协议具有简单、灵活的特点。它基于TCP/IP协议,是一种无连接、无状态的协议,每个请求都是独立的,不依赖于之前的请求或响应。这意味着服务器不会跟踪客户端的状态,每个请求都需要包含足够的信息以供服务器处理。此外,HTTP协议还允许传输任意类型的数据对象,具有很好的扩展性。
点击此处了解TCP协议
Http 请求报文
一个完成的Http请求报文包含以下三个部分:请求行+请求头+请求体
报文请求方法
GET : 请求指定的页面信息,并返回实体主体。
HEAD : 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
POST : 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
PUT : 从客户端向服务器传送的数据取代指定的文档的内容。
DELETE : 请求服务器删除指定的页面。
CONNECT : HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS : 允许客户端查看服务器的性能。
TRACE : 回显服务器收到的请求,主要用于测试或诊断。
PATCH : 是对 PUT 方法的补充,用来对已知资源进行局部更新 。
报文头
以下是对HTTP请求报文头的一些常见字段的解析:
-
Host:指定了请求的目标服务器的域名和端口号。这是HTTP/1.1规范中必须包含的字段,用于告诉服务器请求的目标地址。
-
User-Agent:表示发出请求的客户端类型,通常包括浏览器类型、版本、操作系统等信息。服务器可以根据User-Agent来定制响应内容,以适配不同的客户端设备。
-
Accept:告诉服务器客户端能够处理的媒体类型。这个字段可以包含多种媒体类型,并且可以通过质量因子(q-factor)来指定每种类型的优先级。
-
Accept-Language:表示客户端偏好的自然语言。这可以帮助服务器返回针对特定语言环境的本地化内容。
-
Accept-Encoding:客户端告诉服务器它支持的内容编码方式,如gzip、deflate等。服务器可以根据这个字段来决定是否对响应内容进行压缩。
-
Accept-Charset:表示客户端支持的字符集,如UTF-8、GBK等。这有助于服务器正确编码响应内容。
-
Connection:用于控制网络连接的行为。常见的值有"close"(表示请求完成后关闭连接)和"keep-alive"(表示保持连接以便复用)。
-
Cache-Control:用于控制缓存行为。客户端可以通过这个字段来指定是否缓存请求的响应,以及缓存的有效期等。
-
Authorization:当需要进行身份验证时,客户端会在这个字段中包含认证信息,如用户名和密码。
-
Referer:表示发出请求的页面的URL。这个字段通常用于跟踪用户访问来源,也可以帮助服务器生成重定向或重写的规则。
-
Content-Type:在POST或PUT请求中,用于指定请求体的媒体类型。例如,在发送表单数据时,可能会使用
application/x-www-form-urlencoded
或multipart/form-data
。 -
Content-Length:表示请求体的长度(以字节为单位)。这个字段对于服务器来说很重要,因为它知道需要读取多少数据。
-
Cookie:用于在客户端和服务器之间传递会话信息。浏览器会在每个请求中自动包含之前收到的所有Cookie。
Cache-Control 常见缓存控制行为
Public 指示响应可被任何缓存区缓存;
Private 指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效;
no-cache 指示请求或响应消息不能缓存;
no-store 用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存;
max-age 指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应;
min-fresh 指示客户机可以接收响应时间小于当前时间加上指定时间的响应;
max-stale 指示客户机可以接收超出超时期间的响应消息。如果指定 max-stale 消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。
cookie 解析
Cookie是HTTP协议的一种规范,它是服务器发送到用户浏览器并保存在本地的一小段数据。每当客户端(通常是浏览器)请求同一个网站时,它会发送之前接收并保存的Cookie信息到服务器。这些信息可以被服务器用来识别用户身份、跟踪会话状态等。
Cookie中主要包含以下内容:
-
名称(Name):Cookie的唯一标识符,用于标识和区分不同的Cookie。
-
值(Value):Cookie的具体数据,服务器发送到客户端的实际数据,可以是任何类型的数据,通常以字符串形式存储。
-
域名(Domain):指定哪些域名可以访问该Cookie。通常,Cookie只能由创建它的域名下的网页访问。
-
路径(Path):指定哪些路径或页面可以访问该Cookie。只有路径或子路径下的页面才能访问该Cookie。
-
有效期/过期时间(Expires/Max-Age):指定Cookie何时过期。如果设置了过期时间,浏览器会将Cookie保存到硬盘上,并在过期时间之前发送该Cookie给服务器。否则,Cookie只在浏览器会话期间有效,关闭浏览器后会被删除。
-
安全标志(Secure):如果设置了Secure属性,那么Cookie只能通过HTTPS协议发送,不能通过HTTP协议发送,这有助于保护Cookie的安全。
-
HttpOnly标志:如果设置了HttpOnly属性,那么Cookie将无法通过客户端脚本(如JavaScript)访问,这有助于防止跨站脚本攻击(XSS)。
Http 响应报文
一个完成的Http响应头包含以下信息:响应行+响应头+响应体
常见状态码
1xx : 信息响应类,表示接收到请求并且继续处理
2xx : 处理成功响应类,表示动作被成功接收、理解和接受
3xx : 重定向响应类,为了完成指定的动作,必须接受进一步处理
4xx : 客户端错误,客户请求包含语法错误或者是不能正确执行
5xx : 服务端错误,服务器不能正确执行一个正确的请求
100(继续):请求者应当继续提出请求。服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。
101(切换协议):请求者已要求服务器切换协议,服务器已确认并准备切换。
200(成功):服务器已成功处理了请求。通常,这表示服务器提供了请求的网页。
201(已创建):请求成功并且服务器创建了新的资源。
204(无内容):服务器成功处理了请求,但在返回的响应报文中不含实体的主体部分(没有资源可以返回)。
206(部分内容):服务器成功处理了部分GET请求。
301(永久移动):被请求的资源已永久移动到新位置。
302(临时移动):请求的资源临时从不同的URI响应请求,但请求者应继续使用原有位置来进行以后的请求。
304(未修改):自从上次请求后,请求的网页未修改过。
400(错误请求):请求有语法错误或无法理解。
401(未授权):请求要求身份验证。
403(禁止):服务器已经理解请求,但是拒绝执行它。
404(未找到):服务器无法找到被请求的页面。
500(内部服务器错误):服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。
503(服务不可用):服务器暂时处于超负载或正在进行停机维护,无法处理请求。
三.域名解析(DNS)
DNS 域名解析是将域名(如www.example.com)转换为对应的IP地址(如192.0.2.1)的过程。在这个过程中,涉及到两种主要的查询方式:递归查询和迭代查询。
DNS域名服务器分类
- 根域名服务器: 主要负责解析互联网最顶级的域名,如.com、.org、.net等。当用户输入一个网址时,当本地域名服务器向根域名服务器发出查询请求时,路由器就把查询请求报文转发到离这个DNS客户最近的一个根域名服务器,以获取目标域名对应的IP地址。根域名服务器全球共13台。
- 顶级域名服务器:负责管理在该顶级域名服务器注册的所有二级域名。例如,.com域名的顶级域名服务器负责管理所有以.com结尾的域名。也被称为权威域名服务器
- 权限域名服务器:这些域名服务器负责管理某个区的域名。每一个主机的域名都必须在某个权限域名服务器处注册登记。因此权限域名服务器知道其管辖的域名与IP地址的映射关系。另外,权限域名服务器还知道其下级域名服务器的地址。
- 本地域名服务器:。这些服务器主要服务于其所在区域内的用户,提供快速的域名解析服务。当用户在浏览器中输入一个域名时,本地域名服务器会迅速将该域名解析为相应的IP地址,从而快速地完成网页的加载。
递归查询
递归查询是客户端向DNS服务器发送一个查询请求,然后等待DNS服务器返回查询结果。如果DNS服务器本地缓存中有对应的结果,则直接返回;如果没有,它会向其他DNS服务器(如根服务器)发送查询请求,并等待这些服务器返回结果。一旦获取到结果,它会将这个结果返回给客户端,并且可能会将结果缓存起来,以便未来对同样的查询请求能够更快地响应。
迭代查询
迭代查询是客户端向DNS服务器发送一个查询请求,然后等待DNS服务器返回一个或多个可能包含答案的DNS服务器的地址。客户端接着向这些服务器发送查询请求,重复这个过程,直到找到答案或确定答案不存在。
总结:递归查询由本地域名服务器返回给主机域名对应的IP地址;迭代查询由本地服务器返回给主机一个其它可能查询到该域名的DNS服务器地址并由主机根据返回的地址自主访问。
通常采用模式:从请求主机到本地域名服务器的查询是递归查询,而其余的查询是迭代查询。
四.端口号
当一个计算机上的应用程序或服务需要与其他计算机进行通信时,它会使用一个特定的端口号作为目标端口。接收方的计算机会根据目标端口号来确定将数据包传送给哪个应用程序或服务。
五.路径信息
URL中的路径信息是指在主机名后面的部分,通常用来指定访问服务器上特定资源的路径。路径信息的作用如下:
-
标识资源位置:路径信息可以告诉服务器需要访问的资源所在的具体路径,服务器可以根据路径信息来定位资源的存储位置。
-
指定资源类型:路径信息的扩展名可以指定要访问的资源的类型,例如.html表示访问HTML文件,.jpg表示访问图片文件等。
-
支持页面跳转:路径信息可以用来实现页面之间的跳转,通过在URL中指定不同的路径信息,可以直接访问不同的页面或资源。
-
支持动态生成内容:路径信息可以用来传递参数,从而实现动态生成内容。服务器可以根据路径信息中的参数来生成不同的内容或返回不同的数据。
六.Https协议
Http协议与Https最大的区别是Http协议是明文传输,Https协议是密文传输;当明文传输的报文被拦截后极易造成信息泄露!!!
对称加密算法
对称加密算法是一种使用相同的密钥进行加解密的算法,其加密和解密过程相互对称。在对称加密算法中,消息的发送方使用密钥将明文转化为密文,而消息的接收方则使用相同的密钥将密文转化回明文。
对称加密算法的主要特点包括:
- 加密和解密使用相同的密钥,因此速度较快。
- 密钥的管理较为困难,需要确保密钥的安全性。
- 对称加密算法通常具有较高的加密强度,可以提供较高的安全性。
- 若公钥在发送图中被拦截会导致信息泄露。
非对称加密算法
非对称加密算法是一种使用不同的密钥进行加密和解密的加密算法。它使用一对密钥,包括公钥和私钥,其中公钥用于加密数据,私钥用于解密数据。
总结:为防止对称加密算法中客户端公钥在传输给服务端的过程中被窃取,通常使用非对称加密算法来加密客户端的公钥,这样即使服务端的公钥被窃取,由于没有服务端的私钥所以无法解密从而获得客户端的公钥;而客户端与服务端之间的报文则使用对称加密算法进行加密从而提高通讯效率。