Skip to content

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 常见协议

协议全称默认端口
httpHyperText Transfer Protocol80
httpsHTTP Secure443
ftpFile Transfer Protocol21
file本地文件协议-
wsWebSocket80
wssWebSocket Secure443

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服务器错误服务器处理失败

常用状态码:

状态码描述
200OK,请求成功
201Created,资源已创建
204No Content,无内容
301Moved Permanently,永久重定向
302Found,暂时重定向
304Not Modified,未修改(缓存)
400Bad Request,请求格式错误
401Unauthorized,未授权
403Forbidden,禁止访问
404Not Found,未找到资源
405Method Not Allowed,方法不允许
500Internal Server Error,服务器内部错误
502Bad Gateway,网关错误
503Service Unavailable,服务不可用
504Gateway 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 的区别

特性HTTPHTTPS
端口80443
加密明文传输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-OriginCORS 跨域设置
  • 由服务器发送到浏览器,保存在浏览器端的小型文本数据
  • 一般不超过 4KB
  • 可设置过期时间
  • 每次请求会自动携带同源 Cookie

6.2 Session

  • 保存在服务器端的数据
  • 通过 Session ID 关联客户端
  • 安全性较 Cookie 高

6.3 对比

特性CookieSession
存储位置客户端服务器端
安全性较低较高
容量较小较大
性能不占服务器资源占用服务器资源

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 解决跨域的方法

  1. JSONP:利用 <script> 标签不受同源策略限制的特性(仅支持 GET)
  2. CORS:服务器端设置响应头 Access-Control-Allow-Origin
  3. 代理:通过服务器代理转发请求
  4. 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