目录
前言
当我们在浏览器中输入网址后,网页会自动生成对应网页且打开曾经登录过的网站,发现无需重新登录的直接进入首页,这是如何做到的呢?
其实,当在浏览器输入网址后浏览器会通过网址中域名解析出的IP地址访问该网址对应的服务器;服务器收到浏览器发出的请求后,根据网址中包含的执行方法,路径信息等信息返回相应的文本信息,最终浏览器解析服务器返回的信息从而生成对应的网页。
一.网址组成
一个完整的网址(URL)通常包含以下部分:
1. 协议(Protocol):表示访问网页时使用的通信协议,常见的有HTTP、HTTPS、FTP等。HTTP(超文本传输协议)是一种用于传输超文本的协议,是互联网上应用最为广泛的协议之一。HTTPS(安全超文本传输协议)是一种加密的HTTP协议,可以保证数据传输的安全性。FTP(文件传输协议)则是一种用于文件传输的协议。
2. 域名(Domain Name):表示网站的名称,是网站在互联网上的唯一标识。域名由多个部分组成,包括主域名和子域名。例如,在www.example.com中,“www”是子域名,“example”是主域名,“.com”是顶级域名。域名也可以被视为一个IP地址的代称,目的是为了便于记忆。
3. 端口号(Port):表示用于访问网站的端口号,默认为80。端口号的范围是0~65535。
4. 路径(Path):表示网站上具体的文件或目录路径。路径通常由多个目录和文件名组成,用斜杠(/)分隔。例如,在www.baidu.com/news/index.html中,“news/index.html”就是路径。
此外,一个完整的网址还可能包含查询参数和锚点。查询参数用于向服务器发送额外的数据,通常以“?”开头,后跟参数名和参数值。锚点则用于指定网页内部的定位点,以“#”开头,用于跳转到网页的特定位置。
二.HTTP协议解析
HTTP协议(超文本传输协议)是用于从万维网(WWW)服务器传输超文本到本地浏览器的传输协议。它是互联网上应用最为广泛的一种网络协议。
工作原理:HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端(即WEB服务器)发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。
特点:HTTP协议具有简单、灵活的特点。它基于TCP/IP协议,是一种无连接、无状态的协议,每个请求都是独立的,不依赖于之前的请求或响应。这意味着服务器不会跟踪客户端的状态,每个请求都需要包含足够的信息以供服务器处理。此外,HTTP协议还允许传输任意类型的数据对象,具有很好的扩展性。
HTTP 请求报文:
一个完成的Http请求报文包含以下三个部分:请求行+请求头+请求体
报文请求方法:
GET : 请求指定的页面信息,并返回实体主体。
HEAD : 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
POST : 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
PUT : 从客户端向服务器传送的数据取代指定的文档的内容。
DELETE : 请求服务器删除指定的页面。
CONNECT : HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS : 允许客户端查看服务器的性能。
TRACE : 回显服务器收到的请求,主要用于测试或诊断。
PATCH : 是对 PUT 方法的补充,用来对已知资源进行局部更新 。
报文头
以下是对HTTP请求报文头的一些常见字段的解析:
1. Host:指定了请求的目标服务器的域名和端口号。这是HTTP/1.1规范中必须包含的字段,用于告诉服务器请求的目标地址。
2. User-Agent:表示发出请求的客户端类型,通常包括浏览器类型、版本、操作系统等信息。服务器可以根据User-Agent来定制响应内容,以适配不同的客户端设备。
3. Accept:告诉服务器客户端能够处理的媒体类型。这个字段可以包含多种媒体类型,并且可以通过质量因子(q-factor)来指定每种类型的优先级。
4. Accept-Language:表示客户端偏好的自然语言。这可以帮助服务器返回针对特定语言环境的本地化内容。
5. Accept-Encoding:客户端告诉服务器它支持的内容编码方式,如gzip、deflate等。服务器可以根据这个字段来决定是否对响应内容进行压缩。
6. Accept-Charset:表示客户端支持的字符集,如UTF-8、GBK等。这有助于服务器正确编码响应内容。
7. Connection:用于控制网络连接的行为。常见的值有"close"(表示请求完成后关闭连接)和"keep-alive"(表示保持连接以便复用)。
8. Cache-Control:用于控制缓存行为。客户端可以通过这个字段来指定是否缓存请求的响应,以及缓存的有效期等。
9. Authorization:当需要进行身份验证时,客户端会在这个字段中包含认证信息,如用户名和密码。
10. Referer:表示发出请求的页面的URL。这个字段通常用于跟踪用户访问来源,也可以帮助服务器生成重定向或重写的规则。
11. Content-Type:在POST或PUT请求中,用于指定请求体的媒体类型。例如,在发送表单数据时,可能会使用application/x-www-form-urlencoded或multipart/form-data。
12. Content-Length:表示请求体的长度(以字节