2-网页请求的原理

网页请求的原理

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

1.浏览器加载网页的过程

在这里插入图片描述

(1)浏览器通过域名系统(Domain Name System,DNS)服务器查找百度服务器对应的IP地址。

(2)浏览器向IP地址对应的Web服务器发送HTTP请求。

(3)Web服务器接收HTTP请求后进行处理,向浏览器返回HTML页面。

(4)浏览器对HTML页面进行渲染呈现给用户。

2.HTTP基础

2.1URL介绍

URL(全称Uniform Resource Locator)又称URL地址,表示统一资源定位符,用于指定因特网上某个资源的位置。URL地址的语法格式如下:

scheme://[user]:[password]@host:[port]/path;[params]?[query]#[frag]

URL地址语法格式中各个选项的说明:

选项说明
scheme表示方案,用于标识采用哪种传输协议访问服务器资源
user表示用户,用于标识访问服务器资源时需要的用户名
password表示密码,用户名后面可能要包含的密码,两者之间以”:”分隔
host表示主机地址,也就是存放资源的服务器主机名或IP地址
port表示端口号,也就是存放资源的服务器监听的端口号
path用于指定本次请求资源在服务器中的位置
params表示访问资源时使用的协议参数,参数之间以“;”分隔
query表示查询字符串,用于指定查询的资源,一般使用“?”与URL的其余部分进行分隔。查询字符串没有通用格式,它通常会以”&”连接多个参数,每个参数的名称与值使用“=”连接,如https://www.baidu.com/?ie=utf-8&wd=python
frag表示片段,用于指定访问资源时某一部分资源的名称

(1)scheme选项用于规定如何访问指定资源的主要标识符,它会告诉负责解析URL的应用程序应该使用什么传输协议。

传输协议说明示例
File访问本地计算机的资源file:///Users/itcast/Desktop/basic.html
FTP文件传输协议,访问共享主机的文件资源ftp://ftp.baidu.com/movies
HTTP超文本传输协议,访问远程网络资源http://bbs.itheima.com/template/gfquan/src/logo.png
HTTPS安全的SSL加密传输协议,访问远程网络资源https://image.baidu.com/channel/wallpaper
Mailto访问电子邮件地址mailto:null@itcast.cn

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

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

(4)path是由0个或多个“/”符号隔开的字符串,一般用于指定本次请求的资源在服务器中的位置。

在这里插入图片描述

2.2.HTTP和HTTPS

对于网络爬虫来说,它采集的页面通常使用的是HTTP协议HTTPS协议

HTTP协议全称为超文本传输协议(Hyper Text Transfer Protocol),它用于将Web服务器的超文本资源传送到浏览器中。

HTTP协议能够高效、准确地传送超文本资源,但浏览器与Web服务器的连接是一种一次性连接,它限制每次连接只能处理一个请求。这意味着每个请求都是独立的,服务器返回本次请求的应答后便立即关闭连接,下次请求再重新建立连接。

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

2.3HTTP请求格式

浏览器向Web服务器发送的信息是一个HTTP请求,每个HTTP请求由请求行请求头部空行以及**请求数据(**有的也称为请求体)这4个部分组成。

在这里插入图片描述

(1)请求行的内容具体如下。

GET /item/Python/407313 HTTP/1.1

在请求行中,GET表示向服务器请求网络资源时所使用的请求方法,/item/Python/407313表示请求的URL地址,HTTP/1.1表示使用的HTTP版本

常用的请求方法包括GETPOST,其中GET用于请求服务器发送某个资源,POST用于向服务器提交表单或上传文件,表单数据或文件的数据会包含在请求体中。请求方法GET和POST的区别主要体现两个方面。

在这里插入图片描述

(2)请求头

请求行紧挨的部分就是若干个请求头信息,请求头主要用于说明服务器要使用的附加信息。

Host:用于指定被请求资源的服务器主机名和端口号。

User-Agent:用于标识客户端身份,通常页面会根据不同的User-Agent信息自动做出适配,甚至返回不同的响应内容。

Accept:用于指定浏览器或其他客户端可以接受的MIME文件类型,服务器可以根据该字段判断并返回适当的文件格式。

Referer:用于标识当前请求页面的来源页面地址,即表示当前页面是通过此来源页面里的链接进入的。

Accept-Charset:用于指定浏览器可以接受的字符集类型。

Cookie:用于在浏览器中寄存的小型数据体,它可以记载和服务器相关的用户信息,也可以用来实现模拟登录。

Content-Type:用于指出实体内容的MIME类型。

2.4HTTP响应格式

Web服务器发送给浏览器的响应信息由4个部分组成,分别是状态行、响应头、空行、以及响应正文

在这里插入图片描述

状态行的内容具体如下。

HTTP/1.1 200 OK

在状态行中,HTTP/1.1表示HTTP协议的版本号,200表示响应状态码OK表示响应状态码的简短描述

响应状态码代表服务器的响应状态,它的作用是告知浏览器请求Web资源的结果,如请求成功、请求异常、服务器处理错误等。

响应状态码说明
100~199表示服务器成功接收部分请求,要求浏览器继续提交剩余请求才能完成整个处理过程
200~299表示服务器成功接收请求并已完成整个处理过程。常见状态码为200,表示Web服务器成功处理了请求
300~399表示未完成请求,要求浏览器进一步细化请求。常见的状态码有302(表示请求的页面临时转移至新地址)、307(表示请求的资源临时从其他位置响应)和304(表示使用缓存资源)
400~499表示浏览器发送了错误的请求,常见的状态码有404(表示服务器无法找到被请求的页面)和403(表示服务器拒绝访问,权限不够)
500~599表示Web服务器出现错误,常见的状态码为500,表示本次请求未完成,原因在于服务器遇到不可预知的情况

状态行下面的部分便是若干个响应头信息,关于响应头中的常用字段以及常用值的介绍如下。

在这里插入图片描述

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

,会根据响应正文的不同类型进行不同的处理。如果响应正文是DOC文档,这时浏览器会借助安装在本机的Word程序打开这份文档;如果响应正文是RAR压缩文档,这时浏览器会弹出一个下载窗口让用户下载解压软件;如果响应正文是HTML文档,这时浏览器会在自身的窗口中展示该文档。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/866469.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言 求球反弹的距离和高度

这个程序计算一个球从 100 米高度自由落下&#xff0c;并在第 10 次落地时经过的总距离及第 10 次反弹的高度。 #include <stdio.h>int main() {int n 10;double height 100.0;double totalDistance height;for (int i 1; i < n; i) {height / 2;totalDistance …

Android Studio下载Gradle特别慢,甚至超时,失败。。。解决方法

使用Android studio下载或更新gradle时超级慢怎么办&#xff1f; 切换服务器&#xff0c;立马解决。打开gradle配置文件 修改服务器路径 distributionUrlhttps\://mirrors.cloud.tencent.com/gradle/gradle-7.3.3-bin.zip 最后&#xff0c;同步&#xff0c;下载&#xff0c;速…

数据融合工具(1)指定路径下同名图层合并

情景再现&#xff0c;呼叫小编 ————数据合并时&#xff0c;你是否也经常碰到这些情况&#xff1f; 数据存在几何错误&#xff0c;合并失败&#xff01; 数据字段类型不一致&#xff0c;合并失败&#xff01; 合并工具运行有警告信息&#xff0c;不知道是否合并成功&…

2024年中国网络安全市场全景图 -百度下载

是自2018年开始&#xff0c;数说安全发布的第七版全景图。 企业数智化转型加速已经促使网络安全成为全社会关注的焦点&#xff0c;在网络安全边界不断扩大&#xff0c;新理念、新产品、新技术不断融合发展的进程中&#xff0c;数说安全始终秉承科学的方法论&#xff0c;以遵循…

航模插头篇

一、常见的电池插头&#xff08;电调端 是公头 电池端 是母头&#xff09; 电池总是被插的 1.XT60头 过流大 安全系数高 难插拔 2.T插 插拔轻松 过流比较小 容易发烫 电调端 是公头 电池端 是母头 3.香蕉头插孔 过流够 插拔轻松 但 容易插反 爆炸 4.TX90(和XT60差…

如何在Java中实现全文搜索功能

如何在Java中实现全文搜索功能 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 全文搜索是现代应用程序中常见的需求&#xff0c;特别是在需要对大量文本数据进…

完整篇-Python数据类型转换

目录 1、「整数到浮点数」&#xff1a; 2、「浮点数到整数」&#xff1a; 3、「字符串到整数」&#xff1a; 4、「字符串到浮点数」&#xff1a; 5、「整数到字符串」&#xff1a; 6、「浮点数到字符串」&#xff1a; 7、「布尔值到整数」&#xff1a; 8、「列表到元组…

数据赋能(138)——开发:数据映射——技术方法、主要工具

技术方法 数据映射的技术方法主要包括以下几种&#xff1a; 手工法&#xff1a; 手工法涉及开发人员手动编码数据源和目标架构之间的链接。这通常使用如XSLT这样的计算机语言来编写代码&#xff0c;将XML文档翻译成各种格式。然而&#xff0c;随着数据系统的扩展和复杂化&…

11-阿里云服务器 ECS-FileZilla的文件传输

FileZilla的下载与安装以及简单使用(有图解超简单)-CSDN博客 Windows下 FileZilla客户端下载与安装 官方下载地址:https://www.filezilla.cn/download 绿色版我们可以理解为免安装版本,而安装版本则是需要运行Setup的引导程序,最大的区别就是会不会生成注册表。 filezi…

Running cmake version 2.8.12.2解决方案

Centos7安装mysql8.0&#xff0c;编译环节出现如下报错&#xff1a; Running cmake version 2.8.12.2 CMake Warning at CMakeLists.txt:82 (MESSAGE):Please use cmake3 rather than cmake on this platform-- Please install cmake3 (yum install cmake3) CMake Error at CMa…

哪些算法使用了 树 数据结构

树数据结构在计算机科学中非常常见&#xff0c;许多算法使用了树数据结构来解决各种问题。以下是一些常见的算法和应用&#xff1a; 1. **二叉搜索树 (Binary Search Tree, BST)**&#xff1a; - 插入 (Insertion) - 查找 (Search) - 删除 (Deletion) 2. **平衡树**…

通过一个单相逆变器仿真深度学习PR控制器

目录 前言 ​编辑 PR控制器的理论 PR控制器不同表达式及其建模 PR控制器连续积分组合及模型 PR控制器连续传递函数及模型 PR控制器离散积分及模型 PR控制器离散传递函数及模型 PR控制器差分方程及模型 系统仿真效果 总结 前言 在项目开发中常用PI控制器&#xff0c;这次在…

VBA 正则表达式初体验

VBA 正则表达式初体验 Option ExplicitSub demo()Dim i As Long, j As Long, k As Long, s As StringDim reg1 As Object, matches1 As Object, mch1 As ObjectDim reg2 As Object, matches2 As Object, mch2 As ObjectDim allBonus As Stringi 6s Range("a1").Va…

Symfony文件上传功能实现:打造强大而安全的Web应用

Symfony文件上传功能实现&#xff1a;打造强大而安全的Web应用 Symfony是一个高度灵活的PHP Web框架&#xff0c;用于创建快速、安全且易于维护的Web应用。文件上传是Web开发中的常见需求&#xff0c;Symfony提供了一套简单而强大的方法来处理文件上传。本文将详细介绍如何在S…

深入探索PHP中的多维数组:构建复杂数据结构的艺术

深入探索PHP中的多维数组&#xff1a;构建复杂数据结构的艺术 引言 在PHP开发中&#xff0c;数组&#xff08;Array&#xff09;是一种非常重要的数据类型&#xff0c;它允许我们存储多个值&#xff0c;并且这些值可以是不同类型的。而多维数组&#xff08;Multidimensional …

BeanUtils拷贝List数据

工具类&#xff1a; package com.ssdl.baize.pub;import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.List; import java.util.function.Supplier; import org.springframework.beans.BeanUtils;public class BeanConvertUti…

【BUUCTF-PWN】10-bjdctf_2020_babystack

简单的栈溢出&#xff0c;ret2text 64位&#xff0c;开启了NX保护 执行效果&#xff1a; main函数&#xff1a; 因为读入的字符长度可以由用户输入的第一个参数值决定&#xff0c;因此read函数存在栈溢出 覆盖距离为0x108 存在后门函数&#xff1a; 后门函数地址0x4…

Kaptcha验证码

Kaptcha验证码 Kaptcha 是一个用于生成验证码的开源库&#xff0c;在 Java 中使用它可以轻松地为应用程序添加验证码功能。 一、引入依赖 首先&#xff0c;需要在项目的 pom.xml 文件&#xff08;如果是 Maven 项目&#xff09;中添加 Kaptcha 的依赖&#xff1a; <depend…

Node.js 使用 gRPC:从定义到实现

1. 概述&#xff1a; gRPC&#xff08;gRPC Remote Procedure Calls&#xff09;是一个高性能、开源的远程过程调用&#xff08;RPC&#xff09;框架&#xff0c;由 Google 开发。它支持多种编程语言&#xff0c;旨在简化和优化分布式系统中的服务通信。 2. gRPC的优势&#…

AIGC | 在机器学习工作站安装NVIDIA cuDNN 深度学习库

[ 知识是人生的灯塔&#xff0c;只有不断学习&#xff0c;才能照亮前行的道路 ] 0x03.初识与安装 cuDNN 深度学习库 什么是cuDNN? cuDNN&#xff08;CUDA Deep Neural Network library&#xff09;是由英伟达&#xff08;NVIDIA&#xff09;开发的深度学习库&#xff0c;专门用…