当前位置: 首页 > article >正文

Python3爬虫教程-HTTP基本原理

HTTP基本原理

  • 1,URL组成部分详解
  • 2,HTTP和HTTPS
  • 3,HTTP请求过程
  • 4,请求(Request)
    • 请求方法(Request Method)
    • 请求的网址(Request URL)
    • 请求头(Request Headers)
    • 请求体(Request Body)
  • 5、响应(Response)
    • 响应状态码(Response Status Code)
    • 响应体(Response Body)
  • 6、HTTP/2.0
    • 二进制分帧层
    • 多路复用
    • 流量控制
    • 服务端推送

1,URL组成部分详解

URL是uniform Resource Locator的简写,统一资源定位符
一个URL由以下几部分组成:
在这里插入图片描述

  • scheme:代表的是访问的协议,一般为http或https以及ftp等
  • host:主机名,域名,比如www.baidu.com
  • port:端口号,http协议是80端口,https协议是443端口
  • path:查找路径。比如:www.baidu.com/trending/now,后面的trending/now就是path
  • query-string:查询字符串,用来传参。比如:www.baidu.com/s?wd=python&a=1,后面的wd=python和a=1就是查询字符串
  • anchor:锚点,后台一般不用管。前端用来做页面定位

2,HTTP和HTTPS

  • HTTP:全称是Hyper Text Transfer Protocol,中文名叫做超文本传输协议;HTTP协议是从网络传输超文本数据到本地浏览器的传送协议,它能保证高效而准确地传送超文本文档。
  • HTTPS:全称是Hyper Text Transfer Protocol over Secure Socket Layer,是以安全为目标的HTTP通道,简单将是HTTP的安全版,即在HTTP下加入SSL层,简称HTTPS。

3,HTTP请求过程

我们在浏览器中输入一个 URL,回车之后便会在浏览器中观察到页面内容。解析这个过程

  • 1,浏览器向网站所在的服务器****发送了一个请求;网页服务器****接收到这个请求后进行处理和解析;服务器返回对应的响应接着传回给浏览器;浏览器对返回的响应进行解析(相应中包含页面的源代码等内容,所以需解析);网页呈现
    在这里插入图片描述
  • 2, Chrome 浏览器开发者模式下的 Network 监听组件
    • Name:请求的名称,一般会将 URL 的最后一部分内容当作名称。
    • Status:响应的状态码,这里显示为 200,代表响应是正常的。通过状态码,我们可以判断发送了请求之后是否得到了正常的响应。
    • Type:请求的文档类型。这里为 document,代表我们这次请求的是一个 HTML 文档,内容就是一些 HTML 代码。
    • Initiator:请求源。用来标记请求是由哪个对象或进程发起的。
    • Size:从服务器下载的文件和请求的资源大小。如果是从缓存中取得的资源,则该列会显示 from cache。
    • Time:发起请求到获取响应所用的总时间。
      在这里插入图片描述

4,请求(Request)

  • 请求:客户端向服务器发出,可以分为4个部分:
    • 请求方法(Request Method)
    • 请求网址(Request URL)
    • 请求头(Request Headers)
    • 请求体(Request Body)

请求方法(Request Method)

  • 请求方法:用于标识请求客户端请求服务端的方式,常见的请求方式有两种:GET和POST
    • GET请求中的参数包含在URL里面,数据可以在URL中看到,也就是Query信息部分;而POST请求的URL不回包含这些数据,数据都是通过表单形式传输的,会包含在请求体中,
    • GET请求提交的数据最多只有1024字节,而POST方式没有限制
  • 其他请求方法:
    • HEAD 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
    • PUT 从客户端向服务器传送的数据取代指定文档中的内容
    • DELETE 请求服务器删除指定的页面
    • CONNECT 把服务器当作跳板,让服务器代替客户端访问其他网页
    • OPTIONS 允许客户端查看服务器的性能
    • TRACE 回显服务器收到的请求,主要用于测试或诊断

请求的网址(Request URL)

  • 请求的网址可以唯一确定我们想请求的资源,关于URL的构成解析如上

请求头(Request Headers)

  • 请求头用来说明服务器要使用的附加信息,比较重要的信息有Cookie、Referer、Uaer-Agent等
  • 常见的头信息:
    • Accept:请求报头域,用于指定客户端可接受哪些类型的信息。
    • Accept-Language:指定客户端可接受的语言类型。
    • Accept-Encoding:指定客户端可接受的内容编码。
    • Host:用于指定请求资源的主机 IP 和端口号,其内容为请求 URL 的原始服务器或网关的位置。从 HTTP 1.1 版本开始,请求必须包含此内容。
    • Cookie:也常用复数形式 Cookies,这是网站为了辨别用户进行会话跟踪而存储在用户本地的数据。它的主要功能是维持当前访问会话。
    • Referer:此内容用来标识这个请求是从哪个页面发过来的,服务器可以拿到这一信息并做相应的处理,如做来源统计、防盗链处理等。
    • User-Agent:简称 UA,它是一个特殊的字符串头,可以使服务器识别客户使用的操作系统及版本、浏览器及版本等信息。在做爬虫时加上此信息,可以****伪装为浏览器;如果不加,很可能会被识别为爬虫。
    • Content-Type:也叫互联网媒体类型(Internet Media Type)或者 MIME 类型,在 HTTP 协议消息头中,它用来表示具体请求中的媒体类型信息。

请求体(Request Body)

  • 请求体一般承载的内容是是POST请求中的表单数据,而对于GET请求,请求体为空。
  • Content-Type 和 POST 提交数据方式的关系:
    在这里插入图片描述

5、响应(Response)

  • 相应:由服务器返回给客户端,可以分为三部分:
    • 相应状态码(Response Status Code)
    • 响应头(Response Headers)
    • 响应体(Response Body)

响应状态码(Response Status Code)

  • 相应状态码:表示服务器的响应状态,如200代表服务器正常相应;404代表页面未找到;500代表服务器内部发生错误。我们可以根据状态码来判断服务器响应状态
  • 常见的错误代码及错误原因
    在这里插入图片描述
    在这里插入图片描述

响应体(Response Body)

  • 响应体:最关键的部分,相应的正文数据都在响应体中。比如请求网页时,它的响应体就是网页的 HTML 代码;请求一张图片时,它的响应体就是图片的二进制数据。我们做爬虫请求网页后,要解析的内容就是响应体。
  • 在做爬虫时,我们主要通过响应体得到网页的源代码、JSON 数据等,然后从中做相应内容的提取。

6、HTTP/2.0

  • HTTP/2.0 在内部实现上新的二进制分帧层,这是没法与之前的 HTTP/1.x 的服务器和客户端实现向后兼容的,所以直接修改了主版本号为 2.0。

二进制分帧层

  • HTTP/2.0 所有性能增强的核心就在于这个新的二进制分帧层。HTTP/2.0 做了优化,将文本格式修改为了二进制格式,使得解析起来更加高效。同时将请求和响应数据分割为更小的帧,并采用二进制编码。

多路复用

  • 在 HTTP/2.0 中,由于又了二进制分帧技术的加持,HTTP/2.0 不用再以来 TCP 连接去实现多路并行了,客户端和服务器可以将 HTTP 消息分解为互不依赖的帧,然后交错发送,最后再在另一端把它们重新组装起来

流量控制

  • 流量控制是一种阻止发送方向接收方发送大量数据的机制,以免超出后者的需求或处理能力。可以理解为,接收方已经太繁忙了,来不及处理收到的消息了,但是发送方还在一直大量发送消息,这样就会出现一些问题。

服务端推送

HTTP/2.0 新增的另一个强大的新功能是,服务器可以对一个客户端请求发送多个响应。 换句话说,除了对最初请求的响应外,服务器还可以向客户端推送额外资源,而无需客户端明确地请求。


http://www.kler.cn/a/316626.html

相关文章:

  • 【学习日记】notebook添加JAVA支持
  • 【Kafka】集成案例:与Spark大数据组件的协同应用
  • 微服务day08
  • react-redux useSelector钩子 学习样例 + 详细解析
  • Nuxt.js 应用中的 schema:beforeWrite 事件钩子详解
  • 【FFmpeg】FFmpeg 函数简介 ③ ( 编解码相关函数 | FFmpeg 源码地址 | FFmpeg 解码器相关 结构体 和 函数 )
  • 数据结构--单链表创建、增删改查功能以及与结构体合用
  • Java 入门指南:JVM(Java虚拟机)—— 双亲委派模型(Parent Delegation Model)
  • 2024短剧系统开发,付费短剧小程序app源码教程,分销功能讲解搭建上线
  • 【UI自动化】前言
  • 服务器相关问题
  • 机器学习及其应用领域【金融领域】
  • css 控制虚线刻度尺寸
  • 【手写数据库内核组件】1001词法分析器,语言被程序识别的第一步,将语句分解为最小词根token
  • Qt 模型视图(二):模型类QAbstractItemModel
  • 可智能生成刺绣图案!武汉纺织大学可视计算与数字纺织团队发布首个多缝线刺绣生成对抗网络模型,被顶级期刊 TVCG 录用
  • 后端开发刷题 | 最长无重复子数组
  • ArcGIS Pro SDK (十六)公共设施网络 1 网络管理
  • 人工智能与机器学习原理精解【22】
  • 深度学习-16-深入理解BERT基于本地数据微调训练文本分类模型的流程
  • SQL语法学习指南
  • 9月23日
  • Shiro rememberMe反序列化漏洞(Shiro-550) 靶场攻略
  • 水下攻防面试题
  • 『功能项目』QFrameWork拾取道具UGUI【69】
  • 深度学习速通系列:什么是文本数据标注