# HTTP Messages

A specification for exchanging data using remote HTTP messages on a trusted server

![](./http.png)

## Overview

Enables a local client to make and receive http requests from a remote computer.  Requires:

* A trusted machine to process the messages (can be a home PC or Raspberry Pi)
* A relay (can be untrusted)
* A blossom server (can be untrusted)


## Architecture

```mermaid
architecture-beta
group user(internet)[Nostr Client]
group cloud(cloud)[Untrusted Servers]
group home(server)[Trusted Server]
service client(internet) in user
service blossom(database)[Blossom Storage] in cloud
service relay(logos:aws-ec2)[Relays] in cloud
service pc(logos:aws-elb) in home
service bbi[Big Bad Internet]

client:R -- L:blossom
client:B -- L:relay
pc:L -- R:blossom
pc:L -- R:relay
pc:B <--> T:bbi


```

## Event Structure

```jsonc
{
  "kind": 1120,
  "pubkey": "<pubkey>",
  "content": "nip44Encrypt({'url':'blossom.one','decrypt':'password123'})",
  "tags": [
    ["x", "<hash of encrypted message blob>"] 
    ["E", "<request event id>"], // (RES) Request ID (mandatory)
    ["r", "https://relay.one"] // (REQ) Response Relay (optional)
  ],
  // other fields...
}
```

Explanations:

 * `kind:1120` - BIP39 word #1120 ([message](https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt#L1120)).
 * `"content"` - encrypted (NIP-44) JSON with location of blob and decryption key
 * `"x"` - Blossom file hash of the encrypted request or response
 * `"E"` - ID of the request event.  Enables a response to be easily identified.
 * `"r"` - (optional) relay on which the response should be sent.  For Requests only.