HTTP起源
HTTP起源于20世纪90年代初,由英国物理学家蒂姆·伯纳斯-李(
Tim Berners-Lee)和他的团队在欧洲核子研究组织(CERN)开发出来。他们的目标是创建一种简单、通用的协议,使不同的计算机和系统可以互相通信和交换信息。
最初的HTTP版本是HTTP/0.9,它非常简单,只支持获取HTML文档,并且没有头部信息和请求方法。随着互联网的发展,HTTP逐渐演化并推出了更高版本,如HTTP/1.0、HTTP/1.1和HTTP/2。
HTTP协议的广泛应用使得互联网的发展变得更加便捷和高效,它成为了访问网页、发送电子邮件、下载文件等各种互联网活动的基础。
HTTP是什么?
全称:超文本传输协议(HyperText Transfer Protocol)
功能:HTTP是一种用于在客户端和服务器之间传输超文本的协议。它是互联网数据传输的基础,使得互联网上的网页浏览、文件传输等活动变得便捷和高效。
工作原理: 通过客户端和服务器之间的请求和响应来传输信息。客户端发送HTTP请求给服务器,服务器接收到请求后,根据请求的内容做出相应的动作,并将结果以HTTP响应的形式返回给客户端。
HTTP报文
概念:用于HTTP协议交互的信息被称为HTTP报文。客户端的HTTP报文叫请求报文,服务端的HTTP报文叫响应报文。
请求报文
HTTP请求报文由四个部分组成:请求行、请求头、空行、请求体。
- 请求行:请求行由
请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。比如Post /form/login HTTP/1.1 - 请求头:由
key: value值的方式构成,告诉服务器客户端需要哪些内容,什么类型。 - 空行:它的作用是通过一个空行,告诉服务器请求头部到此为止。
- 请求体:若方法字段是
GET,则此项为空,没有数据。若方法字段是POST,则通常来说此处放置的就是要提交的数据
响应报文
HTTP响应报文也由四部分组成:状态行、响应头、空行、响应体。
- 响应行:响应行一般由
协议版本、状态码及其描述组成 比如HTTP/1.1 200 OK - 响应头:响应头用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理待会它回送的数据。
- 空行:它的作用是通过一个空行,告诉服务器请求头部到此为止。
- 响应体:响应体就是响应的消息体,如果是纯数据就是返回纯数据,如果请求的是HTML页面,那么返回的就是HTML代码,如果是JSON就是JSON数据,如此之类。
请求方法
HTTP请求方法定义了客户端对服务器资源的操作方式。以下是常见的HTTP请求方法:
| 方法 | 描述 |
|---|---|
| GET | 用于从服务器获取资源,通常用于获取页面内容或数据。GET请求可以通过URL参数传递数据,但数据会明文显示在URL中。 |
| POST | 用于向服务器提交数据,通常用于发送表单数据或上传文件等。POST请求将数据放在请求主体中,而不是URL参数中,因此更适合处理敏感信息。 |
| PUT | 用于向服务器存储一个资源,可以替换现有资源或在指定位置创建新资源。PUT请求需要提供完整的资源表示,并将其放置在指定的URL位置。 |
| DELETE | 用于从服务器删除指定的资源。DELETE请求会删除指定URL位置上的资源。 |
| HEAD | 类似于GET请求,但只返回响应头部,不返回实际的响应主体。HEAD请求常用于获取资源的元数据或检查资源是否存在。 |
| OPTIONS | 用于获取服务器支持的请求方法列表,也可以查询服务器的功能和配置选项。 |
| PATCH | 用于部分更新服务器上的资源。PATCH请求包含要应用于资源的更改内容,而不是替换整个资源。 |
除了上述常见的HTTP请求方法,还有一些不太常见的方法,如
TRACE、CONNECT等。这些方法在实际的前端开发中使用较少,更多地被用于特定的场景和协议扩展。
在前端开发中,通常使用GET和POST方法最为频繁。GET用于从服务器获取数据或页面内容,而POST则用于向服务器提交数据。使用适当的请求方法可以确保与服务器正确交互,并符合HTTP协议的规范。
HTTP状态码
概念:HTTP状态码是服务器在接收到客户端的请求后,返回给客户端的响应中的一个数字代码。这个状态码提供了关于请求处理结果的信息,帮助客户端了解请求的状态和如何进一步处理。
以下是常见的HTTP状态码、含义及其描述:
| 状态码 | 含义 | 描述 |
|---|---|---|
| 1xx | 信息性状态码 | 表示请求已被接受,需要进一步处理。 |
| 100 | Continue | 服务器正在处理请求,客户端应继续发送剩余部分。 |
| 101 | Switching Protocols | 服务器已根据客户端的请求切换协议。 |
| 2xx | 成功状态码 | 表示请求已成功接收、理解和处理。 |
| 200 | OK | 请求成功,并返回所请求的数据。 |
| 201 | Created | 请求已成功处理,并创建了新的资源。 |
| 204 | No Content | 请求成功处理,但没有返回任何内容。 |
| 3xx | 重定向状态码 | 表示请求需要进一步处理以完成。 |
| 301 | Moved Permanently | 请求的资源已永久移动到新位置。 |
| 302 | Found | 请求的资源临时移动到不同的位置。 |
| 304 | Not Modified | 客户端缓存未过期,可以使用本地缓存的版本。 |
| 4xx | 客户端错误状态码 | 表示客户端发送的请求有误或无法完成。 |
| 400 | Bad Request | 请求语法错误,服务器无法理解。 |
| 401 | Unauthorized | 请求需要身份验证。 |
| 404 | Not Found | 请求的资源不存在。 |
| 5xx | 服务器错误状态码 | 表示服务器在处理请求时发生了错误。 |
| 500 | Internal Server Error | 服务器内部错误,无法完成请求。 |
| 503 | Service Unavailable | 服务器暂时无法处理请求,通常是由于维护或过载。 |
HTTP状态码提供了一种标准化的方式来指示请求的结果和状态。客户端可以根据不同的状态码采取适当的行动,例如重试请求、显示错误信息或导航到其他页面等。在前端开发中,对不同状态码的处理和适当的用户反馈非常重要,以提供更好的用户体验。
首部字段
概念:HTTP首部字段是包含在HTTP请求和响应中的元数据信息,用于传递关于消息的附加信息。
以下是一些常见的HTTP首部字段:
通用首部字段:
| 通用首部 | 含义 |
|---|---|
| Cache-Control | 指定缓存机制的指令 |
| Connection | 指示是否需要持久连接 |
| Date | 表示消息产生的日期和时间 |
| Pragma | 向后兼容的HTTP/1.0缓存控制 |
| Trailer | 列出了在分块传输编码的消息尾部包含的字段 |
| Transfer-Encoding | 指定了对消息主体的传输编码方式 |
| Upgrade | 指示客户端支持的其他协议 |
请求首部字段:
| 请求首部 | 含义 |
|---|---|
| Host | 指定被请求资源的主机名和端口号 |
| User-Agent | 包含了发起请求的用户代理的信息 |
| Accept | 指定能够接受的媒体类型 |
| Content-Type | 指定请求或响应中的实体主体的媒体类型 |
| Content-Length | 指定请求或响应中的实体主体的长度 |
| Authorization | 提供用于进行身份验证的凭据 |
| Referer | 包含了发送请求页面的URL |
响应首部字段:
| 响应首部 | 含义 |
|---|---|
| Content-Type | 指定响应中实体主体的媒体类型 |
| Content-Length | 指定响应中实体主体的长度 |
| Server | 指示响应中的服务器软件信息 |
| Last-Modified | 指定资源的最后修改时间 |
| ETag | 指示对请求资源的特定版本的标识 |
| Location | 用于重定向,指示新的资源位置 |
还有其他许多HTTP首部字段,它们用于传递不同类型的信息,如
身份验证、缓存控制、压缩等。根据具体需求和场景,可以选择适当的首部字段来实现所需的功能和交互。了解和正确使用首部字段对于实现高效的HTTP通信非常重要。
GET和POST的区别
GET和POST是HTTP协议中常用的两种请求方法,它们有以下区别:
1. 数据位置:
- GET请求的数据会直接附加在URL的查询字符串中,以键值对的形式出现在URL后面,例如:
http://xxx.com/path?param1=value1¶m2=value2。数据暴露在URL中,对于敏感信息不太适合。 - POST请求的数据通过请求主体传输,并不会直接显示在URL中。数据被封装在请求主体中,相对安全一些。
2. 数据长度限制:
- GET请求对URL的长度有限制,不同浏览器和服务器有不同的限制,通常在几千个字符左右。
- POST请求没有对传输数据长度的限制,但服务器和网络环境可能会有限制。
3. 缓存:
- GET请求可以被浏览器缓存,下次请求同样的URL时,浏览器可能直接从缓存获取响应结果,减少服务器请求。
- POST请求默认不会被浏览器缓存,每次请求都会发送到服务器。
4. 安全性:
- GET请求的参数暴露在URL中,容易被拦截、修改或泄露,因此不适合处理敏感信息。
- POST请求的数据放在请求主体中,相对安全一些,适合传输敏感信息。
5. 幂等性:
- GET请求是幂等的,即多次重复请求不会产生副作用,只读取数据,不改变服务器状态。
- POST请求不是幂等的,多次重复请求可能会产生不同结果,可能改变服务器状态,如插入新数据。
6. 使用场景:
- GET请求适合获取资源、查询数据,通过URL传递参数,对于无副作用的请求更为合适。
- POST请求适合提交数据、发送表单、上传文件,对于修改服务器状态或有副作用的操作更为合适。
综上所述,GET和POST在数据位置、数据长度限制、缓存、安全性、幂等性和使用场景等方面存在差异。根据具体需求和情况,选择合适的请求方法来进行数据交互和处理。
小结
以上是我整理的一些前端所需的HTTP基础知识,如果对你有帮助的话不要忘记点赞收藏哦!
未完待续......
下一篇:前端基础知识之HTTP协议与安全性(二)