【Python网络蜘蛛】:基础 - HTTP基本原理

本文介绍了HTTP的基本原理,包括URI和URL的概念,HTTP与HTTPS的区别,HTTP请求过程的详细步骤,并通过Chrome浏览器的Network工具进行了实际演示。此外,文章还深入讲解了HTTP请求的组成部分,如请求方法(GET和POST)、请求头和请求体,以及响应状态码和响应头的重要作用。同时,讨论了Cookie在请求和响应中的角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.1 HTTP基本原理


1. URI和URL

URI为统一资源标识符,URL为统一资源定位符。
举个例子理解:http://github.com/favicon.ico 既是一个URI,也是一个URL,即有一个图标资源favicon.ico,我们用URI/URL指定了访问它的唯一方式,其中包括访问协议https、访问路径和资源名称。通过一个链接,便可以从互联网中找到某个资源,这个链接就是URI/URL。

URL是URI的子集,即每个URL都是URI,但并非每个URI都是URL。

2. HTTP和HTTPS

在爬虫中,我们抓取的页面通常是基于http或https协议的。

HTTP:中文名为超文本传输协议,其作用是把超文本数据从网络传输到本地浏览器,能够保证高效而准确地传输超文本文档。

HTTPS:全称是Hypertext Transfer Protocol over Secure Socket Layer,是以安全为目标地HTTP通道,简单讲就是HTTP的安全版,即在HTTP下加入SSL层,简称HTTPS。
(HTTPS的安全基础是SSL,因此通过该协议传输的内容都是经过SSL加密的)

3. HTTP请求过程

在浏览器地址栏中输入一个URL,按下回车之后便可观察到对应的页面内容。实际上,这个过程是浏览器先向网站所在的服务器发送一个请求,网站服务器接收到请求后对其进行处理和解析,然后返回对应的响应,接着传回浏览器。
在这里插入图片描述

为了更直观地说明上述过程,这里用Chrome浏览器开发者模式下的Network监听组件来做一下演示。

打开Chrome浏览器,访问百度,鼠标右键,点击“检查”,点击Network
在这里插入图片描述

先观察第一个网络请求,即www.baidu.com,其中各列的含义如下。

  • 第一列Name:请求的名称。一般用URL的最后一部分内容作为名称。
  • 第二列Status:响应的状态码。这里显示为200,代表响应是正常的。通过状态码,我们可以判断发送请求之后是否得到了正常的响应。
  • 第三列Protocol:请求协议类型。这里http/1.1代表HTTP1.1版本,h2代表HTTP2.0版本。
  • 第四列Type:请求的文档类型。这里document,代表我们这次请求是一个HTML文档,内容是一些HTML代码。
  • 第五列Initiator:请求源。用来标记请求是由哪个对象或进程发起的。
  • 第六列Size:从服务器下载的文件或请求资源的大小。如果资源是从缓存中取得的,则该列会显示from cache。
  • 第八列Waterfall:网络请求的可视化瀑布流。

4. 请求

请求分为四部分内容:请求方法(Request Method)、请求的网址(Request URL)、请求头(Request Headers)、请求体(Request Body)。

4.1 请求方法
用于标识请求客户端请求服务端的方式,常见的请求方法有两种:GET和POST
举例理解:在百度引擎中搜索Python就是一个GET请求,链接为 http://www.baidu.com/s?wd=Python,其中URL中包含了请求的query信息,这里的参数wd表示要搜寻的关键字。POST请求大多在提交表单时发起。例如,对于一个登录表单,输入用户名和密码后,单击“登录”按钮,这时通常会发起一个POST请求,其数据通常以表单的形式传输,而不会体现在URL中。

GET和POST请求方法的区别:
GET请求中的参数包含在URL里面,数据可以在URL中看到;而POST请求的URL不会包含这些数据,数据都是通过表单形式传输的,会包含在请求体中。

方法描述
GET请求页面,并返回页面内容
HEAD类似于GET请求,只不过返回的响应中没有具体内容。用于获取报头
POST大多用于提交表单或上传文件,数据包含在请求体中
PUT用客户端传向服务器的数据取代指定文档中的内容
DELETE请求服务器删除指定的页面
CONNECT把服务器当作跳板,让服务器代替客户端访问其他页面
OPTIONS允许客户端查看服务器性能
TRACE会显示服务器收到的请求。只要用于测试或诊断

4.2 请求的网址
请求的网址,它可以唯一确定客户端想请求的资源,即URL。

4.3请求头
简要说明一些常用的请求头信息:

  • Accept:请求报头域,用于指定客户端可接受哪些类型的信息。
  • Accept-Language:用于指定客户端可接受的语言类型。
  • Accept-Encoding:用于指定客户端可接受的内容编码。
  • Host:用于指定请求资源的主机IP和端口号,其内容为请求URL的原始服务器或网关的位置。从 HTTP1.1版本开始,请求必须包含此内容。
  • Cookie:也常用复数形式Cookies,这是网站为了辨别用户,进行会话跟踪而存储在用户本地的数据。它的主要功能是维持当前访问会话。例如,输入用户名和密码成功登录某个网站后,服务器会用会话保存登录状态信息,之后每次刷新或请求该站点的其他页面,都会发现处于登录状态,这就是Cookie的功劳。Cookie里有信息标识了我们所对应的服务器的会话,每次浏览器在请求该站点的页面时,都会在请求头中加上 Cookie并将其发送给服务器,服务器通过Cookie识别出是我们自己。并且查出当前状态是登录状态,所以返回结果就是登录之后才能看到的网页内容。
  • Referer:用于标识请求是从哪个页面发过来的,服务器可以拿到这一信息并做相应的处理,如做来源统计、防盗链处理等。
  • User-Agent:简称UA,这是一个特殊的字符串头,可以使服务器识别客户端使用的操作系统及版本、浏览器及版本等信息。做爬虫时如果加上此信息,可以伪装为浏览器;如果不加,很可能会被识别出来。
  • Content-Type:也叫互联网媒体类型(Internet Media Type)或者MIME类型,在HTTP协议消息头中,它用来表示具体请求中的媒体类型信息。例如,text/html代表HTML格式,image/gif代表GIF图片,application/json代表JSON类型。

4.4 请求体
请求体,一般承载的内容是POST请求中的表单数据,对于GET请求,请求体为空。

例如,登录GitHub时捕获到的请求和响应如下图所示:
在这里插入图片描述

登录之前,需要先填写用户名和密码信息,登录时这些内容会以表单数据的形式提交给服务器,此时需要注意Request Headers 中指定Content-Type 为 application/x-www-form-urlencoded。只有这样设置Content-Type,内容才会以表单数据的形式提交。另外,也可以将Content-Type 设置为application/json来提交json数据,或者设置为multipart/form-data来上传文件。

Content-TypePOST提交数据的方式
application/x-www-form-urlencoded表单数据
multipart/form-data表单文件上传
application/json序列化JSON数据
text/xmlXML数据

5. 响应

5.1 响应状态码
常见的错误状态码及错误原因:

状态码说明详情
100继续请求者应当继续提出请求。服务器已校仅到明小·即力、I正在等待其余部分
101切换协议请求者已要求服务器切换协议,服务器已确认并准备切换
200成功服务器已成功处理了请求
201已创建请求成功并且服务器创建了新的资源
202已接收服务器已接收请求,但尚未处理
203非授权信息服务器已成功处理了请求,但返回的信息可能来自另一个源
204无内容服务器成功处理了请求,但没有返回任何内容
205重置内容服务器成功处理了请求,内容被重置
206部分内容服务器成功处理了部分请求
300多种选择针对请求,服务器可执行多种操作
301永久移动请求的网页已永久移动到新位置,即永久重定向
302临时移动请求的网页暂时跳转到其他页面,即暂时重定向
303查看其他位置如果原来的请求是POST,重定向目标文档应该通过GET提取
304未修改此次请求返回的网页未经修改,继续使用上次的资源
305使用代理请求者应该使用代理访问该网页
307临时重定向临时从其他位置响应请求的资源
400错误请求服务器无法解析该请求
401未授权请求没有进行身份验证或验证未通过
403禁止访问服务器拒绝此请求
404未找到服务器找不到请求的网页
405方法禁用服务器禁用了请求中指定的方法
406不接收无法使用请求的内容响应请求的网贝
407需要代理授权请求者需要使用代理授权
408请求超时服务器请求超时
409冲突服务器在完成请求时发生冲突
410已删除请求的资源已永久删除
411需要有效长度服务器不接收不含有效内容长度标头字段的请求
412未满足前提条件服务器未满足请求者在请求中设置的某一个前提条件
413请求实体过大请求实体过大,超出服务器的处理能力
414请求URI过长请求网址过长,服务器无法处理
415不支持类型请求格式不被请求页面支持
416请求范围不符页面无法提供请求的范围
417未满足期望值服务器未满足期望请求标头字段的要求
500服务器内部错误服务器遇到错误,无法完成请求
501未实现服务器不具备完成请求的能力
502错误网关服务器作为网关或代理,接收到上游服务器的无效响应
503服务不可用服务器目前无法使用
504网关超时服务器作为网关或代理,没有及时从上游服务器接收到请求
505HTTP版本不支持服务器不支持请求中使用的HTTP协议版本

5.2 响应头
响应头,包含了服务器对请求的应答信息,如Content-Type、Server、Set-Cookie等。下面简要说明一些常用的响应头信息。

  • Date:用于标识响应产生的时间。
  • Last-Modified:用于指定资源的最后修改时间。
  • Content-Encoding:用于指定响应内容的编码。
  • Server:包含服务器的信息,例如名称、版本号等。
  • Content-Type:文档类型,指定返回的数据是什么类型,如 texthtml 代表返回 HTML 文档,application/x-javascript代表返回JavaScript文件,image/jpeg代表返回图片。
  • Set-Cookie:设置Cookie。响应头中的Set-Cookie用于告诉浏览器需要将此内容放在Cookie中,下次请求时将Cookie携带上。
  • Expires:用于指定响应的过期时间,可以让代理服务器或浏览器将加载的内容更新到缓存中。当再次访问相同的内容时,就可以直接从缓存中加载,达到降低服务器负载、缩短加载时间的目的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

街 三 仔

你的鼓励是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值