爬虫基础:HTTP基本原理

爬虫基础: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开源项目

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

软件安全测评要点有哪些?第三方软件安全测试是必需品吗?

在当今数字化时代,软件安全测试是每个软件开发团队都不能忽视的重要环节。安全测试是指对软件产品进行系统、全面的安全性评测与检测的过程。它旨在发现并修复软件中存在的漏洞和安全隐患,以确保软件能够在使用过程中保护用户的数据和隐私不被非法访问和…

Pytest自动化测试框架快速上手(超详细)

🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号:互联网杂货铺,回复1 ,免费获取软件测试全套资料,资料在手,薪资嘎嘎涨 pytest是一个非常成熟的全功能的Python测试框架&#…

《操作系统实践-基于Linux应用与内核编程》第10章--实验 Qt聊天程序

前言: 内容参考《操作系统实践-基于Linux应用与内核编程》一书的示例代码和教材内容,所做的读书笔记。本文记录再这里按照书中示例做一遍代码编程实践加深对操作系统的理解。 引用: 《操作系统实践-基于Linux应用与内核编程》 作者:房胜、李旭健、黄…

边缘检测-Tiny and Efficient Model for the Edge Detection Generalization

源代码: https://github.com/xavysp/TEED 论文地址:https://arxiv.org/pdf/2308.06468.pdf 大多数高级计算机视觉任务依赖于低级图像操作作为其初始过程。边缘检测、图像增强和超分辨率等操作为更高级的图像分析提供了基础。在这项工作中,我们考虑三个…

YUNBEE云贝-OBCP大军又一满分学员登榜!

课程介绍 培训概述 OceanBase 认证是 OceanBase 官方推出的唯一人才能力认证体系,代表了阿里巴巴及蚂蚁集团官方对考生关于 OceanBase 技术能力的认可,旨在帮助考生更好地学习 OceanBase 数据库产品,早日融入 OceanBase 技术生态体系&#x…

浏览量这么低,还要不要继续坚持?

哈喽,你好啊,我是雷工! 曾经在一个群里聊天,有群友看到我两位数的浏览量,说到:浏览量这么低还坚持什么? 浏览量低是事实,大多数是十几二十的,上百的都是少数&#xff0c…

ubuntu10.04 apache2.2开启tls1.2的支持,使现代的edge和firefox浏览器能正常访问https

最近发现自己ubuntu10.04服务器上的apache https无法通过win11上的edge和firefox浏览器访问,但xp下的ie6和ie8没有问题。 firefox的错误提示为“此网站可能不支持TLS 1.2协议,而这是Firefox支持的最低版本”。 经过检查发现: IE6访问https所需的版本是SS…

Vulnhub靶机:Stapler1

一、介绍 运行环境:Virtualbox 攻击机:kali(10.0.2.4) 靶机:Stapler: 1(10.0.2.13) 目标:获取靶机root权限和flag 靶机下载地址:https://www.vulnhub.com/entry/sta…

安卓转鸿蒙能有多适配?简直了……

到现在为止,想必很多开发者都或多或少 了解过鸿蒙。许多企业也都已经加入了鸿蒙业务,半推半就的开始学习鸿蒙开发。那么鸿蒙到底好不好搞呢? 首先可以肯定的一点,对于做安卓的来说鸿蒙非常搞,究竟有多好搞呢&#xff…

蓝桥杯-体育健将-CPP-贪心

目录 一、题目描述: 二、整体思路: 三、代码: 一、题目描述: 二、整体思路: 要在k分钟内拿最多的金牌,就意味着要参加尽可能多的项目,因此就要选择耗时(比赛时间和休息时间)最少的项目先预处…

2024全国水科技大会【联合主办】福州水务集团有限公司

福州水务成立于2008年11月,AA信用评级,注册资本21.2亿元。下属各级企业70多家(包括3家国家级高新技术企业、1家A股上市企业)。集团主营供水、排水、环保、温泉文旅、综合服务五大板块,旗下运营自来水厂17座&#xff0c…

解锁数据价值:COS支持日志检索与分析功能

前言 腾讯云对象存储服务(COS)一直致力于为用户提供高效、安全、便捷的云存储服务。但是,当数据流动如同星辰大海,如何捕捉那些关键的瞬间,洞察每一次访问背后的故事?现在,日志检索与分析功能可…

Dijkstra算法

Dijkstra算法用于求无向图或者有向图中起点到各个顶点的最短路径,且边的权值需要为非负数下面这个题就可以用该算法求解 743. 网络延迟时间 有 n 个网络节点,标记为 1 到 n。 给你一个列表 times,表示信号经过 有向 边的传递时间。 times[i]…

MNN createSession 之 Schedule(三)

系列文章目录 MNN createFromBuffer(一) MNN createRuntime(二) MNN createSession 之 Schedule(三) MNN createSession 之创建流水线后端(四) MNN Session::resize 之流水线编码&am…

har的编译及引用

1.创建HAR 选择文件->新建->模块,然后再下一个页面选择static library,之后在接下来的页面设置模块名字,然后下一步直到完成。 2.创建成功后在新建的模块下编写自己的代码内容。 3.编译HAR 编译默认是从Index.ets文件下进行导出,如果…

202309 CSP认证 | 梯度求解

梯度求解 这道题是直接在考场上面做的。当然因为去年九月的我过于稚嫩,基本的字符串操作都没有完成好。 当然这次再写我发现,我的思路和在考场上面一模一样,导致还是无法下手… 无法下手的原因就是我一直在思考应该以什么样的结构来存储以及…

bezier曲线拟合椭圆弧线

椭圆弧线用bezier曲线拟合 。 先计算出 椭圆中心 起始角度 旋转角度 S t e p 1 : C o m p u t e ( x 1 ′ , y 1 ′ ) Step 1: Compute(x_1, y_1) Step1:Compute(x1′​,y1′​) ( x 1 ′ y 1 ′ ) ( cos ⁡ φ sin ⁡ φ − sin ⁡ φ cos ⁡ φ ) ⋅ ( x 1 − x 2 2 y 1 −…

JMH微基准测试框架学习笔记

一、简介 JMH(Java Microbenchmark Harness)是一个用于编写、构建和运行Java微基准测试的框架。它提供了丰富的注解和工具,用于精确控制测试的执行和结果测量,从而帮助我们深入了解代码的性能特性。 二、案例实战 在你的pom文件…

2024最新自动化测试面试题合集 (附答案)

1、你会封装自动化测试框架吗? 这个问得最多,甚至有很多公司直接写在招聘要求中! 当然可以,自动化框架主要的核心框架就是分层PO模式:分别为:基础封装层BasePage,PO页面对象层,Tes…

Linux系统

yum 命令 安装软件 1.安装yum包: $ yum install PACKAGE_NAME Bash 2.yum包装: $ yum remove PACKAGE_NAME Shell 3.重新安装一个yum包: $ yum reinstall PACKAGE_NAME Bash 4.搜索yum包: $ yum search PACKAGE_NAME …