Url
"URL" 是统一资源定位符(Uniform Resource Locator)的缩写。它是互联网上用于定位资源的地址,资源可以是网页、图像、视频、文件等。URL通常由多个部分组成,包括协议(如HTTP或HTTPS)、域名(如www.example.com)、端口号(可选,默认为80)、路径(指定资源在服务器上的位置)、查询参数(可选,用于向服务器传递信息)和片段标识符(可选,指定资源中的特定部分)。通过URL,用户可以在浏览器中访问并获取网络上的各种资源。
example:
URL: https://www.example.com:8080/path/to/resource?param1=value1¶m2=value2#section3
- 协议 (Protocol): https://
- 这里使用的协议是 HTTPS,表示使用安全套接字层传输协议,对数据进行加密和安全传输。
- 域名 (Domain): www.example.com
- 域名部分指定了服务器的地址,这里是 www.example.com。
- 端口号 (Port): :8080
- 端口号指定了服务器上提供服务的端口,这里使用的是 8080 端口。
- 路径 (Path): /path/to/resource
- 路径部分指定了服务器上资源的具体位置,这里是 /path/to/resource。
- 查询参数 (Query Parameters): ?param1=value1¶m2=value2
- 查询参数允许向服务器传递额外的信息,参数名和值之间使用等号连接,不同参数之间使用 & 符号分隔。这里有两个参数,param1 和 param2,分别对应的值是 value1 和 value2。
- 片段标识符 (Fragment Identifier): #section3
- 片段标识符允许定位资源中的特定部分,一般在网页中使用锚点链接进行页面内跳转。这里指定了片段标识符为 section3。
这是一个完整的URL示例,包括了协议、域名、端口号、路径、查询参数和片段标识符等各个部分。
HTTP
HTTP(超文本传输协议)是用于在Web浏览器和Web服务器之间传输数据的应用层协议。在HTTP通信中,存在两个重要的概念:HTTP请求和HTTP响应。
HTTP请求 (HTTP Request)
HTTP请求是客户端(例如浏览器)向服务器发送的请求消息,用于获取或传输Web资源。HTTP请求通常包含以下几个部分:
- 请求行(Request Line):包括请求方法、请求的URL和HTTP协议版本。
- 示例:GET /index.html HTTP/1.1
- 请求头部(Request Headers):包含关于客户端、请求资源、请求服务器等信息的头部字段。
- 示例:Host: www.example.com User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4851.0 Safari/537.36
- 请求主体(Request Body):对于一些请求(如POST请求),可以包含请求发送的数据,如表单数据、JSON数据等。
HTTP响应 (HTTP Response)
HTTP响应是服务器对客户端发送的HTTP请求的响应消息,用于返回请求的Web资源。HTTP响应通常包含以下几个部分:
- 状态行(Status Line):包括HTTP协议版本、状态码和状态消息。
- 示例:HTTP/1.1 200 OK
- 响应头部(Response Headers):包含关于响应、服务器、返回资源等信息的头部字段。
- 示例:Content-Type: text/html Content-Length: 1234
- 响应主体(Response Body):包含实际返回的数据,如HTML页面内容、图片、文件等
HTTP请求示例
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4851.0 Safari/537.36
HTTP响应示例
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1234
<!DOCTYPE html>
<html>
<head>
<title>Welcome to Example.com</title>
</head>
<body>
<h1>Hello, World!</h1>
</body>
</html>
在这个示例中,客户端发送了一个GET请求获取/index.html页面,服务器返回了状态码200表示成功,并返回了一个HTML页面作为响应的主体内容。响应头部中包含了Content-Type和Content-Length等信息。
HTTP常见状态码
状态码用于表示服务端的响应结果。有如下常见状态码
-
1xx(信息性状态码):表示请求已被接收,继续处理。
- 100 Continue: 请求的初始部分已被接受,客户端应该继续发送其余部分请求。
-
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: 服务器内部错误,无法完成请求。
- 502 Bad Gateway: 服务器作为网关或代理,从上游服务器接收到无效响应。
- 503 Service Unavailable: 服务器暂时无法处理请求,通常是由于过载或维护导致。
两个常用HTTP请求方法Get和Post
GET 方法:
-
用途:
- 获取资源:通常用于从服务器获取数据或资源。
- 幂等操作:对同一个URL多次使用GET请求,不会产生副作用,也不会改变服务器状态。
-
参数传递:
- 参数在URL中传递:通过URL的查询字符串(query string)将参数附加到URL后面。
- 参数长度限制:由于参数附加在URL中,GET请求对参数长度有限制,不适合传输大量数据。
-
安全性:
- 不适合敏感信息:GET请求的参数暴露在URL中,不适合传输敏感信息(如密码)。
-
示例:
GET /api/products?id=123 HTTP/1.1 Host: www.example.com
POST 方法:
-
用途:
- 提交数据:通常用于向服务器提交数据,如表单提交、上传文件等操作。
- 非幂等操作:POST请求可能会对服务器状态产生影响,因此不是幂等的。
-
参数传递:
- 参数在请求体中传递:参数以键值对的形式放在请求体中传递,不会暴露在URL中。
- 参数长度不限:由于参数在请求体中,POST请求没有参数长度限制,适合传输大量数据。
-
安全性:
- 适合敏感信息:POST请求的请求体中传输数据,相对于GET请求更适合传输敏感信息。
-
示例:
POST /api/login HTTP/1.1 Host: www.example.com username=user&password=pass123
比较而言,两者形式上最大的区别是Get没有请求正文(请求体),Post有请求正文(请求体)
-
tip
在网络通信中,HTTP协议的幂等性指的是对同一个URL的多次请求所产生的影响应该是相同的。例如,使用GET请求来获取数据或查询资源时,多次发送相同的GET请求应该得到相同的结果。对于幂等性的支持可以增加系统的健壮性和可靠性,在网络通信中尤其重要。
一些常见的请求头和响应头内容
常见的请求头 (Request Headers):
- Host:指定请求的服务器的域名和端口号。
- User-Agent:标识客户端的用户代理,通常是浏览器名称和版本信息。
- Accept:指定客户端可以接受的响应内容类型,如 text/html, application/json 等。
- Content-Type:指定请求体的数据类型,如 application/json, application/x-www-form-urlencoded 等。
- Authorization:用于身份验证,包含认证信息,如基本认证、Bearer Token 等。
- Cookie:包含客户端的 Cookie 信息,用于跟踪用户状态等。
- Referer:指示请求的来源页面 URL,用于防止跨站请求伪造 (CSRF) 攻击。
- Cache-Control:控制缓存行为,如 no-cache、max-age 等。
- Origin:指示请求的源,用于跨域请求时的 Origin 验证。
常见的响应头 (Response Headers):
- Content-Type:指示响应体的数据类型,如 text/html, application/json 等。
- Content-Length:指示响应体的长度(字节数)。
- Set-Cookie:在客户端设置 Cookie,用于跟踪用户状态等。
- Location:用于重定向,指示客户端应该重定向到的URL。
- Cache-Control:控制缓存行为,如 no-cache、max-age 等。
- ETag:用于缓存验证,标识资源的版本号。
- Access-Control-Allow-Origin:允许跨域请求的源。
- Allow:指示支持的 HTTP 方法,如 GET、POST 等。
- Expires:指示响应过期时间。
- Server:指示服务器的信息,如服务器类型和版本号。