admin 管理员组

文章数量: 1184232

网络原理(6):HTTP请求 – HTTP报头(Referer,状态码)

文章目录

    • 网络原理(6):HTTP请求 -- HTTP报头(Referer,状态码)
  • 观前提醒
  • 1. Referer
    • 1.1 作用(记录当前页面的来源):
    • 1.2 演示:
      • 直接输入 URL
      • 页面跳转
    • 1.3 使用场景:
      • 篡改 Referer
  • 2. 状态码
    • 2.1 什么是状态码 & 状态码的作用
    • 2.2 状态码的类型
      • 200 OK
      • 404 Not Found
      • 403 Forbidden
      • 405 Method Not Allowed
      • 500 Internal Server Error
      • 504 Gateway Timeout
      • 302 Move temporarily
    • 2.3 状态码总结
  • 3. 总结

观前提醒

如果你对 http协议 的基本格式,有所了解的,可以直接看这篇博客。

如果你还不懂 http协议 以及 http协议 的基本格式,推荐你看完这篇博客再来看这篇博客:
网络原理(2):TCP/IP五层模型 – 应用层(HTTP协议初识)

同时,关于 HTTP请求 和 HTTP响应,其他常见属性的讲解博客,我编写了一个博客,里面存放着其他常见属性的博客链接:
网络原理(✨✨✨):HTTP协议 – HTTP请求和HTTP响应,常见的属性目录博客
希望你看完这篇博客之后,能点击这个博客链接,再学习其他的常见属性。


提前说明:请求头 和 响应头,两个都可以叫做报头

本篇博客,我们主要介绍 请求头 中的两个常见属性:

  1. Referer
  2. 状态码

1. Referer

1.1 作用(记录当前页面的来源):

Referer:描述了当前页面的来源,也就是,这个页面是从哪个页面跳转过来的(当前页面的上一个页面)。

Referer并不是所有的请求中都会有的
比如:你直接输入 URL 访问网站,或者点击收藏栏中的网站
请求数据中,是没有 Referer 这个属性的。

1.2 演示:

直接输入 URL

我们来演示一下:
我们直接在 浏览器 输入 www.sogou

跳转页面,通过 Fiddler 抓取 HTTP请求

页面跳转

如果我们从 搜狗 网页,搜索内容并跳转页面,此次的 HTTP请求 中,就会有 Referer。

比如,我搜索一个 NBA:

Referer: https://www.sogou/

表示当前页面,是从 www.sogou 这个网站,跳转过来的。

你可以自己试一试。
至于 Fiddler 的安装 和 使用方式,你可以看我的这两篇博客:
抓包工具:Fiddler 的安装
Fiddler 的简单使用,使用Fiddler 查看请求和响应

1.3 使用场景:

以 广告系统 为例子来说。

但我们访问网站(搜狗,百度这种),总是会有广告,这类的广告,通常是按点击收费的。

通过点击次数,统计某个广告,在一定时间(例如:一个月)内,一共点击了多少次,来结算费用。
统计次数这件事,不仅仅要平台这边来进行统计,还需要广告主那边,也统计,最后两边要对数字

平台,就以搜狗为例:
搜狗的统计方式,很容易。
用户点击广告跳转的时候,先访问的是搜狗的 “计费服务器”,再从 “ 计费服务器 ” 跳转广告页面
“ 计费服务器 ” ,会记录日志,通过统计日志条数,统计点击次数

广告主这边,也会有专门的服务器,来记录日志
广告主 的服务器,接受到一条请求之后,就需要知道,这条请求,是从哪个平台来的,是从 搜狗、百度、360、还是其他平台?
此时,就需要做出区分,需要知道,这个请求,来自哪个平台的。

怎么区分?
正是通过 Referer 这样的方式,通过 Referer 记录的上一个页面链接,是搜狗的、百度的、360的,还是其他的,来区分不同的平台
根据 Referer ,来统计不同平台,这个广告的点击次数,就可以了。

最后,广告主,跟不同的平台对数就可以了。

篡改 Referer

那么,是否有一种可能,有人把 Referer 给篡改了呢?
本来是 搜狗 的 Referer,改成别人的 Referer?
答:2014年的时候,这种情况,非常普遍。

Referer 被篡改,对于广告平台(搜狗,百度这些),就会造成一定的损失(点击次数,两边对不上)。

那么,到底是谁,可以改掉 Referer 呢?
答:国内的三大运营商(移动,电信,联通)

运营商改动 Referer 这种事情,也叫做:运营商劫持!!!
翻译成白话:抢劫!!!
抢劫,是不论金额的,哪怕你抢了 5 块钱,100% 是要判刑的。

那么,运营商有能力改吗?
答:有能力
用户上网的时候,HTTP请求,都是先经过运营商的 路由器 / 交换机,再到达 服务器 的
运营商就可以在 路由器 / 交换机 安装一些软件,通过软件,分析数据流量,把一些广告的数据的 HTTP数据包 进行修改,就可以了。

运营商为什么要这样干呢,有什么动机?
答:运营商,也是有自己的广告平台的。
换句话说:运营商 和 搜狗、百度这类广告平台,是竞争关系

这样的抢劫行为,在2014年,互联网还是新鲜东西,当时的相关法律条纹,是不完善的。
搜狗、百度、360,这样的广告平台,如果要起诉,打官司的话,肯定是能赢的,但是,过程会很麻烦,很复杂,消耗很多的精力。

后续,百度就拉着其他的广告平台(搜狗,360)一起,把广告平台,从 HTTP 升级到 HTTPS。
HTTPS协议,能够有效的对 HTTP数据报 进行加密传输,Referer 也被加密了。

至于什么是 HTTPS,在这篇博客,会讲到:
网络原理(9):HTTPS协议初识

HTTPS协议,这种技术,被证实是可行之后,其他中小公司,纷纷跟进,到2024年的今天,互联网上,基本都是 HTTPS协议 的网站,很难找到纯 HTTP 的网站了。

2. 状态码


这张图中,首行中的 200,就是一个状态码。

2.1 什么是状态码 & 状态码的作用

状态码:描述了我们本次的请求得到的响应结果,是正确,还是出错,以及出错是什么原因。

直接开讲,可能大家不一定能理解到位,我们就先举一个生活中的例子:洗衣机

随着时代科技的进步,现在的洗衣机,发展迅速,有的洗衣机,可能都是通过液晶屏来操作了。
我们要用来举例的洗衣机,不是这种,而是老式的:

这种洗衣机,当你洗衣服洗到一半时,可能会报错,洗衣机停止工作,液晶屏会显示 “E02”。(不同的洗衣机,可能会不一样,我这里只是举个例子,不要钻牛角尖)
显示 “E02”,这是一种错误码,这个错误码,表示的意思是:洗衣服过程中,洗衣机的上面的盖子,被打开了,不紧。
这个时候,我们需要把上面那个盖子,给它压实了,消除这个警告,洗衣机才会继续正常工作。

洗衣机出现这种情况,是对我们的一种保护,以免洗衣机高速转动时,你打开上盖,被衣服拉住,出现安全事故。
出现错误码,也是在提示我们,洗衣机停止工作,是因为什么原因。

这就是一种 “状态码”,它是一种返回 出错原因 的关键手段。
状态码,对于程序员,用户来说,都是一种 提示 错误信息的有效手段。

2.2 状态码的类型

接下来,我们来了解以下,不同类型的状态码,都有哪些,又都表示什么信息。

我们可以通过搜狗,搜索一下,状态码,都有哪些:
https://baike.sogou/v7867442.htm?ch=frombaikevr&fromTitle=HTTP%E7%8A%B6%E6%80%81%E7%A0%81

我们放眼望过去,好像有几十个,难道都要记住吗?
其实不是,我们只需要掌握其中几个常见就可以了。

至于遇见少见的,之后查一下就可以了。

200 OK

200,最常见的状态码。
200:表示成功。

404 Not Found

404:表示访问的资源,没有找到。

什么叫访问的资源?
之前在讲 URL 的时候,我们说:
ip:定位到主机(服务器)
port(端口号):定位到程序
path(路径):定位到程序管理的资源

404 就表示:path 访问的资源,在服务器上没有

假如,我现在在 搜狗 的网址上,加上 abc.html 看一下效果:


用户输入的 URL 有问题,搜狗的服务器,没有 abc.html 这个资源,所以,就会出现 404。

我们再使用 B站 的网址,访问一个不存在的资源:


你看到的这个页面,好像是有图片的,但是,这其实还是一个 404 页面。

状态码,即使是有错误的,也可以在 body 中,返回一些 html之类的,一些公司,会对 404 这个页面,进行一定的编辑,美化

403 Forbidden

403:表示访问被拒绝(没有权限)

如何能够在网站上,看到这种状态码?
举一个典型的例子:访问 gitee私有仓库
链接:https://gitee/HGtz2222/blog_python
这是一个别人的私人仓库,只有它本人能够访问,如果是别人通过 URL,来访问他的私有仓库,就会出现 403

点击上面的链接,结果:

405 Method Not Allowed

405:方法不匹配
网上,找别人的网站出现 405,是比较难找的。
如果是我们自己开发一个网站,是比较容易出现的。

我目前还没有自己开发一个网站,没法演示给你们看,只能以文字的形式,讲一下
假如,你服务器这边,某一个方法的注解是 @GetMapping
要使用 Get 请求,去访问这个方法
但是,你请求这边的方法,使用的是 PostPost ≠ Get,方法不匹配,就会出现 405

500 Internal Server Error

500:服务器出现错误
一般是服务器的代码执行过程中,遇到了一些特殊情况(服务器异常崩溃)会产生这个状态码。
典型的错误就是:服务器处理逻辑的代码,抛出了异常,你没有 catch 到。

这个 500,同样,在别人的网站上找,很难找到。

500 这个状态码,一般是 程序员 进行开发的时候,经常遇见的一个状态码
你们可以试试,在编写一个 Springboot 程序的时候,随便搞一个 空指针 异常,就会有 500 显示。

504 Gateway Timeout

504:当服务器负载比较大的时候服务器处理单条请求的时候消耗的时间就会很长,就可能会出现 超时 的情况。

典型场景:你学校的选课系统
特别是开始选课那个点,一大堆的访问请求,涌向这个服务器,服务器的负载很大,就有可能出现超时的情况。

这里,我们还需要解释一下,Gateway 是什么意思。
Gateway 叫做:网关

什么叫网关
你可以理解为:网络的入口

我们访问的网站,知名点的,B站,它的服务器,并不仅仅只是一台电脑,而是一个服务器集群(多个服务器组成)。
B站,它的服务器机房里,存放着大量的服务器,是一个大型的服务器集群。

当我们发送请求给 B站 服务器的时候,这个服务器集群中,肯定会有一个入口服务器,由入口服务器把请求再转发给其他的服务器。
那么这个入口服务器,就可以认为是:网关

网关,这个词语,是一个比较广泛的词,它能表示东西,挺多

网关,可以是一个软件,也可能是一个专门的机器……
我们上述说的,并没有说:
网关是一个 XXXX(软件,硬件机器)
而是:
XXX(软件,硬件机器)可以认为是一个 网关

302 Move temporarily

302:临时重定向

重定向,这个词,是什么意思?
就相当于手机号码中的 “呼叫转移” 功能
比如:我本来的手机号是 186-1234-5678,后来换了个新号码,135-1234-5678,那么不需要让我的朋友知道新号码,
只要我去办理一个呼叫转移业务,其他⼈拨打 186-1234-5678,就会自动转移到 135-1234-5678 上

回到服务器上来说:
比如我要访问一个服务器A到达 服务器A之后,发生重定向,访问到了 服务器B

再比如:某一个网站,迁移 域名。

假如,旧域名是:abcd
现在,新域名是:efgh
如果,我们直接将域名进行迁移了,那么,之前,收藏了这个网站的人,存储的是旧域名,通过旧域名,就没法访问到之前那个网站了。

服务器,已经架设在新的域名上了,我们可以给旧域名,设置重定向,重定向到新域名
后续,别人访问新域名,当然能找到这个网站。
访问旧域名,就会发生重定向,自动跳转到新域名表示的网站
这就是重定向。

2.3 状态码总结

以上,可以认为,是我们应该掌握的一些,常见的状态码。

从这张图,我们也可以看到,状态码,有很多,但是,我们可以根据状态码的前缀,来进行记忆

2XX:都是可以认识是成功
3XX:都是重定向
4XX:客户端错误(请求有问题,比如:参数错误,路径错误,格式错误)(通过浏览器访问服务器)
5XX:服务器错误(服务器端代码,存在 bug)

3. 总结

本篇博客,我们主要介绍了:

  1. Referer 的作用
  2. Referer 的使用场景
  3. 什么是状态码 & 状态码的作用
  4. 状态码的类型

这些 HTTP 报文格式的内容,我们都要重点掌握,如果你以后从事的是计算机行业的工作,面试的时候,是一定会问你这些问题的。

HTTP请求 和 HTTP响应,其他常见属性的讲解博客,我编写了一个博客,里面存放着其他常见属性的博客链接:
网络原理(✨✨✨):HTTP协议 – HTTP请求和HTTP响应,常见的属性目录博客
希望你看完这篇博客之后,能点击这个博客链接,再学习其他的常见属性。

最后,如果这篇博客能帮到你的,请你点点赞,有写错了,写的不好的,欢迎评论指出,谢谢!

本文标签: 报头 原理 状态 网络 http