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,一经查实,立即删除!

相关文章

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

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

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

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

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

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

航模插头篇

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

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

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

Running cmake version 2.8.12.2解决方案

Centos7安装mysql8.0,编译环节出现如下报错: 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…

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

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

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

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

BeanUtils拷贝List数据

工具类: 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

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

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

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

昇思学习打卡-5-基于Mindspore实现BERT对话情绪识别

本章节学习一个基本实践–基于Mindspore实现BERT对话情绪识别 自然语言处理任务的应用很广泛,如预训练语言模型例如问答、自然语言推理、命名实体识别与文本分类、搜索引擎优化、机器翻译、语音识别与合成、情感分析、聊天机器人与虚拟助手、文本摘要与生成、信息抽…

LLMs之gpt_academic:gpt_academic的简介、安装和使用方法、案例应用之详细攻略

LLMs之gpt_academic:gpt_academic的简介、安装和使用方法、案例应用之详细攻略 目录 gpt_academic的简介 1、版本更新历史 版本: 1、新增功能及其描述 新界面(修改config.py中的LAYOUT选项即可实现“左右布局”和“上下布局”的切换) 所…

Linux shell编程学习笔记62: top命令 linux下的任务管理器

0 前言 top命令是Unix 和 Linux下常用的性能分析工具,提供了一个动态的、交互式的实时视图,显示系统的整体性能信息,以及正在运行的进程的相关信息,包括各个进程的资源占用状况,类似于Windows的任务管理器。 1 top命令…

鸿蒙:1.入门

概述 简介 鸿蒙操作系统(HarmonyOS)是华为公司发布的一款智能终端系统,是基于微内核的面向全场景的分布式操作系统。它致力于提供更加安全、高效、低延迟、低功耗的操作体验,可通过技术手段对应用程序和设备进行智能协同&#xf…

mac鼠标键盘共享:ShareMouse for Mac 激活版

hareMouse 是一款 Windows 和 macOS 操作系统上的共享和切换鼠标和键盘的实用工具。这款软件允许用户在多台计算机之间无缝地共享鼠标和键盘,使得在不同设备之间进行工作和操作变得更加便捷。占用资源少: ShareMouse 设计轻量,占用系统资源较…

JVM原理(十五):JVM虚拟机静态分配与动态分配

1. 分派 本节讲解的分派调用过程将会揭示多态性特征的一-些最基本的体现,如“重载”和“重写”在Java虚拟机之中是如何实现的。 1.1. 静态分派 案例: 我们先来看一段代码: Human mannew Man(); 我们把上面代码中的“Human"称为变量的“静态类型…

alibabacloud学习笔记10

讲解微服务链路追踪系统的作用 讲解什么Sleuth链路追踪系统 注释掉我们的网关过滤器。 注释掉断言。 网关服务,视频服务,订单服务,我们都给这段依赖添加进来。 调用一个请求。 我们可以看到控制台上会有输出。 讲解zipkin介绍和部署实战 访问…

Vite: 实现 no-bundle 开发服务 (2)

概述 基于前文 Vite: 实现 no-bundle 开发服务 (1) 我们基于下面的导图继续实现 no-bundle 构建服务 接下来我们需要完成如下的模块: CSS 编译插件静态资源加载插件模块依赖图开发,并在 transform 中间件中接入HMR 服务端代码开发HMR 客户端代码开发 CSS 编译插件…

泰国内部安全行动司令部数据泄露

BreachForums 论坛的一名成员宣布发生一起重大数据泄露事件,涉及泰国内部安全行动司令部 (ISOC),该机构被称为泰国皇家武装部队的政治部门。 目前,我们无法准确确认此次泄露的真实性,因为该组织尚未在其网站上发布有关该事件的任…