# HTTPS Cookie 测试服务器

这是一个基于Node.js和Express的HTTPS服务器，支持设置和管理Cookie，特别针对`SameSite=None`的场景。

## 功能特性

- ✅ HTTPS支持（SSL/TLS加密）
- ✅ Cookie设置和管理
- ✅ 支持`SameSite=None`属性
- ✅ 自签名SSL证书生成
- ✅ RESTful API接口

## 快速开始

### 1. 安装依赖

```bash
npm install
```

### 2. 生成SSL证书

```bash
npm run generate-certs
```

或者手动运行：
```bash
node generate-certs.js
```

### 3. 启动服务器

```bash
npm start
```

开发模式（热重载）：
```bash
npm run dev
```

### 4. 访问服务器

打开浏览器访问: `https://localhost:3443`

⚠️ **注意**: 由于使用自签名证书，浏览器会显示安全警告，请选择"继续访问"。

## API接口

### Cookie操作

- `GET /` - 主页，显示当前Cookie状态
- `GET /set-cookie` - 设置Cookie (test=1, SameSite=None)
- `GET /get-cookie` - 获取所有Cookie
- `GET /clear-cookie` - 清除Cookie

### API接口

- `POST /api/test` - 测试接口，返回请求数据和Cookie信息

## Cookie配置

```javascript
res.cookie('test', '1', {
    sameSite: 'None',    // 跨站点访问
    secure: true,        // HTTPS必需
    httpOnly: false,     // 允许JavaScript访问
    maxAge: 24 * 60 * 60 * 1000  // 24小时过期
});
```

## 测试示例

### 使用curl测试

```bash
# 设置Cookie
curl -k -c cookies.txt https://localhost:3443/set-cookie

# 获取Cookie
curl -k -b cookies.txt https://localhost:3443/get-cookie

# POST请求测试
curl -k -X POST -H "Content-Type: application/json" \
     -d '{"message":"test"}' \
     -b cookies.txt \
     https://localhost:3443/api/test
```

### 使用JavaScript测试（浏览器控制台）

```javascript
// 获取Cookie
fetch('/get-cookie')
  .then(response => response.json())
  .then(data => console.log(data));

// POST请求
fetch('/api/test', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({message: 'Hello from browser'})
})
.then(response => response.json())
.then(data => console.log(data));
```

## 项目结构

```
.
├── server.js          # 主服务器文件
├── generate-certs.js  # SSL证书生成脚本
├── package.json       # 项目依赖配置
├── README.md         # 项目说明
└── certs/            # SSL证书目录
    ├── private-key.pem
    └── certificate.pem
```

## 依赖包说明

- `express` - Web框架
- `cookie-parser` - Cookie解析中间件
- `https` - HTTPS服务器
- `nodemon` - 开发时热重载（开发依赖）

## 注意事项

1. **SameSite=None** 要求必须使用 **Secure=true**，因此必须在HTTPS环境下运行
2. 自签名证书仅适用于开发测试，生产环境请使用受信任的CA证书
3. 现代浏览器对跨站Cookie有严格的安全策略
4. 如需在生产环境使用，建议使用Let's Encrypt等免费CA证书

## 故障排除

- 如果证书生成失败，请确保系统已安装OpenSSL
- 如果端口3443被占用，可以修改server.js中的PORT变量
- 如果Cookie设置失败，请确保在HTTPS环境下访问

## 许可证

MIT License 