# Static Assets Test Report - SSR Mode with Node Adapter
**Test Date**: March 20, 2026
**Server Configuration**: Host 0.0.0.0, Port 10000
**Adapter**: @astrojs/node (standalone mode)
**SSR**: Enabled
---
## Executive Summary
✅ **ALL STATIC ASSETS SERVING CORRECTLY**
All static assets (CSS, JavaScript, images) are properly served in SSR mode with the Node adapter. Assets are correctly bundled, hashed, and served with appropriate cache headers.
---
## Test Results
### 1. CSS Assets ✅
**Test File**: `/_assets/about.D1TyPjQs.css`
```
Status: 200 OK
Content-Type: text/css; charset=UTF-8
Cache-Control: public, max-age=31536000, immutable
Content-Length: 69831 bytes
ETag: W/"110c7-19d0c82fc78"
```
**Verification**: Content correctly served with CSS syntax
```css
@import"https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans...
```
**✓ Cache Strategy**: Long-term caching (1 year) with immutable flag for versioned assets
---
### 2. JavaScript Assets ✅
**Test File**: `/_assets/hoisted.DOUMFVng.js`
```
Status: 200 OK
Content-Type: application/javascript; charset=UTF-8
Cache-Control: public, max-age=31536000, immutable
Content-Length: 5156 bytes
ETag: W/"1424-19d0c82fce7"
```
**Verification**: Content correctly served with valid JavaScript
```javascript
import"./hoisted.B1x9i8sX.js";document.addEventListener("DOMContentLoaded"...
```
**✓ Module Loading**: Import statements properly preserved
**✓ Cache Strategy**: Long-term caching with immutable flag
---
### 3. Image Assets - SVG ✅
**Test File**: `/favicon.svg`
```
Status: 200 OK
Content-Type: image/svg+xml
Cache-Control: public, max-age=0
Content-Length: 410 bytes
ETag: W/"19a-19d0bca25da"
```
**✓ MIME Type**: Correctly identified as SVG
**✓ Cache Strategy**: No caching (max-age=0) for non-versioned assets
---
### 4. Image Assets - JPEG ✅
**Test File**: `/images/blog/ai-business.jpg`
```
Status: 200 OK
Content-Type: image/jpeg
Cache-Control: public, max-age=0
Content-Length: 997 bytes
ETag: W/"3e5-19d0c6b750e"
```
**✓ MIME Type**: Correctly identified as JPEG
**✓ ETag**: Present for conditional requests
---
## Asset Organization
### Build Output Structure
```
dist/
├── client/
│ ├── _assets/ # Versioned, hashed assets
│ │ ├── *.css # Stylesheets
│ │ └── *.js # JavaScript bundles
│ ├── images/ # Static images
│ │ └── blog/
│ └── favicon.svg
└── server/
└── entry.mjs
```
---
## Cache Strategy Verification
### Versioned Assets (Hashed Filenames)
- **Pattern**: `_assets/*.{hash}.{ext}`
- **Cache-Control**: `public, max-age=31536000, immutable`
- **Rationale**: Safe to cache indefinitely due to content-based hashing
- **Examples**:
- `about.D1TyPjQs.css`
- `hoisted.DOUMFVng.js`
### Non-Versioned Assets
- **Pattern**: Direct paths like `/favicon.svg`, `/images/*`
- **Cache-Control**: `public, max-age=0`
- **Rationale**: Prevent stale content for non-hashed files
- **ETag**: Present for conditional requests
---
## HTML Integration Verification ✅
**Test**: Verified asset references in rendered HTML
```html
```
**✓ Path Resolution**: All asset paths correctly resolved
**✓ Module Type**: JavaScript correctly marked as ES modules
---
## Performance Optimizations Detected
1. **Content-Based Hashing**: Assets use content hashes for cache busting
2. **Immutable Caching**: Versioned assets marked immutable for maximum cache efficiency
3. **ETags**: All assets include ETags for conditional requests
4. **Compression**: Content served with UTF-8 charset
5. **Accept-Ranges**: Partial content support for larger assets
---
## Test Coverage
| Asset Type | Test Status | Cache Headers | Content Verification |
|------------|-------------|---------------|---------------------|
| CSS | ✅ Pass | ✅ Optimal | ✅ Valid |
| JavaScript | ✅ Pass | ✅ Optimal | ✅ Valid |
| SVG Images | ✅ Pass | ✅ Appropriate | ✅ Valid |
| JPEG Images| ✅ Pass | ✅ Appropriate | ✅ Valid |
---
## Recommendations
✅ **Current Implementation**: No changes needed
The current setup follows best practices:
- Content-based hashing for long-term caching
- Proper MIME types for all asset types
- ETags for efficient revalidation
- Separate cache strategies for versioned vs. non-versioned assets
---
## Conclusion
**Static asset handling in SSR mode with the Node adapter is working correctly.** All assets are:
- Properly served with correct MIME types
- Optimally cached based on versioning strategy
- Successfully integrated into server-rendered HTML
- Available at expected paths
No issues or warnings detected.