HTTP(超文本传输协议)是一种应用层协议,用于分布式、协作式和超媒体信息体系。它定义了客户端与服务器之间如何进行通信,使得我们能够在万维网上轻松获取和交换信息。从简单的网页浏览到复杂的 Web 应用程序开发,HTTP 无处不在,是构建现代互联网应用的基础。
二、HTTP 哀求方法
(一)GET 哀求
GET 是最常见的哀求方法之一,用于从服务器获取资源。当我们在浏览器地址栏输入网址或点击网页上的链接时,通常会发送 GET 哀求。例如,当我们访问 https://www.example.com/page?id=123 时,浏览器会向服务器发送一个 GET 哀求,哀求获取 id 为 123 的页面资源。
GET 哀求的特点是幂等性,即多次发送相同的 GET 哀求应该得到相同的结果(假设服务器状态未改变)。它将哀求参数附加在 URL 背面,用问号(“?”)分隔 URL 和参数,多个参数之间用“&”连接。这种方式使得哀求数据直接暴露在 URL 中,因此不适合传输敏感信息,如密码等。
(二)POST 哀求
POST 哀求重要用于向服务器提交数据,常用于创建新资源或执行会产生副作用的操作,如用户注册、表单提交等。与 GET 哀求不同,POST 哀求的数据包含在哀求体中,而不是 URL 里,这样可以克制数据在 URL 中暴露,并且对传输数据的大小限制相对较小(理论上无穷制,但实际受服务器配置影响)。
(三)其他哀求方法
除了 GET 和 POST,HTTP 还定义了其他哀求方法,如 HEAD(获取资源头部信息,不返回主体内容)、PUT(更新指定资源的全部信息)、DELETE(删除指定资源)等。这些方法在特定场景下发挥侧重要作用,例如,在 RESTful API 开发中,根据不同的操作需求选择符合的哀求方法可以使接口设计更加规范和清楚。
以下是使用 Java 的 HttpURLConnection 发送 GET 和 POST 哀求的示例代码:
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpRequestExample {
public static void main(String[] args) {
// 发送 GET 请求
try {
URL url = new URL("https://www.example.com/api/data");
2xx(成功状态码):表示哀求已成功被服务器接收、理解并接受,如常见的 200 OK(哀求成功)、201 Created(资源创建成功)等。当客户端收到 200 OK 状态码时,说明服务器已成功处理哀求,并返回了相应的资源。
3xx(重定向状态码):表示需要客户端进行进一步操作才能完成哀求,例如 301 Moved Permanently(永世重定向)、302 Found(临时重定向)等。当服务器返回重定向状态码时,会在相应头部的 Location 字段中指定新的 URL,客户端需要根据环境进行跳转。
4xx(客户端错误状态码):表示客户端发送的哀求有错误,常见的有 400 Bad Request(哀求语法错误)、401 Unauthorized(未授权)、403 Forbidden(克制访问)、404 Not Found(资源未找到)等。例如,当客户端哀求一个不存在的页面时,服务器会返回 404 Not Found 状态码。
5xx(服务器错误状态码):表示服务器在处理哀求时发生了错误,如 500 Internal Server Error(服务器内部错误)、502 Bad Gateway(网关错误)、503 Service Unavailable(服务不可用)等。当服务器遇到内部错误导致无法处理哀求时,会返回 500 Internal Server Error 状态码。
(二)常见状态码详解
200 OK:这是最常见的成功状态码,表示服务器已成功处理客户端的哀求,并返回了哀求的资源。例如,当我们访问一个正常的网页时,服务器通常会返回 200 OK 状态码,同时在相应体中包含网页的 HTML 内容。
301 Moved Permanently:当资源的 URL 发生永世性更改时,服务器会返回此状态码。客户端收到此状态码后,应使用新的 URL 进行后续哀求。例如,网站进行域名迁移或页面永世重定向时,会使用 301 Moved Permanently 状态码。
400 Bad Request:表示客户端发送的哀求语法错误,服务器无法理解。这可能是由于哀求参数格式不正确、缺少必要的参数等原因导致。例如,哀求中包含非法字符或不符合协议规范的参数。