网页请求原理(希望能帮助到你)

目录

简介:

2.1 浏览器加载网页的过程

2.2 HTTP 基础

2.2.1 URL 简介

1.scheme

 2.host

3.port

4.path

2.2.2 HTTP 和 HTTPS

1.HTTP

2.HTTPS

2.2.3 HTTP 请求格式

1.请求行

2.请求头

2.2.4 HTTP 响应格式

1.状态行

2.响应头

3.响应正文


简介:

  •  了解并能够复述浏览器加载网页的过程
  •  熟悉 HTTP 的基本原理,能够归纳 URL 格式、HTTP 请求格式和 HTTP 响应格式
        网络爬虫请求网页的过程可以理解为用户使用浏览器加载网页的过程。这个过程其实是
Web 服务器发送请求的过程,即浏览器向 Web 服务器发送请求, Web 服务器将响应内容以
网页形式返回给浏览器。因此,了解浏览器与 Web 服务器之间的通信方式和交互过程,理解
网页的组成、结构、分类、数据格式,能加深对网络爬虫的理解。本章将针对网页请求原理
的相关知识进行讲解。

2.1 浏览器加载网页的过程

当我们在浏览器的地址栏中输入百度首页的网址,按 Enter 键后可以看到浏览器中显示了
百度首页。那么,我们在按 Enter 键之后究竟发生了哪些事情呢?
简单来说,在我们按 Enter 键后,浏览器经历了以下 4 个过程。
1 )浏览器通过域名系统( Domain Name System DNS )服务器查找百度服务器对应的
IP 地址。
2 )浏览器向 IP 地址对应的 Web 服务器发送 HTTP 请求。
3 Web 服务器接收 HTTP 请求后进行处理,向浏览器返回 HTML 页面。
4 )浏览器对 HTML 页面进行渲染并呈现给用户。
以上过程其实就是浏览器加载网页的过程,具体如图 2-1 所示。
在图 2-1 中,浏览器从 Web 服务器加载网页的过程是 HTTP 请求响应的过程。

2.2 HTTP 基础

2.2.1 URL 简介

URL Uniform Resource Locator )又称 URL 地址,表示统一资源定位符,用于指定因特
网上某个资源的位置。 URL 地址的语法格式如下。
scheme://[user]:[password]@host:[port]/path;[params]?[query]#[frag]
上述语法格式中,方括号包括的内容为可选项,关于 URL 地址的语法格式中各选项的说
明如表 2-1 所示。
           表 2-1 URL 地址的语法格式中各选项的说明

 

URL 地址中比较重要的选项为 scheme host port path ,关于这 4 个选项的介绍如下。

1.scheme

scheme 用于规定如何访问指定资源的主要标识符,它会告诉负责解析 URL 的应用程序应
该使用什么传输协议。常见的传输协议如表 2-2 所示。
                 表 2-2 常见的传输协议

 2.host

host 指存放资源的主机名或者 IP 地址。它用于标识互联网上的唯一一台计算机,保证用
户可以高效地从成千上万台联网的计算机中找到这台计算机。
IP 地址分为 IPv4 (互联网协议第 4 版)和 IPv6 (互联网协议第 6 版)。目前较通用的 IP
地址是 IPv4 ,它通常以“点分十进制”表示成“ a.b.c.d ”的形式,如 202.108.22.5 就是一个 IP
地址。不过 IP 地址不方便被人们记忆,因此人们发明了域名,并通过 DNS 服务器将域名和
IP 地址相互映射,例如 .baidu.com 就是 202.108.22.5 对应的域名。

3.port

port 用于标识在一台计算机上运行的不同程序,它与主机地址以“ : ”进行分隔。每个网
络程序都对应一个或多个特定的端口号,例如,采用 HTTP 的程序默认使用的端口号为 80
采用 HTTPS 的程序默认使用的端口号为 443

4.path

path 是由 0 个或多个“ / ”隔开的字符串,一般用于指定本次请求的资源在服务器中的位置。
一个典型的 URL 地址示例如图 2-2 所示。          

        图 2-2 URL 地址示例 

2.2.2 HTTP 和 HTTPS

用户使用浏览器访问某个网站时,浏览器会将请求发送到 Web 服务器,而 Web 服务器接
收到请求后会进行响应,并将响应结果返回浏览器。为了保证在浏览器和 Web 服务器之间传
输数据的可靠性,浏览器和 Web 服务器必须遵守一定的协议。对于网络爬虫来说,它采集的
页面通常使用的是 HTTP HTTPS 。下面分别对这两种协议进行介绍。

1.HTTP

HTTP 全称为超文本传输协议( Hyper Text Transfer Protocol ),它用于将 Web 服务器的超
文本资源传送到浏览器中。
HTTP 能够高效、准确地传送超文本资源,但浏览器与 Web 服务器的连接是一种一次性
连接,它限制每次连接只能处理一个请求。这意味着每个请求都是独立的,服务器返回本次
请求的应答后便立即关闭连接,下次请求再重新建立连接。 016 Python 网络爬虫基础教程

2.HTTPS

HTTPS 全称为超文本传输安全协议( Hypertext Transfer Protocol Secure ),该协议在 HTTP
的基础上添加了安全套接字层( Secure Socket Layer SSL ),数据在传输过程中主要通过数字
证书、加密算法、非对称密钥等技术完成互联网数据传输加密,实现互联网传输安全保护。

2.2.3 HTTP 请求格式

浏览器向 Web 服务器发送的信息是一个 HTTP 请求,每个 HTTP 请求由请求行、请求头、
空行以及请求数据(有的也称为请求体)这 4 个部分组成, HTTP 请求的格式如图 2-3 所示。

        图 2-3 HTTP 请求的格式

下面是通过浏览器访问百度百科页面中的词条 python 时发送的请求信息,具体如下。
1 GET /item/Python/407313 HTTP/1.1
2 Host: www.baidu.com
3 Connection: keep-alive
4 Pragma: no-cache
5 Cache-Control: no-cache
6 sec-ch-ua: " Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"
7 sec-ch-ua-mobile: ?0
8 Upgrade-Insecure-Requests: 1
9 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36......
10 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,......
11 Sec-Fetch-Site: same-origin
12 Sec-Fetch-Mode: navigate
13 Sec-Fetch-User: ?1
14 Sec-Fetch-Dest: document
15 Referer: https://baike.baidu.com/
16 Accept-Encoding: gzip, deflate, br
17 Accept-Language: zh-CN,zh;q=0.9,fr;q=0.8
18 Cookie: zhishiTopicRequestTime=1626326884529; ......
在上述的请求信息中,第 1 行代码是请求行,第 2 18 行代码是请求头信息。需要注意
的是,即使请求信息中没有请求数据,也必须在末尾加上空行。
下面分别对请求行和请求头进行介绍。

1.请求行

上述请求信息中,请求行的内容具体如下。

 GET /item/Python/407313 HTTP/1.1

在请求行中, GET 表示向服务器请求网络资源时所使用的请求方法, /item/Python/407313
表示请求的 URL 地址, HTTP/1.1 表示使用的 HTTP 版本。
常用的请求方法包括 GET POST ,其中 GET 用于请求服务器发送某个资源, POST 第 2 章 网页请求原理 017
于向服务器提交表单或上传文件,表单数据或文件的数据会包含在请求体中。请求方法 GET
POST 的区别主要体现在两个方面,具体如下。
1 )传输数据大小。 GET 请求方法通过请求参数传输数据,最多只能传输 2KB 的数据;
POST 请求方法通过实体内容传输数据,传输的数据大小没有限制。
2 )安全性。 GET 请求方法的参数信息会在 URL 中明文显示,安全性比较低; POST
求方法传递的参数会隐藏在实体内容中,用户看不到,安全性更高。
值得一提的是,不同 HTTP 版本支持的请求方法有所不同。以目前使用较为广泛的 HTTP 1.0
HTTP 1.1 为例, HTTP 1.0 完善了请求 / 响应模型,并补充定义了 GET POST HEAD 3
种请求方法; HTTP 1.1 HTTP 1.0 的基础上进行了更新,新增了 OPTIONS PUT DELETE
TRACE CONNECT 5 种请求方法。

2.请求头

请求行紧挨的部分就是若干个请求头信息,请求头主要用于说明服务器要使用的附加信
息,如客户端可以接收的 数据类型、压缩方法、客户端可以接受的字符集类型。观察上述示
例的请求头可知,每一个请求头均由一个头字段名称和一个值构成,头字段与值之间以冒号
分隔。 关于请求头中的常用字段的介绍如下。
1 Host
Host 用于指定被请求资源的服务器主机名和端口号。
2 User-Agent
User-Agent 用于标识客户端身份。通常页面会根据不同的 User-Agent 信息自动作出适配,
甚至返回不同的响应内容。
3 Accept
Accept 用于指定浏览器或其他客户端可以接受的多用途互联网邮件扩展( Multipurpose
Internet Mail Extensions MIME )文件类型。服务器可以根据该字段判断并返回适当的文件格式。
4 Referer
Referer 用于标识当前请求页面的来源页面地址,即表示当前页面是通过此来源页面里的
链接进入的。
5 Accept-Charset
Accept-Charset 用于指定浏览器可以接受的字符集类型。早期版本的 HTTP 1.1 规定了一
个默认的字符集( ISO-8859-1 ),目前每一种内容类型都有自己的默认字符集。
6 Cookie
Cookie 是在浏览器中寄存的小型数据体,它可以记载和服务器相关的用户信息,也可以
用来实现模拟登录。
7 Content-Type
Content-Type 用于指出实体内容的 MIME 文件类型,例如, text/html 代表 HTML 格式,
image/gif 代表 GIF 图片, application/json 代表 JSON 类型,更多文件类型可以查看 Content-Type
对照表。

2.2.4 HTTP 响应格式

Web 服务器返回给浏览器的响应信息由 4 个部分组成,分别是状态行、响应头、空行以 018 Python 网络爬虫基础教程
及响应正文。 HTTP 响应的格式如图 2-4 所示。
下面是通过浏览器访问百度百科中词条 python 时, Web 服务器返回的响应信息,具体内
容如下。
1 HTTP/1.1 200 OK
2 Connection: keep-alive
3 Content-Encoding: deflate
4 Content-Security-Policy-Report-Only: default-src https:......
5 Content-Type: text/html; charset=UTF-8
6 Date: Thu, 15 Jul 2021 06:25:42 GMT
7 Server: Apache
8 Vary: Accept-Encoding
9 Transfer-Encoding: chunked
10
11 <html>
12 <head>
13 <meta charset="UTF-8">
14 <meta http-equiv="X-UA-Compatible" content="IE=Edge" />......

上述响应信息中,第 1 行代码是状态行,第 2 9 行代码是响应头,第 10 行是空行,第
11 14 行代码是响应正文。需要注意的是,即使响应信息中没有响应正文,也必须在末尾加
上空行。
下面分别对状态行、响应头和响应正文进行介绍。

1.状态行

上述响应信息的状态行的具体内容如下。
HTTP/1.1 200 OK
在状态行中, HTTP/1.1 表示 HTTP 的版本号, 200 表示响应状态码, OK 表示响应状态码
的简短描述。
响应状态码代表服务器的响应状态,它的作用是告知浏览器请求 Web 资源的结果,如请
求成功、请求异常、服务器处理错误等。响应状态码及说明如表 2-3 所示。
              表 2-3 响应状态码及说明

2.响应头

上述响应信息中,状态行下面的部分便是若干个响应头信息。响应头的格式与请求头的
格式相同。关于响应头中的常用字段及常用值的介绍如下。
1 Cache-Control must-revalidate no-cache private
Cache-Control 表示服务器告知浏览器当前的 HTTP 响应是否可以缓存,取值为 must
revalidate 表示在一个缓存过期之后,不能直接使用这个过期的缓存,必须检验之后才能使用;
取值为 no-cache 表示浏览器可以缓存资源,每次使用缓存资源前都必须重新验证其有效性;
取值为 private 表示响应只能被单个用户缓存,不能作为共享缓存。
2 Connection keep-alive closed
Connection 表示浏览器是否使用持久 HTTP 连接,取值为 keep-alive 表示使用持久连接;
取值为 closed 表示不使用持久连接。
3 Content-Encoding gzip compress identity
Content-Encoding 表示服务器对特定媒体类型的数据进行压缩,取值为 gzip 表示采用
Lempel-Ziv 压缩算法;取值为 compress 表示采用 Lempel-Ziv-Welch 算法;取值为 identity
示数据未经压缩或修改。
4 Content-Type text/html;charset=UTF-8
Content-Type 表示服务器告知浏览器实际返回的内容的类型,取值为 text/html;charset=
UTF-8 表示服务器返回资源文件的类型为 text/html ,字符编码格式为 UTF-8

3.响应正文

响应正文是服务器返回的具体数据,常见的数据是 HTML 源代码。浏览器在接收到 HTTP
响应后,会根据响应正文的不同类型进行不同的处理。如果响应正文是 DOC 文档,那么浏览
器会借助安装在本机的 Word 程序打开这份文档;如果响应正文是 RAR 压缩文件,那么浏览
器会弹出一个下载窗口让用户下载解压软件;如果响应正文是 HTML 文档,那么浏览器会在
自身的窗口中展示该文档

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值