任务一什么是HTTP(S)?

什么是HTTP?(超文本传输协议)

HTTP 是你浏览网站时所使用的代码,由 Tim Berners-Lee 和他的团队在 1989 年至 1991 年间开发。HTTP 是一套用于与网页服务器通信的规则,用于传输网页数据,无论是 HTML、图片、视频等。

什么是HTTPS? (超文本传输协议安全)

HTTPS是HTTP的安全版本。 HTTPS数据是加密的,不仅阻止别人看到你接收和发送的数据,还能保证你对应的是正确的网络服务器,而不是被冒充的服务器。

任务二请求与回应

当我们访问网站时,你的浏览器需要向网络服务器请求资源,如HTML、图片,并下载响应。在此之前,你需要明确告诉浏览器如何以及在哪里访问这些资源,这时 URL 会很有帮助。

什么是URL?(统一资源定位器)

如果你用过互联网,你以前用过网址。URL 主要是关于如何在互联网上访问资源的说明。下图展示了URL及其所有功能的样貌(它并非在每个请求中使用所有功能)。

一个示例中显示URL不同部分的图示,http是方案,user:password是用户,tryhackme.com 是域或主机,80是端口,view-room是路径,?id=1是查询字符串,#task3 是片段。完整地址为 http://user:password@tryhackme.com:80/view-room?id=1#task3。

方案: 这会指导使用哪种协议访问资源,比如HTTP、HTTPS、FTP(文件传输协议)。

用户: 有些服务需要身份验证才能登录,你可以在URL里输入用户名和密码登录。

主持人: 你想访问服务器的域名或IP地址。

移植版: 你要连接的端口通常是 HTTP80,HTTPS为443,但它可以托管在1到65535之间的任意端口上。

路径: 你试图访问的资源的文件名或位置。

查询字符串: 可以发送到请求路径的额外信息。比如,/blog?id=1 会告诉博客路径你希望接收 ID 为 1 的博客文章。

片段: 这是对实际页面上某个地点的引用。这通常用于内容较长的页面,并且可以直接链接页面的某个部分,这样用户一进入页面就能立即查看。

提出请求

完全可以用一行 GET / HTTP/1.1 向 Web 服务器发出请求

但要获得更丰富的网页体验,你还需要发送其他数据。这些数据通过称为头部(headers)的形式发送,头部包含额外信息,供你通信的网页服务器使用,但我们会在头部任务中详细介绍。

示例请求:

GET / HTTP/1.1

Host: tryhackme.com
User-Agent: Mozilla/5.0 Firefox/87.0
Referer: https://tryhackme.com/

以下是请求的每一句:

第一行: 该请求发送的是 GET 方法(HTTP 方法任务中有更多内容),请求主页,并告知 Web 服务器我们使用 HTTP 协议版本 1.1。

第二行: 我们告诉网页服务器我们想要网站的 tryhackme.com

第三行: 我们告诉网页服务器我们使用的是Firefox 87版浏览器

第4行: 我们告诉网页服务器,推荐我们访问的网页是 https://tryhackme.com

第5行:HTTP 请求总是以空行结尾,告知 Web 服务器请求已完成。

任务三HTTP 方法

HTTP 方法是客户端在发送 HTTP 请求时显示其预期作的一种方式。HTTP 方法很多,但我们会介绍最常见的,主要还是 GET 和 POST 方法。

获取请求-GET Request

这用于从网络服务器获取信息。

发布请求-POST Request

这用于向网页服务器提交数据,并可能创建新记录

更新请求-PUT Request

这用于向网络服务器提交数据以更新信息

删除请求-DELETE Request

这用于从网络服务器中删除信息/记录。

任务四HTTP 状态码

HTTP状态代码:

在之前的任务中,你学到当 HTTP 服务器响应时,第一行总包含状态码,告知客户端请求的结果以及可能的处理方法。这些状态代码可以分为五个不同的范围:

100-199 - 信息响应 这些请求是用来通知客户请求的第一部分已被接受,并应继续发送剩余请求。这些代码现在已经不常见了。
200-299 - 成功 这段状态代码用于告诉客户端他们的请求已成功。
300-399 - 重定向 这些工具用于将客户端的请求重定向到其他资源。这可以是去到不同的网站,也可以是完全不同的网站。
400-499 - 客户端错误 用来通知客户他们的请求有错误。
500-599 - 服务器错误 这通常用于服务器端发生的错误,通常表示服务器处理请求时存在较大的问题。

常见的HTTP状态码:

HTTP 状态码有很多种,这还不包括应用程序可以自定义的状态码,我们将介绍你最可能遇到的最常见的 HTTP 响应:

200 - 好的 该请求已成功完成。
201年 - 创建 已经创建了一个资源(例如新用户或新博客文章)。
301 - 永久搬迁 这会将客户的浏览器重定向到新的网页,或者告诉搜索引擎该页面已移动到其他地方,要求他们去那里查看。
302 - 发现 类似于上述永久重定向,但顾名思义,这只是暂时的变化,未来可能还会再次更改。
400 - 糟糕的请求 这告诉浏览器他们的请求中存在问题或缺失。有时如果被请求的网页服务器资源期望某个参数,而客户端未发送,这种方法有时可以使用。
401 - 未授权 目前,未经网页应用授权(通常需用户名和密码)你无法查看该资源。
403 - 禁忌 无论您是否登录,您都无权查看本资源。
405 - 不允许使用方法 资源不允许该方法请求,例如,你向资源/create-account发送GET请求,而它本应接收POST请求。
404 - 页面未找到 你请求的页面/资源不存在。
500 - 内部服务错误 服务器遇到了你的请求出现了某种错误,不知道该如何正确处理。
503 - 服务不可用

这台服务器无法处理你的请求,因为它要么过载,要么正在维护中停机。

如果你是视觉型学习者,也可以看看一个很棒的 http.cat 资源来学习状态码。现在,点击右侧的“查看网站”按钮,看看浏览器中这些HTTP状态消息的样子。

任务5请求头

头部是你在请求时可以发送给网页服务器的额外数据。

虽然发送HTTP请求时不强制要求使用头部,但你会发现很难正确浏览网站。

通用请求头

这些是客户端(通常是浏览器)发送给服务器的头部。

主持人:有些服务器托管多个网站,所以通过提供主机头,你可以告诉它你需要哪个网站,否则你只能收到服务器的默认网站。

用户代理:这是你的浏览器软件和版本号,告诉网页服务器你的浏览器软件帮助它正确格式化网站,同时 HTML、JavaScript 和 CSS 的某些元素仅在特定浏览器中可用。

内容长度:当向网页服务器(如表单)发送数据时,内容长度告诉服务器应预期网络请求中的数据量。这样服务器可以确保没有遗漏任何数据。

接受编码:告诉网页服务器浏览器支持哪些类型的压缩方法,以便通过互联网传输时数据更小。

cookie发送到服务器的数据以帮助记忆您的信息(详情请参见 cookies 任务)。

通用响应头

这些是服务器在请求后返回给客户端的头部。

套装饼干:存储信息,每次请求都会返回到网络服务器(更多信息请参见 cookies 任务)。

缓存控制:在浏览器缓存中存储响应内容多久后,才会再次请求。

内容类型:这告诉客户返回的是哪种类型的数据,比如 HTML、CSS、JavaScript、图片、PDF、视频等。通过内容类型头,浏览器就能知道如何处理数据。

内容编码: 通过互联网传输数据时,采用了什么方法压缩数据以使其更小?

任务6cookie

你可能听说过cookie,它们只是存储在你电脑上的一小块数据。当你从某个网页服务器收到“设置Cookie”头时,Cookie会被保存。然后你每发出一次请求,就会将cookie数据返回到网页服务器。由于HTTP是无状态的(不记录你之前的请求),cookie可以用来提醒网页服务器你的身份、网站的一些个人设置,或者你是否访问过该网站。让我们来看看这个作为HTTP请求的示例:

一个可视化 cookie 如何在 http 请求中引入的图示,以允许存储用户信息

任务7提出请求
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐