• Http协议及其常见状态码
  • 发布于 2个月前
  • 178 热度
    0 评论
一、什么是HTTP

HTTP是一种用于传输超文本数据的协议,是Web应用程序的基础。它被广泛应用于客户端和服务器之间的通信,包括网页、图片、视频等资源的传输。


二、HTTP请求和HTTP响应
1.HTTP请求
HTTP请求由三部分组成:请求行、请求头部和请求体。其中请求行包括请求方法、URL和HTTP版本信息;请求头部包括一系列键值对,用于描述请求的详细信息;请求体则是可选的,用于传输请求参数等数据。
2.HTTP响应
HTTP响应由三部分组成:状态行、响应头部和响应体。其中状态行包括HTTP版本、状态码和状态信息;响应头部包括一系列键值对,用于描述响应的详细信息;响应体则是可选的,用于传输响应数据。

三、HTTP状态码
HTTP状态码用于表示服务器对请求的处理结果,共分为五类,分别以不同的数字开头。
1xx:信息性状态码,表示服务器已接收到请求并正在处理。
2xx:成功状态码,表示服务器已成功处理请求。
3xx:重定向状态码,表示需要进一步操作以完成请求。
4xx:客户端错误状态码,表示服务器无法处理请求。
5xx:服务器错误状态码,表示服务器处理请求时出现错误。

以下是一些常见的 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:请求需要身份验证。
403 Forbidden:服务器拒绝了客户端的请求,请求被禁止访问。(权限)
404 Not Found:请求的资源不存在。

5xx(服务器错误状态码):表示服务器在处理请求时发生错误。
500 Internal Server Error:服务器遇到了意外错误,无法完成请求。
501 Not Implemented:服务器不支持或未实现客户端请求的功能。
502 Bad Gateway:作为代理或网关的服务器从上游服务器接收到无效的响应。
503 Service Unavailable:服务器暂时无法处理请求,通常是由于过载或维护。
504 Gateway Timeout:作为代理或网关的服务器在等待上游服务器响应时超时。
505 HTTP Version Not Supported:服务器不支持客户端请求中指定的HTTP协议版本。

四、HTTP头部
HTTP头部包括一系列键值对,用于描述请求或响应的详细信息。常见的HTTP头部包括:
Accept:指定客户端能够接收的数据类型。
Content-Type:指定请求或响应中的数据类型。
User-Agent:指定客户端的浏览器类型和版本信息。
Cookie:指定客户端的cookie信息。

以下是一个HTTP头部示例:
GET /index.html HTTP/1.1
Host: www.duidaima.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
五、HTTP方法
HTTP方法用于指定客户端对服务器执行的操作类型,常见的HTTP方法包括:
GET:用于从服务器获取资源。GET方法是幂等的,即多次执行同一个GET请求应该产生相同的结果。
POST:用于向服务器提交数据,通常用于创建新资源或执行一些需要改变服务器状态的操作。POST方法不是幂等的,多次执行同一个POST请求可能会导致不同的结果。
PUT:用于向服务器更新或替换资源。PUT方法通常用于完全替换目标资源,如果目标资源不存在,则创建一个新资源。
DELETE:用于删除服务器上的资源。
HEAD:类似于GET方法,但只返回响应头部,不返回实际的响应体。HEAD方法通常用于获取资源的元数据,如文件大小、修改日期等。
OPTIONS:用于获取服务器支持的HTTP方法列表。服务器可以在响应中返回Allow头部,指示支持的方法。
PATCH:用于对资源进行部分更新。PATCH方法类似于PUT方法,但只更新指定的部分内容。

GET和POST的区别
GET请求
GET请求用于从服务器获取资源。GET请求将数据附加在URL的查询字符串中,并将其发送到服务器。由于数据附加在URL中,因此GET请求具有以下特点:
1.GET请求对数据长度有限制,通常不超过2048个字符。
2.GET请求可以被缓存,可以通过浏览器的历史记录来访问。
3.GET请求可以被收藏为书签。
4.GET请求不应该用于传输敏感信息,因为查询字符串会被保存在浏览器的历史记录中。
// GET请求
const url = 'https://www.duidaima.com/api/data?name=zhangsan&age=20';
fetch(url)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
POST请求
POST请求用于向服务器提交数据。POST请求将数据放在请求体中,并将其发送到服务器。由于数据放在请求体中,因此POST请求具有以下特点:
1.POST请求对数据长度没有限制。
2.POST请求不会被缓存。
3.POST请求不能被收藏为书签。
4.POST请求可以用于传输敏感信息,因为数据放在请求体中,不会保存在浏览器的历史记录中。
// POST请求
const url = 'https://example.com/api/data';
const data = { name: 'zhangsan', age: 20 };
fetch(url, {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify(data)
})
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
GET和POST请求在Web开发中具有不同的应用场景。一般来说:
GET请求适用于获取资源、读取数据,例如获取文章、图片等静态内容。GET请求的安全性较低,适用于不会影响服务器端数据的请求。
POST请求适用于提交数据、修改服务器状态,例如创建用户、更新数据库等操作。POST请求的安全性较高,适用于需要对服务器端进行数据操作的请求。

六、HTTP连接管理
HTTP连接管理用于控制客户端和服务器之间的连接行为,包括连接建立、维持和关闭等操作。常见的HTTP连接管理方式包括:
Keep-Alive:保持连接状态,避免频繁建立和关闭连接。
Connection:控制连接行为,如关闭连接、保持连接等。
GET /index.html HTTP/1.1
Host: www.duidaima.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Connection: keep-alive

七、最后的话
能力一般,水平有限,本文可能存在纰漏或错误,如有问题欢迎大佬指正,感谢你阅读这篇文章,如果你觉得写得还行的话,不要忘记点赞、评论、收藏哦!祝生活愉快!


用户评论