一、GET 方法请求
1.1、URL 不带参数示例
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept: text/html,application/xhtml+xml
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
作用:此请求用于从服务器获取名为 index.html 的静态资源。它不携带任何额外的查询参数,意味着请求的是一个固定不变的资源。
1.2、URL 带参数示例
GET /search?q=example+query&category=all HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept: text/html,application/xhtml+xml
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
作用:此请求用于执行搜索操作,其中 q=example+query 是搜索关键词,category=all 表示搜索所有类别。这些参数允许客户端向服务器传递信息以定制化返回的内容。
1.3、GET 请求头参数(常见的)
Host: 指定被请求资源的互联网主机和端口号。
User-Agent: 提供有关发起请求的用户代理(通常是浏览器)的信息,帮助服务器了解客户端环境。
Accept: 列出客户端能够处理的内容类型,以便服务器可以根据客户端的能力调整响应内容。
Accept-Language: 客户端偏好语言,有助于服务器提供多语言支持。
Accept-Encoding: 客户端支持的编码方式,如 gzip,可以减少传输的数据量。
Connection: 控制选项,比如是否保持连接 (Keep-Alive)。
Cookie: 发送存储在客户端的 cookie 信息到服务器,常用于会话管理。
Authorization: 用于 HTTP 认证,携带认证信息。
1.4、GET 响应示例代码
成功响应(200 OK)
HTTP/1.1 200 OK
Date: Tue, 21 Jan 2025 10:51:00 GMT
Server: Apache/2.4.41 (Ubuntu)
Content-Type: text/html; charset=UTF-8
Content-Length: 888
Cache-Control: max-age=3600
Last-Modified: Mon, 20 Jan 2025 15:30:00 GMT
ETag: "34ab2c-d4e"
<!DOCTYPE html>
<html>
<head><title>Example Page</title></head>
<body>
<h1>Welcome to Example Page!</h1>
<p>This is the content of the page.</p>
</body>
</html>
资源未修改(304 Not Modified)
HTTP/1.1 304 Not Modified
Date: Tue, 21 Jan 2025 10:51:00 GMT
Server: Apache/2.4.41 (Ubuntu)
ETag: "34ab2c-d4e"
1.5、GET 响应头参数(常见的)
Date: 生成响应的日期时间。
Server: 标识服务器软件的信息。
Content-Type: 指示响应主体的内容类型。
Content-Length: 响应主体的大小。
Location: 用于重定向响应,告知客户端新的资源位置。
Set-Cookie: 设置或更新客户端上的 cookie。
Cache-Control: 给出有关缓存机制的指令。
Expires: 告诉客户端此响应何时过期。
Last-Modified: 指出文档最后修改的时间。
ETag: 实体标签,用于缓存验证。
二、 POST 方法请求
报文格式
POST 请求不仅包含请求行和头部字段,还通常包括一个消息体,用来发送数据给服务器。
2.1、示例代码
POST /submit_form.php HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept: text/html,application/xhtml+xml
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 27
name=JohnDoe&email=john@example.com
作用:此请求用于提交表单数据给服务器上的 /submit_form.php 脚本进行处理。Content-Type 和 Content-Length 头部指明了消息体中数据的格式和长度,而实际的数据则放在请求体中。
2.2、POST 请求头参数(常见的)
Host: 指定被请求资源的互联网主机和端口号。
User-Agent: 提供有关发起请求的用户代理(通常是浏览器)的信息,帮助服务器了解客户端环境。
Accept: 列出客户端能够处理的内容类型,以便服务器可以根据客户端的能力调整响应内容。
Accept-Language: 客户端偏好语言,有助于服务器提供多语言支持。
Accept-Encoding: 客户端支持的编码方式,如 gzip,可以减少传输的数据量。
Connection: 控制选项,比如是否保持连接 (Keep-Alive)。
Content-Type: 指定消息体中的媒体类型,对于表单提交来说,常见的值为 application/x-www-form-urlencoded 或 multipart/form-data。
Content-Length: 消息体的大小,确保服务器知道接收多少字节的数据。
Cookie: 发送存储在客户端的 cookie 信息到服务器,常用于会话管理。
Authorization: 用于 HTTP 认证,携带认证信息。
2.3、POST 响应示例代码
成功创建新资源(201 Created)
HTTP/1.1 201 Created
Date: Tue, 21 Jan 2025 10:51:00 GMT
Server: Apache/2.4.41 (Ubuntu)
Location: http://www.example.com/resource/123
Content-Type: text/html; charset=UTF-8
Content-Length: 123
<!DOCTYPE html>
<html>
<head><title>New Resource Created</title></head>
<body>
<h1>Your form has been successfully submitted!</h1>
<p>The new resource can be found <a href="http://www.example.com/resource/123">here</a>.</p>
</body>
</html>
成功处理但无新内容(204 No Content)
HTTP/1.1 204 No Content
Date: Tue, 21 Jan 2025 10:51:00 GMT
Server: Apache/2.4.41 (Ubuntu)
成功处理并重定向(303 See Other)
HTTP/1.1 303 See Other
Date: Tue, 21 Jan 2025 10:51:00 GMT
Server: Apache/2.4.41 (Ubuntu)
Location: http://www.example.com/success
2.4、POST 响应头参数(常见的)
Date: 生成响应的日期时间。
Server: 标识服务器软件的信息。
Content-Type: 指示响应主体的内容类型。
Content-Length: 响应主体的大小。
Location: 用于重定向响应,告知客户端新的资源位置。
Set-Cookie: 设置或更新客户端上的 cookie。
Cache-Control: 给出有关缓存机制的指令。
Expires: 告诉客户端此响应何时过期。
三、HTTP 响应码(常用的)
200 OK: 请求成功,通常表示表单数据已被成功处理,并且返回了处理后的页面。
201 Created: 成功创建了新资源,通常用于资源创建的操作后。
204 No Content: 请求成功,但没有新的内容返回,适用于不需要返回任何实体的情况。
303 See Other: 建议客户端通过 GET 请求另一个 URI 获取资源,通常用于 POST 请求成功后的重定向。
400 Bad Request: 请求有误,服务器无法理解或处理该请求。
401 Unauthorized: 需要认证,客户端必须提供适当的认证信息才能访问资源。
403 Forbidden: 禁止访问,即使提供了正确的凭证,服务器也不允许访问。
404 Not Found: 请求的资源不存在于服务器上。
500 Internal Server Error: 服务器内部错误,服务器遇到了意外情况,无法完成请求。
四、GET 和 POST 的主要区别
4.1、数据传输方式
GET:将参数编码在 URL 中传递,适合用于获取资源,不适合大量数据或敏感信息。
POST:将数据放在请求体中,适合发送较大或敏感的信息。
4.2、缓存机制
GET:可以被浏览器和代理服务器缓存,因为它是幂等的(多次相同的 GET 请求应该产生相同的结果)。
POST:一般不会被缓存,因为它不是幂等的,重复的 POST 请求可能会导致不同的结果。
4.3、安全性
GET:由于参数出现在 URL 中,容易被泄露(如浏览器历史、服务器日志),因此不适合传递敏感信息。
POST:相对更安全,因为数据不在 URL 中可见,减少了敏感信息暴露的风险。
限制
GET:URL 长度有限制,取决于浏览器和服务器的支持情况。
POST:理论上没有长度限制,但实际上受限于服务器配置和实现。
选择 GET 还是 POST 应该基于上述因素以及具体应用场景的需求。GET 适合用于检索信息而不改变服务器状态,而 POST 更适合用于需要提交数据或改变服务器状态的操作。
2115

被折叠的 条评论
为什么被折叠?



