写点什么

一文带你了解 HTTP

作者:喀拉峻
  • 2021 年 11 月 21 日
  • 本文字数:1705 字

    阅读完需:约 6 分钟

01-01 HTTP 协议

HTTP 就是 Web 通信时使用的协议,也是 Web 建立的基础;是网络上应用最广的一种协议。

什么是 HTTP?

又称超文本传输协议;Hyper Text Transfer Protocol;

为了了解这一协议的过程,我们设想一下快递小哥的工作:

快递小哥首先通过货车派送货物,当货物送到我们的收货地址的时候,快递小哥就会打电话联系我们,说是某某公司的快递员,要我们来取件。

如果要让快递小哥送进小区里面,我们就需要告诉物业准许他进入,相当于给他颁了个通行证;

当快递小哥将货物送到我们手上,我们需要签收,快递小哥拿到快递单,就完成了一次快递任务。

HTTP 协议类似。

浏览器:快递小哥

快递小哥通过货车送货:浏览器通过 Get 方式发送请求。

HTTP 中的 Host 就相当于“收件人地址”;

User-Agent 就相当于快递小哥所处的公司;

HTTP 包含的 Cookie 就相当于能够进入我们小区的凭证。

当服务器收到浏览器的 HTTP 请求后,会返回一个状态码(对应收到这个事实)和相应内容(对应已签收的字据)。状态码为 200 表示正常收到(状态码可以在上文中/前一篇的开发者工具的网络中查看)

可以看到 HTTP 协议的请求和响应包含了一些特殊的属性,包含方式、User-Agent、Host、返回的状态码等等;

这些都属于 HTTP 的报文。

什么是 HTTP 的报文?

分为三部分:起始行、头、身体



左边,是浏览器发送的 HTTP 请求报文,右边是服务器返回的 HTTP 请求报文;

  • 左侧

    第一行:请求行 Request Line

    之后:是我们的头部 Headers;

    下面:应该是我们的数据体,但由于是 GET 请求,没有数据体

    注意头部和数据体之间是有一个空行的。

  • 右侧

    比如:HTTP/1.1 200 OK

    第一行:状态行;

    头部

    主体:也就是响应的正文

    注意响应的头部和主题之间也是有一行空行的。

HTTP 请求示例

比如一个发帖的 HTTP 请求

当我们进行发帖的时候,我们的请求报文和响应报文如下:



  • 请求

    就是要发布的帖子的相关内容

    相较于上面,多了一个 Cookie 字段,就是前面提到的用户凭证,相当于告诉服务器,是我发的这个帖子。

    黑客就比较喜欢获取这个 Cookie 凭证,如果获取,就拥有了“我”的凭证,可以以“我”的身份发帖。

    后面会接触一些这方面的安全漏洞。

    这里是 POST

    第一行:请求行

    Headers

    也有了数据体

HTTP 请求的其他方法

  • HEAD

    与 GET 请求类似,不同是只返回 HTTP 的头部信息,没有数据体,也就没有页面内容。

  • PUT

    上传指定的 URL 描述

  • DELETE

    删除指定资源

  • OPTIONS

    返回服务器支持的 HTTP 方法

01-02 HTTP 头的 Referer

这是除了 HTTP 请求方式和 Cookie 的概念外,另一个重要概念。

Referer 就是告诉服务器,我们从什么地方来(即告诉物业我们是哪个快递公司的);

举例:

我们通过https://m.study.163.com/直接跳转到页面。和从 bing 主页搜索云课堂再进入,开发者工具中显示的 HTTP 请求是不同的,后者会多一个 Referer 头,表示是从 bing 的这个链接来的。

如图;图一是直接跳转;图二是搜索跳转;

直接跳转 Rerfer



搜索跳转的 Rerfer 与之不同。



所以由于 Referer 可以告诉服务器该次请求的来源,所以很多 Web 服务器会通过 Referer 来进行统计(比如 CNZZ、百度统计)

从安全的角度来讲,Referer 还可以用来判断来源是否合法。

(比如:

  • 防止盗链

    比如一些网站不想被盗用内容或恶意引用,就会通过 Referer 限制来者

  • 防止 CSRF 漏洞

    (暂不了解

01-03 HTTP 状态码

302 --跳转

比如:在响应报文的状态行(第一行)

HTTP/1.1 302 Moved Temporarily
复制代码

在跳转同时,还会在响应报文的 Headers 部分有一个 Location 字段,是跳转到的 URL 地址,也就是这个响应报文告诉我们,我们需要跳转到 Location 中的 URL 地址。

除了这两处,还会有 Set-Cookie 字段,作用是 Web 服务器向我们的浏览器颁发凭证,比如我们通过用户名密码登录成功后,Web 服务器通常就会给我们颁发一个凭证。

类似的是 301。

除此之外,还包括 10x,20x,30x,40x,50x;每个状态码都代表不同的意思。

具体的状态码可以到后面再学习,或用到查看。

01-04 实例演示

我们打开 Edge 浏览器,输入https://www.cnblogs.com/Roboduster



我们用 F12 打开开发者工具,进入“网络”,刷新一下,查看“文档”,选中 head 头,可以看到有请求头、响应头,点击就可以看源码,有一些是上面讲过的,还有些字段是不熟悉的。这些字段可以自行查阅。



除了 HEADER 外,我们可以看一看响应的具体内容,在左侧的“响应”中;Cookie 中有请求的 Cookie 等等。

用户头像

喀拉峻

关注

左手Java右手Python,中间纹个C++ 2021.06.26 加入

还未添加个人简介

评论

发布
暂无评论
一文带你了解HTTP