URL 与 HTTP
发表于:2026-07-24
字数统计:2278 字
预计阅读8分钟
URL(统一资源定位符)与 HTTP(超文本传输协议)相关知识。
1. URL
1.1 什么是 URL
URL (Uniform Resource Locator) 统一资源定位符(统一资源定位器、定位地址、URL 地址),俗称地址,是因特网上标准的资源的地址,如同在网络上的门牌,用于访问网络上的资源。
1.2 URL 的组成
URL 由协议、域名、资源路径组成:
- 协议:URL 使用 http 协议(超文本传输协议),规定浏览器与服务器之间传输数据的格式
- 域名:标记服务器在互联网中的方位
- 资源路径:标记资源在浏览器下的具体位置
1.3 URL 的完整结构
scheme://host:port/path?query#fragment
https://www.example.com:8080/path/to/page?id=1&name=test#section| 部分 | 说明 |
|---|---|
| scheme | 协议,如 http、https、ftp |
| host | 域名或 IP 地址 |
| port | 端口号,http 默认 80,https 默认 443 |
| path | 资源在服务器上的路径 |
| query | 查询参数,以 ? 开头 |
| fragment | 锚点(哈希),以 # 开头 |
1.4 常见协议
| 协议 | 全称 | 默认端口 |
|---|---|---|
| http | HyperText Transfer Protocol | 80 |
| https | HTTP Secure | 443 |
| ftp | File Transfer Protocol | 21 |
| file | 本地文件协议 | - |
| ws | WebSocket | 80 |
| wss | WebSocket Secure | 443 |
2. HTTP
HTTP 协议规定了浏览器发送以及浏览器返回内容的格式,用于客户端和服务器之间的通信。
- 请求访问文本或图像等资源的一端称为客户端,而提供资源响应的一端称为服务器端
2.1 请求报文组成
请求行
请求头
空行
请求体具体说明:
- 请求行:请求方法、URL、HTTP 版本
- 请求头:以键值对的格式携带的附加信息,比如:Content-Type
- 空行:分隔请求头,空行之后的是发送给服务器的资源
- 请求体:发送的资源
2.2 响应报文组成
响应行 (状态行)
响应头
空行
响应体具体说明:
- 响应行 (状态行):HTTP 版本、HTTP 响应状态码、状态信息
- 响应头:以键值对的格式携带的附加信息,比如:Content-Type
- 空行:分隔响应头,空行之后的是服务器返回的资源
- 响应体:返回的资源
2.3 HTTP 请求方法
| 方法 | 描述 | 是否幂等 |
|---|---|---|
| GET | 获取资源 | 是 |
| POST | 创建资源 | 否 |
| PUT | 更新资源(整体替换) | 是 |
| PATCH | 更新资源(部分修改) | 否 |
| DELETE | 删除资源 | 是 |
| HEAD | 与 GET 类似,但只返回响应头 | 是 |
| OPTIONS | 获取服务器支持的 HTTP 方法 | 是 |
2.4 HTTP 响应状态码
| 状态码 | 类别 | 描述 |
|---|---|---|
| 1xx | 信息响应 | 请求被接收,继续处理 |
| 2xx | 成功 | 请求成功 |
| 3xx | 重定向 | 需要进一步操作 |
| 4xx | 客户端错误 | 请求有误 |
| 5xx | 服务器错误 | 服务器处理失败 |
常用状态码:
| 状态码 | 描述 |
|---|---|
| 200 | OK,请求成功 |
| 201 | Created,资源已创建 |
| 204 | No Content,无内容 |
| 301 | Moved Permanently,永久重定向 |
| 302 | Found,暂时重定向 |
| 304 | Not Modified,未修改(缓存) |
| 400 | Bad Request,请求格式错误 |
| 401 | Unauthorized,未授权 |
| 403 | Forbidden,禁止访问 |
| 404 | Not Found,未找到资源 |
| 405 | Method Not Allowed,方法不允许 |
| 500 | Internal Server Error,服务器内部错误 |
| 502 | Bad Gateway,网关错误 |
| 503 | Service Unavailable,服务不可用 |
| 504 | Gateway Timeout,网关超时 |
3. Content-Type
Content-Type 是 HTTP 头部字段之一,用于指示请求或响应消息的媒体类型。
3.1 常见的 Content-Type 格式
application/json:用于传输 JSON 格式的数据application/xml:用于传输 XML 格式的数据text/plain:纯文本格式,通常用于普通文本文件text/html:用于传输 HTML 格式的数据image/jpeg, image/png, image/gif:用于传输图像数据multipart/form-data:通常用于上传文件,表单数据会被编码成一系列的部分application/x-www-form-urlencoded:通常用于发送表单数据,数据会被编码为键值对的形式(表单默认的提交数据的格式)
3.2 默认值
在 HTTP 协议中,如果未明确指定 Content-Type 头部字段,默认值取决于请求或响应的具体情况:
对于请求(Request):
- 对于常见的表单提交,即
application/x-www-form-urlencoded - 对于通过表单上传文件的情况,即
multipart/form-data
对于响应(Response):
- 如果服务器响应包含实际的数据,而不仅仅是一条状态码和头部字段,则常见的默认值为
application/octet-stream,表示二进制流,没有指定具体的数据类型
HTTP 协议规范允许在请求和响应中都不设置 Content-Type 头部字段。在这种情况下,接收方可能需要根据上下文来猜测数据的类型,这可能引入一些不确定性。推荐在请求和响应中显式地设置 Content-Type 头部字段。
4. HTTP 与 HTTPS 的区别
| 特性 | HTTP | HTTPS |
|---|---|---|
| 端口 | 80 | 443 |
| 加密 | 明文传输 | SSL/TLS 加密传输 |
| 安全性 | 低 | 高 |
| 证书 | 不需要 | 需要 SSL 证书 |
| 性能 | 快 | 略慢(加密解密过程) |
| SEO | 不友好 | 友好 |
| URL 协议头 | http:// | https:// |
5. 常见的请求头与响应头
5.1 常用请求头
| 请求头 | 描述 |
|---|---|
| Host | 指定请求的服务器的域名和端口号 |
| User-Agent | 浏览器标识信息 |
| Accept | 客户端可接受的内容类型 |
| Accept-Language | 客户端可接受的语言 |
| Accept-Encoding | 客户端支持的压缩格式(如 gzip) |
| Content-Type | 请求体的媒体类型 |
| Content-Length | 请求体的大小 |
| Cookie | 客户端发送的 Cookie |
| Authorization | 授权信息 |
| Referer | 来源页面 URL |
| Origin | 跨域请求时的源站信息 |
| Connection | 控制连接是否保持(如 keep-alive) |
5.2 常用响应头
| 响应头 | 描述 |
|---|---|
| Content-Type | 响应内容的媒体类型 |
| Content-Length | 响应内容的大小 |
| Set-Cookie | 设置 Cookie |
| Cache-Control | 缓存控制 |
| Expires | 响应过期时间 |
| Last-Modified | 最后修改时间 |
| ETag | 资源的标识 |
| Location | 重定向的 URL |
| Server | 服务器信息 |
| Access-Control-Allow-Origin | CORS 跨域设置 |
6. Cookie 与 Session
6.1 Cookie
- 由服务器发送到浏览器,保存在浏览器端的小型文本数据
- 一般不超过 4KB
- 可设置过期时间
- 每次请求会自动携带同源 Cookie
6.2 Session
- 保存在服务器端的数据
- 通过 Session ID 关联客户端
- 安全性较 Cookie 高
6.3 对比
| 特性 | Cookie | Session |
|---|---|---|
| 存储位置 | 客户端 | 服务器端 |
| 安全性 | 较低 | 较高 |
| 容量 | 较小 | 较大 |
| 性能 | 不占服务器资源 | 占用服务器资源 |
7. HTTP/1.1、HTTP/2、HTTP/3
7.1 HTTP/1.1(主流)
- 持久连接(Keep-Alive)
- 管线化(Pipeline)
- 同一个 TCP 连接处理多个请求
7.2 HTTP/2
- 多路复用:单个连接并行处理多个请求
- 头部压缩(HPACK)
- 服务器推送(Server Push)
- 二进制分帧
7.3 HTTP/3
- 基于 QUIC 协议(UDP)
- 解决了 TCP 队头阻塞问题
- 更快的连接建立
- 0-RTT 握手
8. 跨域问题(CORS)
8.1 什么是跨域
浏览器的同源策略要求:协议、域名、端口都相同,否则就是跨域请求。
8.2 解决跨域的方法
- JSONP:利用
<script>标签不受同源策略限制的特性(仅支持 GET) - CORS:服务器端设置响应头
Access-Control-Allow-Origin - 代理:通过服务器代理转发请求
- WebSocket:不受同源策略限制
8.3 CORS 关键响应头
javascript
// 允许所有来源
Access-Control-Allow-Origin: *
// 允许指定来源
Access-Control-Allow-Origin: https://example.com
// 允许的请求方法
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
// 允许的请求头
Access-Control-Allow-Headers: Content-Type, Authorization
// 是否允许携带 Cookie
Access-Control-Allow-Credentials: true
// 预检请求缓存时间(秒)
Access-Control-Max-Age: 86400