爬虫基础:HTTP基本原理

news/2024/7/19 11:28:10 标签: 爬虫, http, 网络协议
http://www.w3.org/2000/svg" style="display: none;">

爬虫基础: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应用中广泛使用的协议版本之一。

https://img-blog.csdnimg.cn/direct/105f26fbe35c46a6803e85dfda8d0db7.jpeg" alt="在这里插入图片描述" />

  • 由于本人水平有限,难免出现错漏,敬请批评改正。
  • 更多精彩内容,可点击进入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.niftyadmin.cn/n/5441753.html

相关文章

Java使用Jsch与sftp服务器实现ssh免密登录

本次验证是通过jsch配置rsa私钥路径的思路进行的。详细步骤如下&#xff1a;1、引用依赖jar <dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId> <version>0.1.51</version> </dependency>2、代码参…

ES间的导数脚本

一、同节点 from elasticsearch import Elasticsearch# 连接到源Elasticsearch集群 source_es Elasticsearch(http://127.0.0.1:9201)# 连接到目标Elasticsearch集群 target_es Elasticsearch(http://127.0.0.1:9200)# 定义源索引和目标索引 source_index t1 target_index …

混合离散-连续几何深度学习

混合离散-连续几何深度学习 通过DISCO卷积的可扩展和等变球形CNN 目录 一、说明二、 二分法&#xff1a;离散方法与连续方法三、打破二分法&#xff1a;离散-连续 &#xff08;DISCO&#xff09; 方法四、离散-连续 &#xff08;DISCO&#xff09; 群卷积五、可扩展计算六、DI…

使用 Dify 和 AWS Bedrock 玩转 Anthropic Claude 3

本篇文章&#xff0c;聊聊怎么比较稳定的使用 Anthropic Claude 3&#xff0c;以及基于目前表现非常好的模型&#xff0c;来做一些有趣的 AI Native 小工具。 写在前面 在实际体验了半个多月&#xff0c;月初上线的 Anthropic Claude Pro 后&#xff0c;发现 Claude 3 系列模…

力扣每日练习(3.19)补

958. 二叉树的完全性检验 根据完全的定义&#xff0c;可以知道是最后一层的节点要尽可能靠近左边&#xff0c;那么不成立的条件就是最后一层的节点是这样的[1,4,56,null,13] 也就是第一个空节点后竟然还有非空节点&#xff0c;违背了完全。 所以采用层序遍历的方式&#xff0…

【漏洞复现】3. Spring4Shell远程代码执行漏洞(CVE-2022-22965)复现与分析

文章目录 1. 预备知识2. 漏洞复现2.1 漏洞介绍2.2 原理分析2.2.1 Spring Framework2.2.2 Spring Boot2.2.3 原理分析 2.3 漏洞复现2.3.1 靶场搭建2.3.2 脚本利用2.3.3 POC分析2.3.4 手动构造POC 2.4 漏洞修复2.4.1 WAF规则&#xff08;临时修复&#xff09;2.4.3 升级框架&…

树形递归模板

详情参考CSDN链接: https://www.cnblogs.com/lidar/p/12972792.html public class Menu {// 菜单idprivate String id;// 菜单名称private String name;// 父菜单idprivate String parentId;// 菜单urlprivate String url;// 菜单图标private String icon;// 菜单顺序private …

优雅的 Markdown

Markdown浅尝 一、勾选框 注意[]前后都要有空格 - [x] 干的漂亮 - [x] 吃饭 - [x] 写代码 - [ ] 睡觉 干的漂亮 吃饭 写代码 睡觉 二、列表 #无序列列表 * 换成 - 也行 * 你 * 你好 * 你好呀 - 你很好啊 你你好你好呀你很好啊 #有序列表 . 后面有个空格 1. 我 2. 是我 3.…