爬虫基础:HTTP基本原理

news2024/11/22 15:38:07

爬虫基础:HTTP基本原理

  • 前言
  • HTTP基本原理
    • URI 和 URL
    • HTTP 和 HTTPS
    • HTTP 请求过程
    • 请求与响应
      • HTTP请求
      • HTTP响应
      • 请求与响应的交互过程
    • HTTP 2.0
      • 二进制传输
      • 多路复用
      • Header压缩
      • 服务器端提前响应
      • 内容安全

前言

  • 了解 HTTP的基本原理,了解从往测览器中输人 URL到获取网页内容之间都发生了什么。了解这些内容有助于我们进一步了解爬虫的基本原理。
  • 由于本人水平有限,难免出现错漏,敬请批评改正。
  • 更多精彩内容,可点击进入Python日常小操作专栏、OpenCV-Python小应用专栏、YOLO系列专栏、自然语言处理专栏或我的个人主页查看
  • 基于DETR的人脸伪装检测
  • YOLOv7训练自己的数据集(口罩检测)
  • YOLOv8训练自己的数据集(足球检测)
  • YOLOv5:TensorRT加速YOLOv5模型推理
  • YOLOv5:IoU、GIoU、DIoU、CIoU、EIoU
  • 玩转Jetson Nano(五):TensorRT加速YOLOv5目标检测
  • YOLOv5:添加SE、CBAM、CoordAtt、ECA注意力机制
  • YOLOv5:yolov5s.yaml配置文件解读、增加小目标检测层
  • Python将COCO格式实例分割数据集转换为YOLO格式实例分割数据集
  • YOLOv5:使用7.0版本训练自己的实例分割模型(车辆、行人、路标、车道线等实例分割)
  • 使用Kaggle GPU资源免费体验Stable Diffusion开源项目

HTTP基本原理

HTTP(Hypertext Transfer Protocol,超文本传输协议)是互联网上应用最为广泛的一种网络协议,它是客户端(用户)与服务器(网站)之间交换数据(如HTML文件、图片文件、查询结果等)的方式。下面是HTTP的基本原理:

  1. 请求与响应模型
    HTTP是一个基于请求与响应的协议。客户端(如浏览器)向服务器发送一个请求,服务器接收到请求后,处理请求并返回响应给客户端。

  2. 请求方法
    HTTP定义了多种请求方法(也称为HTTP动词),每种方法都有特定的含义和用途。最常用的包括:

    • GET:请求指定的页面信息,并返回实体主体。
    • POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
    • PUT:从客户端向服务器传送的数据取代指定的文档的内容。
    • DELETE:请求服务器删除指定的页面。
    • HEAD:类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头信息。
  3. 消息结构
    HTTP请求和响应消息都是由开始行(start line)、头部(header)和主体(body)三个部分组成。开始行包括请求方法、请求URI和HTTP协议版本;头部包含了一些关于请求或响应的元数据;主体则包含了实际发送的数据。

  4. 无连接
    HTTP协议是无连接的,即每个请求都需要与服务器建立一次连接,处理完请求后就断开连接(HTTP/1.0)。虽然HTTP/1.1和HTTP/2引入了持久连接(persistent connection)和管道化(pipelining)的概念,允许多个请求和响应在同一个连接上传输,但本质上HTTP协议还是无连接的。

  5. 无状态
    HTTP协议是无状态的,即服务器不保留与客户端之前请求和响应相关的任何信息。每次请求都是独立的,服务器处理完请求后就“忘记”了这次请求。如果需要保持状态,通常需要通过其他机制(如Cookies或Session)来实现。

  6. 端口
    HTTP默认使用80端口,HTTPS(HTTP的安全版,通过SSL/TLS加密)默认使用443端口。

总的来说,HTTP协议是互联网上实现信息传输和资源共享的基础,它定义了客户端与服务器之间如何通信和交换数据。虽然HTTP/2和HTTP/3等后续版本对HTTP协议进行了优化和改进,但上述基本原理仍然适用。

URI 和 URL

URI(Uniform Resource Identifier,统一资源标识符)和URL(Uniform Resource Locator,统一资源定位符)都是用于标识互联网上的资源的,但它们之间存在一些关键的区别。

URI是一个更广泛的概念,它用来唯一地标识一个资源,可以看作是一个字符串,用来定位和访问互联网上的各种资源,如网页、图片、视频等。URI由三部分组成:访问资源的命名机制、存放资源的主机名,以及资源自身的名称(由路径表示)。

而URL是URI的一个子集,是一种更具体的资源标识符。它不仅标识一个资源,而且还指明了如何定位这个资源。URL的格式一般由协议(或称为服务方式)、存有该资源的主机IP地址(有时也包括端口号),以及主机资源的具体地址这三部分组成。简单来说,URL是URI的一个特例,它提供了资源的具体位置信息。

总的来说,URI和URL都是用于标识和定位互联网上的资源,但URI更加泛化,而URL则更加具体,提供了资源的详细位置信息。在实际使用中,我们经常使用URL来访问网络资源,因为它包含了访问资源所需的所有信息。

HTTP 和 HTTPS

HTTP和HTTPS是用于在客户端和服务器之间传输数据的协议,它们在多个方面存在显著的区别:

  1. 安全性:HTTP是超文本传输协议,信息在传输过程中是明文传输的。这意味着如果攻击者截取了Web浏览器和网站服务器之间的传输报文,可以直接读懂其中的信息。相反,HTTPS是具有安全性的SSL加密传输协议,为浏览器和服务器之间的通信提供了加密,确保数据传输的安全,从而防止数据在传输过程中被盗取或改变。
  2. 连接方式和端口:HTTP的连接相对简单,且是无状态的。它使用的默认端口是80。而HTTPS则是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,其使用的默认端口是443。
  3. 效率与成本:虽然HTTPS提供了更高的安全性,但其缓存效率较低,且由于功能更强大,所需的证书费用也相对较高。
  4. 适用场景:HTTP因其不加密的特性,适用于不涉及敏感信息传输的场景,如公开信息的获取,其速度相对较快。而HTTPS则更适用于需要保护用户敏感信息的场景,如登录、支付等,提供更高级的安全性。在现代互联网中,涉及用户隐私和敏感信息的场景推荐使用HTTPS。

总的来说,HTTP和HTTPS各有其特点和适用场景。在设计网络应用时,应根据具体需求和安全要求选择合适的协议。

HTTP 请求过程

HTTP请求过程涉及客户端(如Web浏览器)与服务器之间的交互,通常包括以下步骤:

  1. 建立TCP连接:在HTTP工作开始之前,Web浏览器首先通过网络与Web服务器建立连接。这种连接是通过TCP协议来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族。
  2. 发送请求命令:一旦建立了TCP连接,Web浏览器会向Web服务器发送一个请求命令。这个命令可能包含HTTP请求的方法(如GET或POST),以及请求的地址URL。
  3. 发送请求头信息:浏览器在发送请求命令之后,还会以头信息的形式向Web服务器发送一些额外的信息。这些信息可能包括客户端的环境信息、身份验证信息等。
  4. 服务器应答:服务器在接收到客户端的请求后,会返回一个应答。这个应答包括一个状态码,用来显示请求是否成功以及成功或失败的详细信息。
  5. 发送应答头信息:服务器还会随同应答向用户发送关于它自己的数据以及被请求的文档的信息。这些信息通常包含在应答头中,与请求头类似,它们也包含许多有用的元数据,如服务器类型、日期时间、内容类型和长度等。
  6. 发送数据:如果请求需要,服务器会向Web浏览器发送所请求的数据。这可能是HTML文件、图片、视频或其他类型的资源。
  7. 关闭TCP连接:在数据传输完成后,服务器会关闭与Web浏览器之间的TCP连接。

请注意,虽然上述步骤描述了HTTP请求过程的一般流程,但实际的实现可能因HTTP的版本(如HTTP/1.0、HTTP/1.1、HTTP/2等)和具体的浏览器、服务器实现而有所不同。例如,HTTP/1.1和HTTP/2引入了持久连接和管道化等特性,允许在同一个连接上传输多个请求和响应,从而提高了效率。

总的来说,HTTP请求过程是一个复杂而精细的交互过程,它确保了客户端和服务器之间能够正确、安全地传输数据。

请求与响应

HTTP请求与响应是HTTP协议中两个核心的概念,它们共同构成了客户端与服务器之间交互的基础。以下是关于HTTP请求与响应的详细解释:

HTTP请求

HTTP请求是由客户端(如Web浏览器)发送给服务器的,用于请求获取特定的资源或执行特定的操作。HTTP请求通常由以下几个部分组成:

  1. 请求行:包含HTTP方法(如GET、POST等)、请求的URL和HTTP协议版本。HTTP方法定义了请求的具体操作类型,而URL则指定了要请求的资源的位置。

  2. 请求头:包含一系列字段,用于传递有关请求或客户端的额外信息。这些字段包括User-Agent(标识发出请求的客户端类型)、Accept(指定客户端可以接受的媒体类型)、Cookie(用于身份验证和会话跟踪)等。

  3. 请求体:对于某些HTTP方法(如POST和PUT),请求体包含发送给服务器的实际数据。这些数据可以是表单数据、JSON对象或其他类型的数据。

HTTP响应

HTTP响应是服务器在接收到客户端的请求后返回的,包含了请求的结果或状态信息。HTTP响应也由几个部分组成:

  1. 状态行:包含HTTP协议版本、状态码和状态消息。状态码是一个三位数的数字,用于表示请求的处理结果,如200表示成功,404表示未找到资源等。状态消息是对状态码的简短描述。

  2. 响应头:与请求头类似,响应头也包含一系列字段,用于传递有关响应或服务器的额外信息。这些字段可能包括Content-Type(指定返回内容的类型)、Content-Length(指定返回内容的长度)、Set-Cookie(用于设置客户端的Cookie)等。

  3. 响应体:响应体包含了服务器返回给客户端的实际数据。这可以是HTML页面、图片、JSON数据或其他类型的资源。

请求与响应的交互过程

  1. 客户端(如Web浏览器)向服务器发送HTTP请求。
  2. 服务器接收到请求后,处理该请求并生成相应的HTTP响应。
  3. 服务器将HTTP响应发送回客户端。
  4. 客户端接收并解析响应,然后根据响应的内容执行相应的操作,如显示网页、处理数据等。

这个过程是HTTP协议的基础,它使得客户端和服务器之间能够进行高效、可靠的通信,从而实现了互联网上的各种应用和服务。

HTTP 2.0

HTTP/2.0是HTTP协议的一个新版本,相比于HTTP/1.x,它在性能、安全性和效率方面进行了显著的改进。以下是关于HTTP/2.0的一些关键特性和优势:

二进制传输

HTTP/2.0在应用层和传输层之间增加了一个二进制分帧层。它将所有传输的信息分割为更小的消息和帧,并采用二进制编码。这种二进制格式使得协议具有更多的扩展性,并且可以提高解析和处理的效率。

多路复用

HTTP/2.0引入了多路复用的概念,允许在同一个TCP连接上同时发送多个请求和接收多个响应。每个帧会标识出该帧属于哪个流,流是多个帧组成的数据流。这种机制减少了连接建立的开销,提高了并发性能,使得网页加载更快,用户体验更好。

Header压缩

HTTP/2.0使用HPACK算法对传输的头部信息进行压缩,减少了头部的大小。这不仅可以减少带宽的浪费,还可以加快请求的传输速度。

服务器端提前响应

在HTTP/2.0中,服务器可以对一个客户端请求发送多个响应。这意味着服务器可以在处理请求的过程中,提前发送一些响应给客户端,从而进一步提高性能和响应速度。

内容安全

HTTP/2.0是基于HTTPS的,因此它天然具有安全特性。通过HTTP/2.0的特性,可以避免单纯使用HTTPS时的性能下降问题,确保数据传输的安全性和完整性。

综上所述,HTTP/2.0通过引入二进制传输、多路
复用、Header压缩、服务器端提前响应和内容安全等特性,显著提高了Web性能、安全性和效率。这使得HTTP/2.0成为现代Web应用中广泛使用的协议版本之一。

在这里插入图片描述

  • 由于本人水平有限,难免出现错漏,敬请批评改正。
  • 更多精彩内容,可点击进入Python日常小操作专栏、OpenCV-Python小应用专栏、YOLO系列专栏、自然语言处理专栏或我的个人主页查看
  • 基于DETR的人脸伪装检测
  • YOLOv7训练自己的数据集(口罩检测)
  • YOLOv8训练自己的数据集(足球检测)
  • YOLOv5:TensorRT加速YOLOv5模型推理
  • YOLOv5:IoU、GIoU、DIoU、CIoU、EIoU
  • 玩转Jetson Nano(五):TensorRT加速YOLOv5目标检测
  • YOLOv5:添加SE、CBAM、CoordAtt、ECA注意力机制
  • YOLOv5:yolov5s.yaml配置文件解读、增加小目标检测层
  • Python将COCO格式实例分割数据集转换为YOLO格式实例分割数据集
  • YOLOv5:使用7.0版本训练自己的实例分割模型(车辆、行人、路标、车道线等实例分割)
  • 使用Kaggle GPU资源免费体验Stable Diffusion开源项目

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

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

相关文章

微服务day04(上)-- RabbitMQ学习与入门

1.初识MQ 1.1.同步和异步通讯 微服务间通讯有同步和异步两种方式: 同步通讯:就像打电话,需要实时响应。 异步通讯:就像发邮件,不需要马上回复。 两种方式各有优劣,打电话可以立即得到响应,但…

Tech Talks技术讲座中文培训-报名学习LPWAN、Matter、蓝牙和Wi-Fi最新开发技能!

Silicon Labs(亦称“芯科科技”)主办新一轮2024年“亚太区Tech Talks在线技术讲座”即将在5月9日至8月8日(中文系列场次),以及4月24日至8月7日(英文系列场次)正式展开,现正热烈报名中…

spring boot学习第十四篇:使用AOP编程

一、基本介绍 1,什么是 AOP (1)AOP 为 Aspect Oriented Programming 的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。 (2)利用 AOP…

排水管网信息化平台:科技赋能,助力城市水环境管理升级

排水管网承担着城市污水、雨水的收集与排出的双重任务,是城市重要的基础设施。城市化率的不断提高,对城市基础设施的性能也提出了考验。 排水管网存在窨井监测设备不足、管段淤积、无序监管、污水超标排放等问题突出,导致部分污水直排受纳水…

Springboot笔记-05

1.Springboot的热部署 spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署&#xff0c;提高开发者的开发效率&#xff0c;无需手动重启Spring Boot应用。 在pom文件加入依赖 <dependency> <groupId>org.springframework.boot…

像uniapp image标签一样对图片进行缩放和裁剪

像uniapp image标签一样对图片进行缩放和裁剪 0 前言提示1 实现1.1 不保持纵横比缩放图片&#xff0c;使图片的宽高完全拉伸至填满 image 元素1.2 保持纵横比缩放图片&#xff0c;使图片的长边能完全显示出来。也就是说&#xff0c;可以完整地将图片显示出来。1.3 保持纵横比缩…

NCV7428D15R2G中文资料PDF数据手册参数引脚图图片价格概述参数芯片特性原理

产品概述&#xff1a; NCV7428 是一款系统基础芯片 (SBC)&#xff0c;集成了汽车电子控制单元 (ECU) 中常见的功能。NCV7428 为应用微控制器和其他负载提供低电压电源并对其进行监控&#xff0c;包括了一个 LIN 收发器。 产品特性&#xff1a; 控制逻辑3.3 V或5 V VOUT电源&…

JavaScript 使用 Promise 实现 sleep 休眠

以下为代码实现&#xff0c;该代码实现了每隔1秒打印一次当前时间&#xff0c;总共打印5次的功能 for(let i 1; i < 5; i){console.log(new Date().toString())await new Promise(resolve>setTimeout(resolve,1000)) }实现休眠的核心代码为: await new Promise(resolv…

挖掘网络宝藏:利用Scala和Fetch库下载Facebook网页内容

介绍 在数据驱动的世界里&#xff0c;网络爬虫技术是获取和分析网络信息的重要工具。本文将探讨如何使用Scala语言和Fetch库来下载Facebook网页内容。我们还将讨论如何通过代理IP技术绕过网络限制&#xff0c;以爬虫代理服务为例。 技术分析 Scala是一种多范式编程语言&…

在windows上安装Jenkins

jenkins安装 下载jenkins 官网&#xff1a;Jenkins download and deployment 官方文档说明&#xff1a;Jenkins User Documentation 安装jenkins1.点击下载好的安装包&#xff0c;点击Next 2.选择一个安装路径 如果系统是windows家庭版打不开策略就创建一个txt文件&#xff0c…

node.js常用的命令

Node.js 是一个用于执行 JavaScript 代码的运行时环境。以下命令是 Node.js 开发中常用的命令&#xff0c;可以帮助你进行包管理、项目配置和代码执行等操作。 node -v&#xff1a;检查 Node.js 的版本。npm -v&#xff1a;检查 npm&#xff08;Node.js 包管理器&#xff09;的…

企业工商年报注册注销商标注册异常处理小程序开源版开发

企业工商年报注册注销商标注册异常处理小程序开源版开发 1、独立业务模型包括&#xff1a;企业工商年报、企业工商登记注册、企业注销登记、企业异常处理。 2、通用业务模型适合各种业务&#xff0c;比如&#xff1a;商标注册代理、财务会计服务、企业版权登记登。 当然&…

2024 用CleanMyMac X为您的MAC清理提速吧

CleanMyMac X 是由 MacPaw 公司开发的一款针对 macOS 操作系统的电脑清理工具。它可以帮助用户清理电脑中的垃圾文件、卸载不需要的软件、优化电脑性能等。它的界面简洁明了&#xff0c;操作简单易懂&#xff0c;非常适合普通用户使用。 链接: https://pan.baidu.com/s/1_TFnrI…

Zookeeper(六)Zokeeper 使用场景案例

目录 一 数据发布/订阅1.1 配置变更1.2 代码实现1.3 启动测试 二 负载均衡2.1 实现2.2 代码2.3 启动测试 三 分布式ID3.1 代码实现3.2 效果 四 服务器集群监控五 分布式锁2.1 排他锁2.2 共享锁 官网&#xff1a;Apache ZooKeeper 一 数据发布/订阅 数据发布/订阅(Publish/Sub…

怎样修改grafana的Loading picture和加载的文本

登录装了grafana的linux机器 command “sudo vi /usr/share/grafana/public/views/index.html”&#xff0c;编辑配置文件。 找到.preloader__logo更改background-image. 这里可以是个url也可以是个路径。 如果想要更改加载的文字.可以更改 的内容 改完:wq保存以后退出&…

从键盘到屏幕:C语言中输入输出探秘

在编程中&#xff0c;输入和输出是我们与计算机交流的关键。无论是键盘输入还是屏幕输出&#xff0c;它们贯穿了我们每一行代码的编写。本文将带你深入探索C语言中输入输出的精彩世界&#xff0c;解锁其中的奥秘&#xff0c;助你轻松驾驭键盘和屏幕&#xff01;&#xff08;最后…

C++ List底层实现

文章目录 前言成员变量成员函数迭代器self& operator()前置self operator(int)后置self operator--()前置--self operator--(int)后置--bool operator!(const self & tmp)判断是否相等T* operator*() 解引用操作 list()初始化iterator begin()iterator end()const_iter…

年度告警分类统计

1、打开前端Vue项目kongguan_web&#xff0c;完成前端src/components/echart/YearWarningChart.vue页面设计 在YearWarningChart.vue页面添加div设计 <template><div class"home"><div style"margin: 0px auto;height: 100%"><div …

seleniumUI自动化实例(CSDN发布文章)

1.CSDN登陆成功后&#xff0c;点击发布 源码&#xff1a; #点击首页中的发布按钮 CSDNconf.driver.find_element(By.LINK_TEXT,"发布").click() time.sleep(15) 2.输入标题 #输入文章标题&#xff0c;标题格式“selenium UI自动化测试实例今天的日期” CSDNconf.d…

「数据分析」之零基础入门数据挖掘

摘要&#xff1a;对于数据挖掘项目&#xff0c;本文将学习应该从哪些角度分析数据&#xff1f;如何对数据进行整体把握&#xff0c;如何处理异常值与缺失值&#xff0c;从哪些维度进行特征及预测值分析&#xff1f; 探索性数据分析&#xff08;Exploratory Data Analysis&#…