HTTP协议
什么是 HTTP?(超文本传输协议)
HTTP 是您查看网站时使用的工具,由 Tim Berners-Lee 和他的团队在 1989 年至 1991 年间开发。HTTP 是用于与 Web 服务器通信以传输网页数据(无论是 HTML、图像、视频等)的规则集。
什么是 HTTPS? (安全超文本传输协议)
HTTPS 是 HTTP 的安全版本。 HTTPS 数据是加密的,因此它不仅可以阻止人们看到您接收和发送的数据,还可以确保您正在与正确的 Web 服务器通信,而不是冒充它。
什么是 URL?(统一资源定位器)
如果您曾经使用过 Internet,那么您以前也使用过 URL。URL 主要是有关如何访问 Internet 上的资源的指令。下图显示了 URL 及其所有功能的外观(它不会在每个请求中使用所有功能)。
- Scheme:这指示使用什么协议来访问资源,例如 HTTP、HTTPS、FTP(文件传输协议)。
- **User:**某些服务需要身份验证才能登录,您可以在 URL 中输入用户名和密码才能登录。
- **Host:**您要访问的服务器的域名或 IP 地址。
- **Port:**您要连接的端口,通常为 80 用于 HTTP,443 用于 HTTPS,但这可以托管在 1 - 65535 之间的任何端口上。
- **Path:**您尝试访问的资源的文件名或位置。
- **Query String:**可以发送到请求路径的额外信息位。例如,/blog?id=1 将告知博客路径您希望接收 ID 为 1 的博客文章。
- Fragment: 这是对请求的实际页面上的位置的引用。这通常用于内容较长的页面,并且可以将页面的某个部分直接链接到该页面,因此用户一旦访问该页面即可查看该页面。
提出请求
只需一行 GET / HTTP/1.1 就可以向 Web 服务器发出请求
但要获得更丰富的 Web 体验,您还需要发送其他数据。这些其他数据以所谓的 headers 形式发送,其中 header 包含额外的信息,以提供给您正在与之通信的 Web 服务器,但我们将在 Header 任务中对此进行更多介绍。
请求示例:
|
|
第 1 行: 此请求将发送 GET 方法( 在 HTTP 方法 任务中,有更多相关信息),请求带有 / 的主页,并告知 Web 服务器我们使用的是 HTTP 协议版本 1.1。
第 2 行: 我们告诉 Web 服务器我们希望网站 tryhackme.com
第 3 行: 我们告诉 Web 服务器我们使用的是 Firefox 版本 87 浏览器
第 4 行: 我们告诉 Web 服务器,将我们引荐到此网页的网页是 https://tryhackme.com
**第 5 行:**HTTP 请求始终以空行结尾,以通知 Web 服务器请求已完成。
响应示例:
|
|
第 1 行: HTTP 1.1 是服务器正在使用的 HTTP 协议版本,然后是 HTTP 状态代码(在本例中为“200 Ok”),这告诉我们请求已成功完成。
第 2 行: 这告诉我们 Web 服务器软件和版本号。
第 3 行: Web 服务器的当前日期、时间和时区。
第 4 行: Content-Type 标头告诉客户端将发送哪种信息,例如 HTML、图像、视频、pdf、XML。
第 5 行: Content-Length 告诉客户端响应多长时间,这样我们就可以确认没有丢失数据
**第 6 行:**HTTP 响应包含一个空行,用于确认 HTTP 响应的结束。
第 7-14 行: 已请求的信息,在本例中为主页。
HTTP方法
GET Request
这用于从 Web 服务器获取信息。
POST Request
这用于将数据提交到 Web 服务器并可能创建新记录
PUT Request
这用于将数据提交到 Web 服务器以更新信息
DELETE Request
这用于从 Web 服务器中删除信息/记录。
HTTP 协议状态代码:
在上一个任务中,您了解到,当 HTTP 服务器响应时,第一行始终包含一个状态代码,告知客户端其请求的结果以及可能如何处理该请求。这些状态代码可以分为 5 个不同的范围:
100-199 - Information Response 100-199 - 信息响应 | 发送这些请求是为了告诉客户端其请求的第一部分已被接受,他们应该继续发送请求的其余部分。这些代码不再很常见。 |
---|---|
200-299 - 成功 | 此状态代码范围用于告诉客户端其请求成功。 |
300-399 - 重定向 | 这些用于将客户端的请求重定向到另一个资源。这可以是不同的网页,也可以是完全不同的网站。 |
400-499 - Client Errors 400-499 - 客户端错误 | 用于通知客户端其请求有错误。 |
500-599 - 服务器错误 | 这是为服务器端发生的错误保留的,通常表示处理请求的服务器存在相当大的问题。 |
常见的 HTTP 状态代码:
有很多不同的 HTTP 状态代码,这还不包括应用程序甚至可以定义自己的 HTTP 状态代码,我们将介绍您可能遇到的最常见的 HTTP 响应:
200 - OK 200 - 正常 | 请求已成功完成。 |
---|---|
201 - Created 201 - 已创建 | 已创建资源(例如,新用户或新博客文章)。 |
301 - Moved Permanently 301 - 永久移动 | 这会将客户的浏览器重定向到新网页,或告诉搜索引擎该页面已移至其他位置并改为查看那里。 |
302 - Found 302 - 找到 | 与上述永久重定向类似,但顾名思义,这只是一个临时更改,在不久的将来可能会再次更改。 |
400 - Bad Request 400 - 错误请求 | 这会告诉浏览器他们的请求中有错误或缺失。如果请求的 Web 服务器资源需要客户端未发送的特定参数,则有时可以使用此方法。 |
401 - Not Authorised 401 - 未授权 | 在您授权 Web 应用程序(通常是使用用户名和密码)之前,您当前不允许查看此资源。 |
403 - Forbidden 403 - 禁止 | 无论您是否登录,您都无权查看此资源。 |
405 - Method Not Allowed 405 - 不允许使用 | 资源不允许此方法请求,例如,当资源需要 POST 请求时,您向资源 /create-account 发送 GET 请求。 |
404 - Page Not Found 404 - 未找到页面 | 您请求的页面/资源不存在。 |
500 - Internal Service Error 500 - 内部服务错误 | 服务器在您的请求中遇到了某种错误,它不知道如何正确处理。 |
503 - Service Unavailable 503 - 服务不可用 | 此服务器无法处理您的请求,因为它已过载或停机进行维护。 |
Headers 头
标头是您在发出请求时可以发送到 Web 服务器的附加数据位。
尽管在发出 HTTP 请求时不严格要求标头,但您会发现很难正确查看网站。
通用请求标头
这些是从客户端(通常是您的浏览器)发送到服务器的标头。
Host: 一些 Web 服务器托管多个网站,因此通过提供主机标头,您可以告诉它您需要哪个网站,否则您只会收到服务器的默认网站。
**User-Agent:**这是您的浏览器软件和版本号,告诉 Web 服务器您的浏览器软件有助于它为您的浏览器正确格式化网站,并且 HTML、JavaScript 和 CSS 的某些元素仅在某些浏览器中可用。
**Content-Length:**将数据发送到 Web 服务器(例如在表单中)时,内容长度会告知 Web 服务器 Web 请求中预期有多少数据。这样,服务器可以确保它不会丢失任何数据。
**Accept-Encoding:**告诉 Web 服务器浏览器支持哪些类型的压缩方法,以便可以缩小数据以通过 Internet 传输。
**Cookie:**发送到服务器以帮助记住您的信息的数据(有关更多信息,请参阅 Cookie 任务)。
常见响应标头
这些是在请求后从服务器返回给客户端的标头。
**Set-Cookie:**要存储的信息将在每个请求中发送回 Web 服务器(请参阅 cookie 任务以了解更多信息)。
**Cache-Control:**在浏览器再次请求响应之前,将响应内容存储在浏览器的缓存中多长时间。
Content-Type: 这会告诉客户端返回什么类型的数据,即 HTML、CSS、JavaScript、图像、PDF、视频等。使用 content-type 标头,浏览器就可以知道如何处理数据。
**Content-Encoding:**通过 Internet 发送数据时,使用了什么方法来压缩数据以使其更小。
Cookies
它们只是存储在您计算机上的一小段数据。当您从 Web 服务器收到 “Set-Cookie” 标头时,将保存 Cookie。然后,您发出的每个进一步请求,您都会将 cookie 数据发送回 Web 服务器。由于 HTTP 是无状态的(不会跟踪您以前的请求),因此 cookie 可用于提醒 Web 服务器您是谁、网站的一些个人设置或您以前是否访问过该网站。让我们看一下这个 HTTP 请求示例:
Cookie 可用于多种用途,但最常用于网站身份验证。cookie 值通常不是您可以看到密码的明文字符串,而是令牌(人类不容易猜到的唯一密码)。
查看您的 Cookie
您可以在浏览器中使用开发人员工具轻松查看浏览器向网站发送的 Cookie。
打开开发人员工具后,单击“Network”(网络)选项卡。此选项卡将向您显示浏览器请求的所有资源的列表。您可以单击每个选项以接收请求和响应的详细分类。如果您的浏览器发送了 Cookie,您将在请求的“Cookie”选项卡上看到这些 Cookie。