【利用AI让知识体系化】深入浅出HTTP(近2w字)(一)

简介: 【利用AI让知识体系化】深入浅出HTTP(近2w字)

思维导图

1. HTTP基础知识

HTTP简介

HTTP(Hypertext Transfer Protocol)是一种应用层协议,用于传输超文本数据(例如HTML)。HTTP是一个客户端-服务器协议,客户端向服务器发送HTTP请求,服务器返回HTTP响应。

HTTP是无状态协议,也就是说,服务器不保留客户端的任何数据或状态。每个请求都是独立的,服务器在处理请求时不会考虑之前的请求。该特征使得HTTP非常适合在分布式环境中使用。

HTTP协议使用TCP协议作为传输层协议。当客户端发出HTTP请求时,它首先需要与服务器建立TCP连接。一旦建立了TCP连接,客户端可以向服务器发送HTTP请求,服务器会做出响应并将其返回给客户端,然后关闭TCP连接。

与其他协议相比,HTTP使用简单、直观和设计合理的语法,这也使得它成为互联网基础设施中最重要的一部分。

URI和URL

URI(Uniform Resource Identifier)是用于标识某一资源的字符串,而URL(Uniform Resource Locator)是URI的子集,用于方便地定位Web资源。

URL可以看作是URI的具体实现,它包含了URI的所有信息并描述了如何访问URI所标识的资源。换句话说,URL是一个具有特定语法的字符串,包含了网络上某个资源的具体地址和访问方式。

一个URL包含了以下几个部分:

  • 方案(scheme):指定使用的访问协议(例如HTTP、FTP、mailto等)。
  • 主机(host):指定资源所在的服务器主机名或IP地址。
  • 端口(port):指定用于访问该服务器上资源的端口号。
  • 路径(path):指定服务器上资源的相对或绝对路径。
  • 查询字符串(query string):包括一系列键值对,用于传递参数信息。
  • 片段标识符(fragment):指定资源中某个锚点的名称。

举例来说,一个URL可以看成是“协议://主机名:端口号/路径?查询参数#片段标识符”的形式。当我们在浏览器中输入URL时,浏览器使用HTTP协议与指定服务器建立连接,并发送请求。服务器接收请求,并返回相应的资源。

HTTP的请求和响应

HTTP使用请求-响应模型,客户端向服务器发送HTTP请求,服务器返回HTTP响应。请求和响应都由三个部分组成:起始行、头部和消息体。

请求的起始行包含请求方法、请求的URL和协议版本。以下是一个GET请求的示例:

GET /index.html HTTP/1.1

响应的起始行包含协议版本、状态码和状态描述。以下是一个200 OK的示例:

HTTP/1.1 200 OK

请求和响应的头部也非常重要,它们包含了很多元数据信息,例如请求方法、响应状态码、内容类型、日期和时间等等。以下是一个请求头部的示例:

Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Upgrade-Insecure-Requests: 1

以下是一个响应头部的示例:

HTTP/1.1 200 OK
Date: Tue, 11 May 2021 08:24:06 GMT
Content-Type: text/html; charset=UTF-8
Content-Encoding: gzip
Content-Length: 3365
Connection: keep-alive

消息体是可选的。对于GET请求,通常不带有消息体;对于POST请求,消息体通常包含表单数据或上传的文件等信息。对于响应,消息体则包含了请求的结果,例如页面内容或数据信息。

HTTP请求和响应的构成,包括起始行、头部和消息体,非常重要,我们需要了解这些术语以便更好地理解HTTP协议的工作原理。

2. HTTP请求

请求方法

HTTP定义了多种请求方法,这些方法规定了客户端如何与服务器交互以完成特定的操作。以下是常用的HTTP请求方法:

  1. GET:用于从服务器获取资源,该请求方法不会对服务器产生任何影响。GET请求的参数会附加在URL后面,而不是放在请求体中。
  2. HEAD:与GET请求类似,只是在响应中不会返回实体的消息体部分。也就是说,头部信息与GET请求相同,但服务器不会返回消息体。
  3. POST:用于向服务器提交数据,并根据请求中的内容修改服务器上的资源。
  4. PUT:用于向服务器上传、替换或更新指定URL的内容。
  5. DELETE:用于请求服务器删除指定URL的资源。
  6. CONNECT:建立一个到服务器的隧道,通常用于HTTPS(HTTP的安全版)。
  7. OPTIONS:请求服务器返回支持的HTTP方法。
  8. TRACE:对被请求资源的回显信息进行追踪和调试。
  9. PATCH:用于对服务器上资源进行局部更新,即只修改指定URL上的一部分内容。

对于不同的请求方法,服务器会根据不同的请求方法做出不同的响应,例如使用POST方法时服务器可能会修改将请求体中的数据写入数据库中。在开发Web应用程序时,选择正确的请求方法非常重要,这有助于确保Web应用程序正确地处理和响应用户请求。

请求头

HTTP请求头是指客户端在发送HTTP请求时携带的元数据信息,它们可以提供关于请求的更多信息,例如客户端身份识别、请求内容类型、请求来源等。

以下是一些常见的HTTP请求头:

  1. User-Agent:指定客户端的软件类型、操作系统、版本号等信息,服务器可以根据这些信息进行响应的处理。
  2. Referer:指定请求的来源URL,用于防止跨站请求攻击(CSRF)。
  3. Accept:指定客户端能够接收的MIME类型,服务器根据客户端接收能力选择返回相应的内容。
  4. Accept-Encoding:指定客户端支持的内容编码方式,例如gzip、deflate等。
  5. Authorization:用于在请求中携带认证信息,例如HTTP基本认证。
  6. Cookie:在请求中携带已经存储在客户端的Cookie信息,服务器可以根据该信息判断客户端的身份信息。
  7. Content-Type:指定HTTP请求体中的内容类型,服务器根据该信息解析请求体中的数据。

除了以上的请求头,还有许多其他的请求头可供使用。HTTP请求头的作用非常重要,可以帮助服务器了解客户端的需求,并对请求进行合适的处理。在编写Web应用程序时,了解常见的HTTP请求头是非常重要的。

请求体

HTTP请求体是指客户端通过HTTP协议向服务器发送的数据。对于某些HTTP请求方法,例如POST和PUT方法,客户端需要在请求体中附加一些数据,传递给服务器用来完成特定的任务。

可发送到服务器的数据类型很多,但是最常见的是表单数据和JSON数据。

  1. 表单数据:表单数据是最常见的POST请求数据类型。在一个表单中,可以使用多种类型的表单输入元素,例如文本框、下拉列表、单选按钮等等。在客户端提交表单时,这些表单输入数据会被格式化成键值对的形式,然后传递到服务器端。
  2. JSON数据:随着使用RESTful API的增多,越来越多的应用程序使用JSON作为数据传输格式。在发送POST或PUT请求时,JSON数据通常被封装在请求体中,并使用Content-Type头部以指示客户端发送的数据是JSON类型。在服务器端,该请求体中含有JSON数据的请求可以被解析并用于执行相关操作。

HTTP请求体可以包含任何类型的数据,例如XML数据、HTML数据、二进制数据等等。在开发Web应用程序时,使用正确的请求体类型并附加正确的数据是非常重要的。

3. HTTP响应

响应状态码

HTTP响应状态码是指服务器在响应客户端请求时返回的3位数字代码,用于标识HTTP响应的状态,例如成功、错误或者重定向。HTTP响应状态码被分为以下5类:

  1. 1xx(信息性响应):服务器接收了请求,但是客户端需要继续发送请求才能完成整个处理过程。
  2. 2xx(成功):表示服务器已经成功接受并处理了请求。
  • 200:请求已成功,正常返回响应结果。
  • 201:请求已成功,但服务器创建了一个新的资源。
  • 204:请求已成功,但服务器没有返回任何内容。
  1. 3xx(重定向):客户端需要执行进一步的处理才能完成请求。
  • 301:永久性重定向,请求的URL被永久性移动到新地址。
  • 302:临时性重定向,请求的URL被临时性移动到新地址。
  • 304:请求的资源未被修改,可以直接使用缓存的版本。
  1. 4xx(客户端错误):表示客户端提交的请求有错误。
  • 400:请求参数有误,服务器无法理解。
  • 401:请求未经授权,需要身份验证。
  • 403:请求被禁止,不允许访问。
  • 404:请求的资源不存在或已被删除。
  1. 5xx(服务器错误):表示服务器在处理请求时发生了错误。
  • 500:服务器遇到了一个未预期的错误,无法完成请求。
  • 502:服务器作为网关或代理服务器,从上游服务器收到了无效的响应。
  • 503:服务器暂时无法处理请求,通常是由于服务器过载或者正在进行维护。

HTTP响应状态码提供了一种标准化的方式,用于表明服务器已经成功或未成功地完成请求。在开发Web应用程序时,正确地处理HTTP状态码非常重要,因为它们可以向客户端提供有关请求结果的重要信息。

响应头

HTTP响应头是指服务器在响应客户端请求时返回的元数据信息,用于提供关于响应的更多信息,例如服务端身份识别、响应内容类型、响应时间等。

以下是一些常见的HTTP响应头:

  1. Server:指定服务器使用的软件类型、操作系统、版本号等信息。
  2. Content-Type:指定HTTP响应体中的内容类型。
  3. Content-Length:指定HTTP响应体中的内容长度。
  4. Content-Encoding:指定HTTP响应体中的内容编码方式,例如gzip。
  5. Cache-Control:指定客户端如何进行缓存,例如max-age、no-cache等。
  6. Set-Cookie:在响应头中携带Cookie信息,客户端可以解析这些信息来存储Cookie数据。

除了以上的响应头,还有许多其他的头可供使用。HTTP响应头的作用非常重要,可以帮助客户端了解服务器的响应情况,并根据响应头中的信息采取适当的行动。在编写Web应用程序时,了解常见的HTTP响应头是非常重要的。

响应体

HTTP响应体是一个HTTP响应的一部分,它包含请求所请求的资源或操作的结果。它通常以HTML,XML,JSON,图片,视频或其他类型的数据呈现给客户端。

HTTP响应体由两部分组成:

  1. HTTP响应头(Response Headers):包含HTTP响应的元数据,例如HTTP版本号、状态码、响应时间、内容类型等。
  2. HTTP响应正文(Response Body):包含实际的响应数据,例如HTML文档、JSON数据、图片或视频等。

HTTP响应正文的数据类型由Content-Type响应头字段指定,例如Content-Type: text/html表示响应正文是HTML文档类型的数据。


【利用AI让知识体系化】深入浅出HTTP(近2w字)(二)https://developer.aliyun.com/article/1426049

相关文章
|
3月前
|
人工智能 网络协议 安全
【利用AI让知识体系化】简要了解网络七层协议(二)
【利用AI让知识体系化】简要了解网络七层协议
|
3月前
|
人工智能 网络协议 数据安全/隐私保护
【利用AI让知识体系化】简要了解网络七层协议(一)
【利用AI让知识体系化】简要了解网络七层协议
|
3月前
|
设计模式 人工智能 自然语言处理
【利用AI让知识体系化】简要了解面向对象编程设计(二)
【利用AI让知识体系化】简要了解面向对象编程设计
|
3月前
|
设计模式 人工智能 关系型数据库
【利用AI让知识体系化】简要了解面向对象编程设计(一)
【利用AI让知识体系化】简要了解面向对象编程设计
|
3月前
|
安全 前端开发 JavaScript
【利用AI让知识体系化】前端安全攻防知识点(二)
【利用AI让知识体系化】前端安全攻防知识点
|
3月前
|
存储 前端开发 安全
【利用AI让知识体系化】前端安全攻防知识点(一)
【利用AI让知识体系化】前端安全攻防知识点
|
3月前
|
人工智能 移动开发 前端开发
【利用AI让知识体系化】Webpack 相关配置技巧(三)
【利用AI让知识体系化】Webpack 相关配置技巧
|
3月前
|
人工智能 缓存 JavaScript
【利用AI让知识体系化】Webpack 相关配置技巧(二)
【利用AI让知识体系化】Webpack 相关配置技巧
|
3月前
|
人工智能 前端开发 JavaScript
【利用AI让知识体系化】Webpack 相关配置技巧(一)
【利用AI让知识体系化】Webpack 相关配置技巧
|
3月前
|
编解码 人工智能 前端开发
【利用AI让知识体系化】常见的移动端适配知识
【利用AI让知识体系化】常见的移动端适配知识