卫浴洁具网站模板微盟小程序模板
常见的 HTTP 状态码有哪些?
HTTP 状态码用于指示服务器对客户端请求的响应结果,常见的 HTTP 状态码可以分为以下几类:
1. 信息类(1xx)
- 100 Continue:客户端应继续发送请求。
 - 101 Switching Protocols:服务器根据客户端的请求切换协议。
 
2. 成功类(2xx)
- 200 OK:请求成功,响应体包含所请求的资源。
 - 201 Created:请求成功并且服务器创建了新的资源。
 - 202 Accepted:服务器已接受请求,但尚未处理完成。
 - 204 No Content:服务器成功处理请求,但响应体为空。
 
3. 重定向类(3xx)
- 301 Moved Permanently:请求的资源已永久移动到新位置。
 - 302 Found:请求的资源临时移动到新位置。
 - 304 Not Modified:资源未修改,客户端可以使用缓存的版本。
 
4. 客户端错误类(4xx)
- 400 Bad Request:请求语法错误或请求参数无效。
 - 401 Unauthorized:请求未授权,需要身份验证。
 - 403 Forbidden:服务器拒绝请求,客户端无权限访问。
 - 404 Not Found:请求的资源不存在。
 - 405 Method Not Allowed:请求方法不被允许。
 
5. 服务器错误类(5xx)
- 500 Internal Server Error:服务器遇到意外情况,无法完成请求。
 - 501 Not Implemented:服务器不支持请求的功能。
 - 502 Bad Gateway:服务器作为网关或代理时,从上游服务器收到无效响应。
 - 503 Service Unavailable:服务器暂时无法处理请求,通常由于过载或维护。
 - 504 Gateway Timeout:服务器作为网关或代理时,未从上游服务器及时收到响应。
 
HTTP 请求包含哪些内容,请求头和请求体有哪些类型?
HTTP 请求主要由以下几个部分组成:
1. 请求行(Request Line)
请求行包含请求方法、请求的资源路径以及 HTTP 协议版本。例如:
GET /index.html HTTP/1.1
 
2. 请求头(Headers)
请求头包含客户端发送给服务器的额外信息,例如客户端的类型、接受的内容类型、认证信息等。常见的请求头类型包括:
- 通用头(General Headers):适用于请求和响应,例如 
Cache-Control、Connection、Date、Pragma。 - 请求头(Request Headers):仅适用于请求,例如 
Accept、Accept-Charset、Accept-Encoding、Accept-Language、Authorization、Cookie、Host、User-Agent。 - 响应头(Response Headers):仅适用于响应,例如 
Age、Location、Server、Set-Cookie。 - 实体头(Entity Headers):适用于请求和响应中的实体部分,例如 
Allow、Content-Encoding、Content-Language、Content-Length、Content-Location、Content-MD5、Content-Range、Content-Type、Expires、Last-Modified。 
3. 请求体(Body)
请求体是请求中发送的实体内容,通常用于 POST、PUT 等方法。请求体的类型可以是多种格式,常见的包括:
- 表单数据(application/x-www-form-urlencoded):键值对形式的表单数据,例如 
key1=value1&key2=value2。 - 多部分表单数据(multipart/form-data):用于上传文件等复杂数据,常用于文件上传表单。
 - JSON 数据(application/json):以 JSON 格式发送数据,适用于现代 Web API。
 - XML 数据(application/xml):以 XML 格式发送数据。
 - 原始数据(text/plain):纯文本数据。
 
示例
请求行和请求头示例
GET /api/users HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0
Accept: application/json
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
 
请求体示例(POST 请求)
POST /api/users HTTP/1.1
Host: example.com
Content-Type: application/json
Content-Length: 45{"name": "John Doe", "age": 30}
 
在这个示例中,请求体是一个 JSON 格式的字符串,包含了用户的信息。
HTTP 中 GET 和 POST 的区别是什么?
在 HTTP 协议中,GET 和 POST 是两种常用的请求方法,它们在数据传递、安全性、使用场景等方面存在一些区别。以下是它们的主要区别:
1. 数据传递方式
-  
GET:将请求参数附加在 URL 后面,以
?分隔,参数之间用&连接。例如:http://example.com/?key1=value1&key2=value2。这种方式适合传递少量数据。 -  
POST:将请求参数放在请求体中,不会显示在 URL 中。例如:
POST /api/users HTTP/1.1 Host: example.com Content-Type: application/x-www-form-urlencodedkey1=value1&key2=value2这种方式适合传递大量数据。
 
2. 数据长度限制
- GET:由于 URL 长度有限制(不同浏览器和服务器限制不同,通常在 2048 字节左右),GET 请求的参数长度也受到限制。
 - POST:请求体的长度没有限制,可以传递大量数据。
 
3. 安全性
- GET:请求参数直接显示在 URL 中,可能会被浏览器保存在历史记录或日志文件中,存在安全风险。
 - POST:请求参数在请求体中,不会显示在 URL 中,相对更安全。
 
4. 缓存机制
- GET:请求可以被浏览器缓存,适合用于获取公共资源(如图片、CSS 文件等)。
 - POST:请求通常不会被缓存,适合用于提交敏感数据或执行改变服务器状态的操作。
 
5. 使用场景
- GET:通常用于获取资源,例如从服务器获取网页内容、搜索结果等。适合无副作用的操作。
 - POST:通常用于提交数据,例如表单提交、文件上传等。适合需要改变服务器状态的操作。
 
6. 书签功能
- GET:可以将请求的 URL 作为书签保存,方便后续访问。
 - POST:无法将请求作为书签保存,因为请求参数在请求体中。
 
7. 历史记录
- GET:请求的 URL 会保存在浏览器的历史记录中。
 - POST:请求的 URL 会保存在浏览器的历史记录中,但请求体中的参数不会保存。
 
8. 幂等性
- GET:是幂等的,多次请求不会改变服务器状态。
 - POST:不是幂等的,多次请求可能会导致多次数据提交,改变服务器状态。
 
示例对比
GET 请求示例
GET /search?q=java+design+patterns HTTP/1.1
Host: example.com
 
POST 请求示例
POST /api/login HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencodedusername=JohnDoe&password=12345
 
总结
- GET 适合用于获取资源、传递少量数据、可缓存的场景。
 - POST 适合用于提交数据、传递大量数据、需要改变服务器状态的场景。
 
选择使用 GET 还是 POST,需要根据具体需求和场景来决定,以确保数据的安全性和请求的效率。
