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响应,常见的属性目录博客
希望你看完这篇博客之后,能点击这个博客链接,再学习其他的常见属性。
提前说明:请求头 和 响应头,两个都可以叫做报头。
本篇博客,我们主要介绍 请求头 中的两个常见属性:
- Referer
- 状态码
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 请求,去访问这个方法。
但是,你请求这边的方法,使用的是 Post,Post ≠ 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. 总结
本篇博客,我们主要介绍了:
- Referer 的作用
- Referer 的使用场景
- 什么是状态码 & 状态码的作用
- 状态码的类型
这些 HTTP 报文格式的内容,我们都要重点掌握,如果你以后从事的是计算机行业的工作,面试的时候,是一定会问你这些问题的。
HTTP请求 和 HTTP响应,其他常见属性的讲解博客,我编写了一个博客,里面存放着其他常见属性的博客链接:
网络原理(✨✨✨):HTTP协议 – HTTP请求和HTTP响应,常见的属性目录博客
希望你看完这篇博客之后,能点击这个博客链接,再学习其他的常见属性。
最后,如果这篇博客能帮到你的,请你点点赞,有写错了,写的不好的,欢迎评论指出,谢谢!
版权声明:本文标题:网络原理(6):HTTP请求 -- HTTP报头(Referer,状态码) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1765177918a3355131.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论