目录
HTTP协议
HTTP(Hypertext Transfer Protocol,超文本传输协议)是互联网上应用最为广泛的一种网络协议,是客户端和服务器之间请求-响应的标准。HTTP请求是客户端(如浏览器)向服务器发送消息,请求获取资源的一种方式。
HTTP组成
HTTP请求主要由请求行(request line)、请求头部(request headers)和请求体(request body)三部分组成。
请求行包含了HTTP方法(如GET、POST等)、请求的URI(统一资源标识符)和HTTP版本。
<HTTP方法> <URI> <HTTP版本>
请求头部包含了关于请求的元信息,如客户端类型、可接受的响应格式等。
<头部字段名>:<头部字段值>
请求体通常出现在POST或PUT请求中,包含了发送给服务器的数据。
HTTP请求方法
HTTP定义了几种请求方法,每种方法都对应着一种特定的行为:
- GET:请求获取指定的资源。
- POST:提交数据到指定的资源,请求服务器进行处理(如提交表单或上传文件)。
- PUT:上传指定的资源到服务器。
- DELETE:请求服务器删除指定的资源。
- HEAD:类似于GET请求,但只返回响应头,不返回实际数据。
在Java中,我们可以使用java.net.http.HttpClient
来发送HTTP请求:
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.io.IOException;
import java.net.URISyntaxException;
public class HttpGetRequestExample {
public static void main(String[] args) {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://www.example.com"))
.header("User-Agent", "Java HttpClient Bot")
.GET()
.build();
try {
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println("Status Code: " + response.statusCode());
System.out.println("Response Body: " + response.body());
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
}
响应报文
HTTP 响应与 HTTP 请求相似,HTTP响应也由3个部分构成,分别是:
- 状态行
- 响应头(Response Header)
- 响应正文
常见的状态码有如下几种:
- 200 OK 客户端请求成功
- 301 Moved Permanently 请求永久重定向
- 302 Moved Temporarily 请求临时重定向
- 304 Not Modified 文件未修改,可以直接使用缓存的文件。
- 400 Bad Request 由于客户端请求有语法错误,不能被服务器所理解。
- 401 Unauthorized 请求未经授权。这个状态代码必须和WWW-Authenticate报头域一起使用
- 403 Forbidden 服务器收到请求,但是拒绝提供服务。服务器通常会在响应正文中给出不提供服务的原因
- 404 Not Found 请求的资源不存在,例如,输入了错误的URL
- 500 Internal Server Error 服务器发生不可预期的错误,导致无法完成客户端的请求。
- 503 Service Unavailable 服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常。
Json
概述
在现代软件开发中,数据的交换和存储变得日益重要。为了在各种应用程序和系统之间高效、准确地传递数据,我们需要一种可靠且易于理解的数据格式。JSON(JavaScript Object Notation,JavaScript 对象表示法)正是这样一种轻量级的数据交换格式,它易于阅读和编写,同时也易于机器解析和生成。
JSON 的基本结构
JSON 的基本结构基于两种类型的数据结构:
1.对象:一个无序的键值对集合,用花括号 {}
包围。每个键值对之间用逗号 ,
分隔。键(key)必须是字符串,通常用双引号 ""
包围;值(value)可以是字符串、数字、对象(即嵌套对象)、数组、布尔值 true
或 false
,或者 null
。
{
"name": "John Doe",
"age": 30,
"isStudent": false,
"address": {
"street": "123 Main St",
"city": "Anytown"
}
}
2.数组:有序的值集合,用方括号 []
包围。数组中的每个值可以是任意 JSON 数据类型(包括对象或数组)。
[
"apple",
"banana",
{
"name": "cherry",
"color": "red"
}
]
JSON 的使用场景
JSON 因其简洁性和通用性而被广泛应用于各种场景:
- Web 服务:JSON 是 RESTful API 中最常用的数据格式,用于在客户端和服务器之间传输数据。
- 配置文件:由于 JSON 易于阅读和理解,它常被用作应用程序的配置文件。
- 数据存储:JSON 可以作为轻量级的数据存储格式,用于文件或数据库中的记录。
- 消息传递:在实时通信或消息队列系统中,JSON 可以作为消息的有效载荷。
在 JavaScript 中使用 JSON
在 JavaScript 中,JSON 的处理非常简单。JavaScript 提供了两个内置函数用于解析和生成 JSON 数据:
JSON.stringify(value)
: 将 JavaScript 对象或值转换为 JSON 字符串。JSON.parse(jsonString)
: 将 JSON 字符串解析为 JavaScript 对象或值。
// 将 JavaScript 对象转换为 JSON 字符串
const obj = { name: "John", age: 30 };
const jsonString = JSON.stringify(obj);
console.log(jsonString); // 输出: {"name":"John","age":30}
// 将 JSON 字符串解析为 JavaScript 对象
const parsedObj = JSON.parse(jsonString);
console.log(parsedObj.name); // 输出: John