結論

ペイロードとは、通信でヘッダーなどの制御情報を除いた「運びたいデータ本体」のことです。API では、リクエストやレスポンスの本文(ボディ)を指します。

この記事でわかること

  • 分野別6つの意味の見分け表とヘッダーとの違いの図
  • curl・Python・Chromiumで送った本文とパケット
  • JWTの3部分のデコードと、413になる上限5種

2026年10月23日更新|curl 8.5.0・Python 3.11・tcpdump 4.99で実測

ペイロード(payload)は、もとは「運賃をもらって運ぶ荷物」という意味の言葉です。通信では、宛先や形式を書いたヘッダーが「荷札」、ペイロードが「荷物の中身」にあたります。

flowchart TD
    A[送りたいデータ<br>JSON・画像など] --> B[ペイロード<br>運ぶ中身]
    C[ヘッダー<br>宛先・形式・長さ] --> D[1つのメッセージ<br>またはパケット]
    B --> D
    D --> E[受け手はヘッダーを読んで<br>ペイロードを取り出す]

急いでいる人向けに、よく調べられることの答えを先にまとめます。

知りたいこと 答え 詳しい節
ペイロードとは ヘッダーを除いた、運びたいデータ本体 ペイロードとは
API のペイロード リクエスト・レスポンスの本文(JSON など) HTTP のペイロード
ヘッダーとの違い ヘッダーは荷札、ペイロードは中身 ヘッダーとの違い
ボディとの違い HTTP ではほぼ同じ意味。今の仕様は content 用語の整理
パケットのペイロード IP・TCP のヘッダーの後ろのデータ部 パケット
JWT のペイロード 2つ目の部分。暗号化されず誰でも読める JWT
413 Payload Too Large 本文がサーバーの上限を超えた 上限と413
確かめ方 curl -v、DevTools の Payload タブ、tcpdump 見る方法

確認環境:Ubuntu 24.04.4 LTS。HTTP の POST は curl 8.5.0 と Python 3.11.15(requests 2.34.2)から、自作の受信サーバー(Python の socket で、届いたヘッダーと本文を分けて表示するもの)に送りました。ブラウザが送る本文は Chromium 141.0.7390.37(Playwright から起動)の fetch で、パケットのデータ部はネットワーク名前空間(ip netns)の中で tcpdump 4.99.4 で取りました。JWT は Python の標準ライブラリで作ってデコードし、PyJWT 2.15.1 で署名を確かめています。受け取った本文の検証は jsonschema 4.26.0 で行いました。本文の大きさの上限は nginx 1.24.0 と Express 5.3.0(body-parser 2.4.0、Node.js 22.22.2)で 413 を起こしました。用語と仕様は RFC 7231・RFC 9110(HTTP)、RFC 9293(TCP)、RFC 7515・RFC 7519(JWS・JWT)、MDN、nginx・Apache・AWS Lambda・GitHub・Chrome DevTools の公式ドキュメントで確かめました(確認日 2026年10月23日)。

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「ペイロードとは|ヘッダーとの違い・API・JWT・パケットを実物で解説」

ペイロードとは(意味と語源)

この節では、ペイロードという言葉の意味と、なぜ通信のデータをそう呼ぶのかが分かります。

IT のペイロードは、通信で送るまとまりのうち、ヘッダーやトレーラー(末尾の確認用の情報)などの制御情報を除いた、データ本体のことです。 IT 用語辞典(Weblio に収録の「IT用語辞典バイナリ」)も、パケット通信でヘッダーなどの付加的な情報を除いたデータ本体、と説明しています。データの大きさは「ペイロード長」と呼ばれます。

英語の payload は pay(支払う)+ load(荷物)で、直訳は「有償荷重」です。トラックや飛行機では、乗り物そのものや燃料を除いた「お金をもらって運ぶ荷物・乗客」の重さを指します。通信でも同じ考え方で、届けるために付ける制御情報を除いた「届けたい中身」をペイロードと呼びます。

1運ぶもの全体

HTTP のメッセージ、IP のパケットなど。ヘッダーとペイロードを合わせたもの。

2ヘッダー(荷札)

宛先・送り主・データの形式・長さなど、届けるための情報。受け手が最初に読む。

3ペイロード(中身)

本当に届けたいデータ。JSON・フォームの値・画像・次の層のメッセージなど。

同じデータでも、どの層から見るかで「ペイロード」の範囲が変わります。 TCP から見れば HTTP のメッセージ全体(ヘッダーも本文も)がペイロードで、HTTP から見れば本文だけがペイロードです。この入れ子は、後の「パケットのペイロード」の節で実物のバイト数を数えて確かめます。

分野別のペイロードの意味(見分け表)

この節では、「ペイロード」が出てきたとき、どの分野の意味なのかを見分けられます。

分野 ペイロードが指すもの よく出る場面
HTTP・Web API リクエスト・レスポンスの本文(ボディ) POST する JSON、API の戻り値
ネットワーク パケットのヘッダーを除いたデータ部 tcpdump の length、ペイロード長、MSS
JWT(認証トークン) 3つの部分の2つ目。クレームの JSON ログイン後のトークンの中身
Webhook・メッセージング 通知やメッセージとして届くデータ本体 GitHub の Webhook、MQTT、キュー
マルウェア 侵入後に動く悪意のある処理の本体 セキュリティの用語として
ロケット・航空・車 運ぶ荷物(人工衛星・貨物・積載量) 打ち上げ、最大積載量

エンジニアの会話で「ペイロードを見せて」と言われたら、多くは API の本文(JSON)か、パケットのデータ部です。 セキュリティの文脈では、マルウェアが侵入後に実行する処理の本体を「ペイロード」と呼びます。この記事では、その意味は名前を挙げるだけにして、データ通信の意味を扱います。

ロケットの分野では、打ち上げる人工衛星・探査機・実験装置などを「ペイロード」と呼び、「ペイロード重量」は運べる荷物の重さです。トラックや飛行機の「最大積載量」も英語では payload です。

ヘッダーとペイロードの違い(図と用語の整理)

この節では、ヘッダーとペイロードの役割の違いと、「ボディ」「コンテンツ」など似た言葉との関係が分かります。

API に JSON を POST するとき

ヘッダーPOST /api/users・Host・Content-Type: application/json・Content-Length: 26・Authorization など。届け方と中身の説明
→
ペイロード{"name":"山田","age":28} の26バイト。サーバーのアプリが本当に使うデータ

HTTP/1.1 では、ヘッダーの後の空行(CRLF CRLF)から後ろがペイロード

比べる点 ヘッダー ペイロード
役割 届け方・中身の説明 届けたいデータそのもの
中身の例 宛先・形式・長さ・認証情報 JSON・フォームの値・ファイル
読む人 経路の機器・サーバー・ライブラリ 受け取ったアプリ
形 決まった項目(名前: 値) 何でもよい(Content-Type で示す)
大きさ 数十〜数百バイトが多い 0 バイトから数 MB 以上まで

ボディ・コンテンツ・ペイロードの違い

HTTP の仕様では、ペイロードの呼び方が変わっています。

  • 2014年の RFC 7231 は 3.3 節を「Payload Semantics」とし、メッセージで運ぶ表現を「payload」と呼んでいました。状態コード 413 の名前も「Payload Too Large」でした。
  • 2022年の RFC 9110 は 6.4 節で同じものを「content」と呼び、ヘッダーの後に送られるバイト列と説明しています。MDN によると、413 の名前も RFC 9110 で「Content Too Large」に変わり、以前の「Payload Too Large」も今も広く使われています。
  • 「ボディ(body)」は、HTTP/1.1 のメッセージで、ヘッダーの後に続く部分を指す言葉です。

実務では「ペイロード」「ボディ」「本文」はほぼ同じ意味で使われます。 厳密には、圧縮(Content-Encoding)やチャンク転送をしたときに、回線を流れるボディのバイト列と、元に戻した中身が違うことがあります。後の節で、同じ JSON が gzip で約12分の1になる例を載せています。

HTTPのペイロード:curlで送ってヘッダーと本文を分けて見る

この節では、API に POST したとき、実際にどこまでがヘッダーで、どこからがペイロードなのかを、送ったバイト列で確かめられます。

受け取ったリクエストを分けて表示するサーバー

届いたバイト列を、空行(CRLF CRLF)の前後で「ヘッダー」と「本文」に分けて表示するサーバーです。標準ライブラリだけで動きます。

"""受け取った HTTP リクエストを「ヘッダー」と「本文(ペイロード)」に分けて表示するサーバー"""
import socket, sys

PORT = int(sys.argv[1]) if len(sys.argv) > 1 else 35100

def recv_request(conn):
    data = b""
    while b"\r\n\r\n" not in data:            # 空行(CRLF CRLF)までがヘッダー
        chunk = conn.recv(65536)
        if not chunk:
            return data, b""
        data += chunk
    head, body = data.split(b"\r\n\r\n", 1)
    length = 0
    for line in head.split(b"\r\n")[1:]:
        k, _, v = line.partition(b":")
        if k.strip().lower() == b"content-length":
            length = int(v.strip())
    while len(body) < length:                  # Content-Length の分だけ本文を読む
        body += conn.recv(65536)
    return head, body

with socket.create_server(("127.0.0.1", PORT)) as srv:
    print(f"listening on 127.0.0.1:{PORT}", flush=True)
    while True:
        conn, _ = srv.accept()
        with conn:
            head, body = recv_request(conn)
            print("===== ヘッダー(", len(head) + 4, "バイト)=====", flush=True)
            print(head.decode("latin-1"), flush=True)
            print("===== 本文=ペイロード(", len(body), "バイト)=====", flush=True)
            print(body.decode("utf-8", "replace") if len(body) < 2000 else body[:200].decode("utf-8", "replace") + " …", flush=True)
            resp_body = ('{"received_bytes": %d}' % len(body)).encode()
            conn.sendall(b"HTTP/1.1 201 Created\r\nContent-Type: application/json\r\n"
                         b"Content-Length: " + str(len(resp_body)).encode() + b"\r\nConnection: close\r\n\r\n" + resp_body)

サーバーは「ヘッダーを空行まで読む → Content-Length の数だけ本文を読む」という順でペイロードを取り出します。 Content-Length が付いた HTTP/1.1 のリクエストは、この順で区切りが決まります。

curl で JSON を POST する

curl -v -X POST http://127.0.0.1:35100/api/users \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer demo-token' \
  -d '{"name":"山田","age":28}'

curl の -v の出力です。> が送ったヘッダー、} の行が送った本文、< が受け取ったヘッダーです。

> POST /api/users HTTP/1.1
> Host: 127.0.0.1:35100
> User-Agent: curl/8.5.0
> Accept: */*
> Content-Type: application/json
> Authorization: Bearer demo-token
> Content-Length: 26
>
} [26 bytes data]
< HTTP/1.1 201 Created
< Content-Type: application/json
< Content-Length: 22
< Connection: close
<
{ [22 bytes data]
{"received_bytes": 26}

サーバー側の表示です。

===== ヘッダー( 174 バイト)=====
POST /api/users HTTP/1.1
Host: 127.0.0.1:35100
User-Agent: curl/8.5.0
Accept: */*
Content-Type: application/json
Authorization: Bearer demo-token
Content-Length: 26
===== 本文=ペイロード( 26 バイト)=====
{"name":"山田","age":28}

ペイロードは {"name":"山田","age":28} の26バイトで、ヘッダーは174バイトでした。 見た目は22文字ですが、「山田」は UTF-8 で1文字3バイトなので26バイトです。Content-Length は文字数ではなくバイト数です。認証のトークン(Authorization)はヘッダー側に入り、ペイロードには入っていません。

curl の --trace-ascii - を使うと、curl 自身が「ヘッダー」と「データ(本文)」を分けて表示します(Authorization を付けずに送った例)。

=> Send header, 140 bytes (0x8c)
0000: POST /api/users HTTP/1.1
...
0076: Content-Length: 26
008a:
=> Send data, 26 bytes (0x1a)
0000: {"name":"......","age":28}
<= Recv header, 22 bytes (0x16)
0000: HTTP/1.1 201 Created
...
<= Recv data, 22 bytes (0x16)
0000: {"received_bytes": 26}

Send data, 26 bytes がリクエストのペイロード、Recv data, 22 bytes がレスポンスのペイロードです。日本語は ASCII でないので ...... と表示されます。curl のオプションは、関連記事「curlコマンドの使い方|よく使うオプションとAPIの確認方法」で扱っています。

curl のオプションで本文がどう変わるか(実測)

同じサーバーに、オプションを変えて送りました。

送り方 Content-Type(自動で付くもの) 届いた本文
-d 'name=yamada&age=28' application/x-www-form-urlencoded 18バイト。そのまま
-d @body.json(2行の JSON) 指定したもの 14バイト。改行が消える
--data-binary @body.json 指定したもの 16バイト。改行も含めそのまま
-F 'name=yamada' -F 'file=@body.json' multipart/form-data; boundary=… 334バイト。区切り線つき
-G -d 'q=payload' -d 'page=2' なし 0バイト。URL の ?q=payload&page=2 に付く
-X GET -d '{"q":1}' 指定したもの 7バイト。GET でも本文は送られた

-d @ファイル はファイルの改行を取り除いて送るので、ファイルをそのまま送るときは --data-binary @ファイル を使います。 -G を付けると、-d の値は本文ではなく URL のクエリ文字列になり、ペイロードは0バイトでした。GET に本文を付けることもできましたが、MDN は GET の本文の意味は定義されておらず、4xx で拒否するサーバーもある、としています。検索の条件などは、クエリ文字列で送ります。

リクエストのペイロードとレスポンスのペイロード

リクエストのペイロード

クライアントからサーバーへ送る本文

POST・PUT・PATCH で使う。GET は送らない

例:登録するユーザーの JSON、アップロードするファイル

レスポンスのペイロード

サーバーからクライアントへ返す本文

GET の結果、作成した結果、エラーの説明

例:{"received_bytes": 26}、ユーザー一覧の JSON

API の設計書で「リクエストペイロード」「レスポンスペイロード」と書いてあれば、それぞれの本文の JSON の形(項目名・型・必須)のことです。

Pythonでペイロードを送る(json=・data=・files= の違い)

この節では、Python の requests で本文を送る3つの書き方と、それぞれ実際に何バイトのどんな本文になるかが分かります。

"""requests で同じデータを3つの形(JSON・フォーム・multipart)で送る"""
import requests

URL = "http://127.0.0.1:35100/api/users"
data = {"name": "山田", "age": 28}
s = requests.Session(); s.trust_env = False      # プロキシの環境変数を使わない

r = s.post(URL, json=data)                                    # 1) JSON
print("json= :", r.status_code, r.json(), "| 送った本文:", r.request.body)
r = s.post(URL, data=data)                                    # 2) フォーム
print("data= :", r.status_code, r.json(), "| 送った本文:", r.request.body)
r = s.post(URL, data=data, files={"icon": ("a.txt", b"hello\n", "text/plain")})  # 3) multipart
print("files=:", r.status_code, r.json(), "| Content-Type:", r.request.headers["Content-Type"])
json= : 201 {'received_bytes': 35} | 送った本文: b'{"name": "\\u5c71\\u7530", "age": 28}'
data= : 201 {'received_bytes': 30} | 送った本文: name=%E5%B1%B1%E7%94%B0&age=28
files=: 201 {'received_bytes': 350} | Content-Type: multipart/form-data; boundary=1e0fa0db343dae4aadf9eb29216ba938

同じ {"name": "山田", "age": 28} を送ったときの本文の大きさ実測。curl は -d で JSON の文字列をそのまま送った値

curl JSON26B
フォーム30B
json=35B
multipart350B

読み取れることです。

  • json= は Content-Type: application/json を自動で付け、日本語を 山田 のように書き換えて送りました。 中身は同じ「山田」ですが、curl で送った26バイトより長い35バイトです。受け取る側の JSON パーサーはどちらも同じ文字に戻します。
  • data= に辞書を渡すと、フォームの形(name=%E5%B1%B1%E7%94%B0&age=28)になります。 JSON の API に送ると、サーバーは JSON として読めません。
  • files= を付けると multipart/form-data になり、項目ごとに区切り線で分けた350バイトになりました。ファイルのアップロードはこの形です。

Content-Typeごとのペイロードの形(JSON・フォーム・multipart)

この節では、よく使う Content-Type ごとに、ペイロードが実際にどんなバイト列になるかが分かります。

ペイロードの形は、ヘッダーの Content-Type で受け手に伝えます。 受け手は Content-Type を見て、本文を JSON として読むか、フォームとして読むかを決めます。

Content-Type ペイロードの形 主な用途
application/json {"name":"山田","age":28} Web API
application/x-www-form-urlencoded name=%E5%B1%B1%E7%94%B0&age=28 HTML のフォームの既定
multipart/form-data; boundary=… 区切り線で項目を分けた形 ファイルのアップロード
text/plain 文字列そのまま ログ・簡単なテキスト
application/octet-stream 任意のバイト列 ファイル・バイナリ
application/xml <user><name>…</name></user> SOAP・以前からある API

multipart/form-data のペイロードを、requests で送ったときのまま載せます(行の終わりは CRLF)。

--1e0fa0db343dae4aadf9eb29216ba938
Content-Disposition: form-data; name="name"

山田
--1e0fa0db343dae4aadf9eb29216ba938
Content-Disposition: form-data; name="age"

28
--1e0fa0db343dae4aadf9eb29216ba938
Content-Disposition: form-data; name="icon"; filename="a.txt"
Content-Type: text/plain

hello

--1e0fa0db343dae4aadf9eb29216ba938--

multipart のペイロードの中には、項目ごとに小さなヘッダー(Content-Disposition・Content-Type)と本文があります。 区切り線(boundary)はヘッダーの Content-Type に書かれ、最後の区切り線の後ろに -- が付きます。ペイロードの中に、さらにヘッダーとペイロードがある入れ子の形です。

レスポンスのペイロードを小さくする(gzip の実測)

ユーザー1,000件の JSON を、書き方を変えて gzip で圧縮した大きさです。

indent=2(整形)     104,226 バイト  gzip後  8,704 バイト
既定                82,224 バイト  gzip後  8,589 バイト
区切りの空白なし          74,225 バイト  gzip後  8,106 バイト

整形した JSON(104,226バイト)は、gzip で 8,704 バイトになり、約12分の1でした。 空白を除くと圧縮前は約3割小さくなりますが、gzip 後の差は6.9%です。レスポンスでは、サーバーが Content-Encoding: gzip を付けて圧縮したペイロードを返し、クライアントが元に戻します。このとき Content-Length は圧縮後のバイト数になります。

ブラウザのDevToolsでペイロードを見る(Payloadタブ)

この節では、ブラウザが送ったリクエストのペイロードを、Chrome の DevTools で見る方法と、実際に送られた本文が分かります。

1

Network パネルを開く

DevTools を開いて Network パネルを選び、その後でページの送信の操作をする。

先に開いておく

2

リクエストを選んで Payload タブ

一覧からリクエストを選び、Payload タブを開く。クエリ文字列とフォームの値・JSON の本文が出る。

Payload タブ

3

view source で送ったままの形

既定は読みやすい形。view source を押すと送った文字列そのまま、View URL-encoded で % の形に切り替わる。

見た目を切り替え

4

返ってきた本文は Response タブ

レスポンスのペイロードは Response タブ(整形した表示は Preview タブ)で見る。

Response タブ

Chrome DevTools のドキュメントでは、Payload タブはリクエストの「クエリ文字列のパラメーターとフォームデータ」を見る場所で、バイナリや圧縮された本文は、タブの下の選択で Base64・Hex・UTF-8 のどれで表示するかを選べる、とされています。

Payload タブに出る中身を、Chromium で fetch を3回実行して取り出しました。

await fetch("/api/json?debug=1", { method: "POST", headers: { "Content-Type": "application/json" },
                                   body: JSON.stringify({ name: "山田", age: 28 }) });
await fetch("/api/form", { method: "POST", body: new FormData(document.getElementById("f")) });
await fetch("/api/urlenc", { method: "POST", body: new URLSearchParams({ name: "山田", age: "28" }) });
Chromium 141.0.7390.37

POST /api/json?debug=1
  Content-Type : application/json
  Content-Length: 26
  本文: '{"name":"山田","age":28}'

POST /api/form
  Content-Type : multipart/form-data; boundary=----WebKitFormBoundaryniBIOoIABsCiInx5
  Content-Length: 233
  本文: '------WebKitFormBoundaryniBIOoIABsCiInx5\r\nContent-Disposition: form-data; name="name"\r\n\r\n山田\r\n------WebKitFormBoundaryniBIOoIABsCiInx5\r\nContent-Disposition: form-data; name="age"\r\n\r\n28\r\n------WebKitFormBoundaryniBIOoIABsCiInx5--\r\n'

POST /api/urlenc
  Content-Type : application/x-www-form-urlencoded;charset=UTF-8
  Content-Length: 30
  本文: 'name=%E5%B1%B1%E7%94%B0&age=28'

fetch の body に FormData を渡すと、ブラウザが multipart/form-data と区切り線(----WebKitFormBoundary…)を自動で付けました。 このとき Content-Type を自分で書くと区切り線が入らず、サーバーが本文を分けられなくなります。URLSearchParams を渡すと、フォームの形(;charset=UTF-8 付き)になりました。/api/json?debug=1 の debug=1 は URL のクエリ文字列なので、Payload タブでは本文とは別の「Query String Parameters」に出ます。

パケットのペイロード(tcpdumpで見るデータ部とMSS)

この節では、ネットワークの「ペイロード」が IP・TCP のヘッダーの後ろのデータ部であることと、1つのパケットに入る大きさを、実際のパケットで確かめられます。

curl の POST を tcpdump で取る

ネットワーク名前空間(ip netns)の中で受信サーバーを動かし、curl の POST を tcpdump -i lo -nn -X で取りました。本文は {"name":"yamada","age":28} の26バイトです。本文を運んだパケットだけを載せます。

IP 127.0.0.1.56158 > 127.0.0.1.35101: Flags [P.], seq 1:167, ack 1, win 64, options [nop,nop,TS val 4258309913 ecr 1500744524], length 166
    0x0000:  4500 00da 5b21 4000 4006 e0fa 7f00 0001  E...[!@.@.......
    0x0010:  7f00 0001 db5e 891d fb64 78a8 6d61 17b6  .....^...dx.ma..
    0x0020:  8018 0040 fece 0000 0101 080a fdd0 a719  ...@............
    0x0030:  5973 8b4c 504f 5354 202f 6170 692f 7573  Ys.LPOST./api/us
    0x0040:  6572 7320 4854 5450 2f31 2e31 0d0a 486f  ers.HTTP/1.1..Ho
    0x0050:  7374 3a20 3132 372e 302e 302e 313a 3335  st:.127.0.0.1:35
    0x0060:  3130 310d 0a55 7365 722d 4167 656e 743a  101..User-Agent:
    0x0070:  2063 7572 6c2f 382e 352e 300d 0a41 6363  .curl/8.5.0..Acc
    0x0080:  6570 743a 202a 2f2a 0d0a 436f 6e74 656e  ept:.*/*..Conten
    0x0090:  742d 5479 7065 3a20 6170 706c 6963 6174  t-Type:.applicat
    0x00a0:  696f 6e2f 6a73 6f6e 0d0a 436f 6e74 656e  ion/json..Conten
    0x00b0:  742d 4c65 6e67 7468 3a20 3236 0d0a 0d0a  t-Length:.26....
    0x00c0:  7b22 6e61 6d65 223a 2279 616d 6164 6122  {"name":"yamada"
    0x00d0:  2c22 6167 6522 3a32 387d                 ,"age":28}

16進数の読み方です。

位置 値 意味
先頭 45 4 と 5 IPv4、IP ヘッダーは 5 × 4 = 20 バイト
3〜4バイト目 00da 218 IP パケット全体の長さ
33バイト目 80 8 TCP ヘッダーは 8 × 4 = 32 バイト(20+オプション12)
0x0034 から 504f 5354=POST TCP のペイロード(166バイト)の始まり
0x00be の 0d0a 0d0a CRLF CRLF HTTP のヘッダーの終わり
0x00c0 から 7b22={" HTTP のペイロード(26バイト)

218バイトの IP パケットの中身tcpdump で取った実物。TCP のペイロードの中に、HTTP のヘッダーと本文がある

218B
5214026
IP 20+TCP 32 のヘッダーHTTP のヘッダーHTTP のペイロード

tcpdump の length 166 は、TCP のペイロード(TCP ヘッダーの後ろ)の長さです。 その166バイトは HTTP のヘッダー140バイトと本文26バイトでできていて、HTTP のペイロードは最後の26バイトだけです。層ごとに「ヘッダー+ペイロード」が入れ子になる様子を図にすると、次のとおりです。

flowchart TD
    A[IP パケット<br>218 バイト] --> B[IP<br>ヘッダー 20]
    A --> C[IP のペイロード<br>198 = TCP]
    C --> D[TCP<br>ヘッダー 32]
    C --> E[TCP のペイロード<br>166 = HTTP]
    E --> F[HTTP ヘッダー 140<br>本文 26]

層ごとのヘッダーの役割と Ethernet のフレームまで含めた見方は、関連記事「OSI参照モデルとは|7層の早見表とTCP/IP対応・パケット実例」で、TCP の接続と tcpdump の読み方は、関連記事「ソケットとは|TCPとUDPの違いをPythonの通信とtcpdumpで解説」で扱っています。

1つのパケットに入るペイロードの大きさ(MTU と MSS)

1つの TCP セグメントに入るペイロードの上限を MSS(Maximum Segment Size)と呼びます。 RFC 9293 は、MSS の値を「経路の MTU から、固定の IP ヘッダーと TCP ヘッダーを引いた値」にする、と定めています。イーサネットの MTU 1500 なら 1500 − 20 − 20 = 1460 バイトです。

名前空間の中の lo の MTU を 1500 にして、4,001 バイトの JSON を POST しました(実際の分割が見えるよう、まとめて送る機能の上限も1つに絞っています)。

Flags [S],  ... options [mss 1460,sackOK,TS val 2008468946 ecr 0,nop,wscale 10], length 0
Flags [S.], ... options [mss 1460,sackOK,TS val 2076933680 ecr 2008468946,nop,wscale 10], length 0
Flags [.],  seq 1:1449, ...    length 1448
Flags [.],  seq 1449:2897, ... length 1448
Flags [P.], seq 2897:4137, ... length 1240
1460B接続のときに伝えた MSSMTU 1500 − 20 − 20
1448B1つのパケットのペイロードオプション12バイト分少ない
3個4,136バイトを運んだパケット1448+1448+1240

HTTP のヘッダー135バイトと本文4,001バイト(合計4,136バイト)は、3つのパケットに分かれて届きました。 1つのパケットのペイロードが1460ではなく1448なのは、TCP のタイムスタンプのオプション(12バイト)がヘッダーに付いたためです。RFC 9293 でも、オプションの分は送るときにデータを減らす、とされています。受け取る側の TCP が3つをつなげて、アプリには4,136バイトの1つの流れとして渡します。

JWTのペイロード(3つの部分をデコードする)

この節では、JWT(JSON Web Token)の「ペイロード」が何で、どうすれば中身を読めるのか、なぜ秘密の情報を入れてはいけないのかが分かります。

JWT は「ヘッダー.ペイロード.署名」の3つを . でつないだ文字列で、ペイロードはクレーム(ユーザー ID・期限など)を入れた JSON を Base64url で変換したものです。 RFC 7515 は、署名つきの形を BASE64URL(ヘッダー) . BASE64URL(ペイロード) . BASE64URL(署名) と定めています。

標準ライブラリで作ってデコードする

"""JWT を標準ライブラリだけで作り、3つの部分をデコードして中身を見る"""
import base64, hashlib, hmac, json

def b64url(b: bytes) -> str:
    return base64.urlsafe_b64encode(b).rstrip(b"=").decode()

def b64url_decode(s: str) -> bytes:
    return base64.urlsafe_b64decode(s + "=" * (-len(s) % 4))   # 削られた = を戻す

secret = b"demo-secret-key-for-s351-article!"
header = {"alg": "HS256", "typ": "JWT"}
payload = {"sub": "1234567890", "name": "Yamada", "role": "admin", "iat": 1792713600, "exp": 1792717200}

h = b64url(json.dumps(header, separators=(",", ":")).encode())
p = b64url(json.dumps(payload, separators=(",", ":")).encode())
sig = b64url(hmac.new(secret, f"{h}.{p}".encode(), hashlib.sha256).digest())
token = f"{h}.{p}.{sig}"
print("JWT:", token)
print()
for name, part in zip(("ヘッダー", "ペイロード", "署名"), token.split(".")):
    raw = b64url_decode(part)
    print(f"[{name}] {len(part)}文字 → {len(raw)}バイト")
    print("   ", raw.decode() if name != "署名" else raw.hex())
JWT: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IllhbWFkYSIsInJvbGUiOiJhZG1pbiIsImlhdCI6MTc5MjcxMzYwMCwiZXhwIjoxNzkyNzE3MjAwfQ.Q-3tN14RngtiSQUEMI9Nb0FJzpL-48lsHMmYJbozx68

[ヘッダー] 36文字 → 27バイト
    {"alg":"HS256","typ":"JWT"}
[ペイロード] 114文字 → 85バイト
    {"sub":"1234567890","name":"Yamada","role":"admin","iat":1792713600,"exp":1792717200}
[署名] 43文字 → 32バイト
    43eded375e119e0b62490504308f4d6f4149ce92fee3c96c1cc99825ba33c7af
1

ヘッダー(1つ目)

署名の方式(alg)と種類(typ)。27バイトの JSON が36文字になっている。

alg・typ

2

ペイロード(2つ目)

誰のトークンか(sub)、発行時刻(iat)、期限(exp)などのクレーム。85バイトの JSON が114文字になっている。

クレームの JSON

3

署名(3つ目)

1つ目と2つ目を秘密の鍵で HMAC-SHA256 にかけた32バイト。中身を書き換えると合わなくなる。

改ざんの検出

ペイロードは暗号化されておらず、Base64url を戻すだけで誰でも読めます。 Auth0 のドキュメントも、JWS のペイロードは署名で守られていても暗号化はされていない、と説明しています。パスワードや個人情報はペイロードに入れません。iat・exp は1970年からの秒数で、1792713600 は 2026年10月23日 0時(UTC)です。

RFC 7519 が決めている主なクレームです。

クレーム 意味
iss 発行した者
sub トークンが表す主体(ユーザー ID など)
aud 受け取るべき相手
exp 有効期限(この時刻を過ぎたら使えない)
nbf この時刻より前は使えない
iat 発行した時刻
jti トークンの一意な ID

コマンドでペイロードをデコードする

JWT の Base64url は、末尾の = を削っているので、base64 -d にそのまま渡すとエラーが出ます。

cut -d. -f2 token.txt | base64 -d
{"sub":"1234567890","name":"Yamada","role":"admin","iat":1792713600,"exp":1792717200}base64: invalid input

中身は表示されましたが、base64: invalid input が出て、終了コードは1でした。- と _ を含む部分は、base64 -d では正しく戻せません。URL 用の形を戻すには GNU coreutils の basenc --base64url -d を使い、足りない = を補います(文字数を4の倍数にする)。Base64 の各言語のコードは、関連記事「Base64エンコード各言語コード一覧|sha256ハッシュのコマンド早見表」で扱っています。

署名で書き換えを見つける(PyJWT)

"""PyJWT 2.15.1 で署名と期限を確かめる。token.txt は上で作った JWT"""
import base64, json
import jwt

token = open("token.txt").read().strip()
secret = "demo-secret-key-for-s351-article!"
print(jwt.decode(token, options={"verify_signature": False}))          # 読むだけ

# ペイロードの role を "user" に書き換え、ヘッダーと署名はそのままにする
h, p, s = token.split(".")
body = json.loads(base64.urlsafe_b64decode(p + "=" * (-len(p) % 4)))
body["role"] = "user"
p2 = base64.urlsafe_b64encode(json.dumps(body, separators=(",", ":")).encode()).rstrip(b"=").decode()

for label, t, key, opts in (("正しい鍵", token, secret, {"verify_exp": False}),
                            ("書き換えた", f"{h}.{p2}.{s}", secret, {"verify_exp": False}),
                            ("違う鍵", token, "wrong-key-wrong-key-wrong-key-123", {"verify_exp": False}),
                            ("期限も確かめる", token, secret, {})):
    try:
        print(label, "→", jwt.decode(t, key, algorithms=["HS256"], options=opts))
    except jwt.PyJWTError as e:
        print(label, "→", type(e).__name__ + ":", e)
試したこと 結果
署名を確かめずに読む {'sub': '1234567890', 'name': 'Yamada', 'role': 'admin', …}
正しい鍵で検証(期限は見ない) 同じ辞書が返る
ペイロードの role を書き換えた InvalidSignatureError: Signature verification failed
違う鍵で検証 InvalidSignatureError: Signature verification failed
期限も確かめる(確認時点で exp を過ぎていた) ExpiredSignatureError: Signature has expired

ペイロードは誰でも読めて書き換えることもできますが、署名を確かめれば書き換えは見つかります。 サーバーは、ペイロードの中身を使う前に、必ず署名と期限を確かめます。JWT の仕組みと注意点は、関連記事「JWTとは|仕組みと、安全に使うための注意点」で扱っています。

Webhookのペイロードと署名

この節では、Webhook で届く「ペイロード」と、その署名をどう確かめるのかが分かります。

Webhook のペイロードは、イベントが起きたときに相手のサービスが POST してくる本文です。 GitHub のドキュメントでは、ペイロードは JSON(application/json)か URL エンコードの形で届き、上限は 25 MB、それを超えるイベントは届かない、とされています。秘密の値を設定すると、本文の HMAC-SHA256 を X-Hub-Signature-256 ヘッダーに付けて送ります。

署名は、本文のバイト列そのものにかかっています。届いた本文を一度 JSON として読み、作り直してから検証すると、次のように合わなくなりました。

import hmac, hashlib, json
secret = b"webhook-secret"
body = b'{"action":"opened","number":42}'          # 届いた本文(バイト列のまま)
sig = "sha256=" + hmac.new(secret, body, hashlib.sha256).hexdigest()
def ok(b): return hmac.compare_digest(sig, "sha256=" + hmac.new(secret, b, hashlib.sha256).hexdigest())
print("届いたバイト列で検証        :", ok(body))
re = json.dumps(json.loads(body)).encode()  # 一度パースして作り直す
print("パースして作り直した本文     :", re)
print("作り直した本文で検証        :", ok(re))
届いたバイト列で検証        : True
パースして作り直した本文     : b'{"action": "opened", "number": 42}'
作り直した本文で検証        : False

JSON として同じ意味でも、空白が1つ違えばバイト列が変わり、署名は合いません。 Webhook の署名は、フレームワークが本文を解析する前の、届いたままのペイロードで検証します。

ペイロードの大きさの上限と413エラー

この節では、ペイロードが大きすぎると何が起きるか、上限がどこで決まるか、どう直すかが分かります。

ペイロードがサーバーの上限を超えると、HTTP の状態コード 413 が返ります。 名前は仕様や製品によって違いますが、意味は同じです。

表示される名前 出したもの
413 Content Too Large RFC 9110(今の HTTP の仕様)
413 Payload Too Large RFC 7231(以前の仕様)・Node.js(Express)
413 Request Entity Too Large nginx 1.24.0

上限は、途中の機器とアプリのそれぞれにあり、いちばん小さいところで止まります。

flowchart TD
    A[クライアント<br>ブラウザ・curl] --> B[ロードバランサー・CDN]
    B --> C[nginx<br>client_max_body_size 既定 1m]
    C --> D[アプリ Express<br>express.json 既定 100kb]
    D --> E[処理して 201 を返す]

nginx:client_max_body_size(既定 1m)

nginx のドキュメントでは、client_max_body_size の既定は 1m で、超えると 413 を返し、0 にすると大きさを確かめなくなる、とされています。http・server・location のどこにでも書けます。

location /api/ {
    proxy_pass http://127.0.0.1:35100;      # 既定の client_max_body_size(1m)
}
location /upload/ {
    client_max_body_size 10m;              # この場所だけ上限を広げる
    proxy_pass http://127.0.0.1:35100;
}
== /api/ に 1,048,576 バイト(ちょうど 1m)
201 送信 1048576 バイト
== /api/ に 1,048,577 バイト(1バイト超え)
413 送信 0 バイト
== /upload/ に 2,000,000 バイト
{"received_bytes": 2000000} 201
HTTP/1.1 413 Request Entity Too Large
Server: nginx/1.24.0 (Ubuntu)
Content-Type: text/html
Content-Length: 192
Connection: close

error.log には次の行が出ました。

[error] 5579#5579: *3 client intended to send too large body: 1048577 bytes, client: 127.0.0.1, server: , request: "POST /api/x HTTP/1.1", host: "127.0.0.1:35102"

1m はちょうど 1,048,576 バイトまでで、1バイト超えると 413 でした。 このとき curl は Expect: 100-continue を付けて、サーバーの返事を待ってから本文を送ろうとしていました。nginx は Content-Length を見て先に 413 を返したので、本文は0バイトしか送られませんでした。

Express:express.json の limit(既定 100kb)

body-parser の README では、limit の既定は '100kb' で、超えたときのエラーは status が 413、type が 'entity.too.large' とされています。

// Express 5:JSON のペイロードを受け取り、上限を超えたら 413 を JSON で返す
const express = require("express");
const app = express();

app.use("/small", express.json());                    // 既定の limit は 100kb
app.use("/large", express.json({ limit: "1mb" }));    // 上限を広げる

app.post(["/small", "/large"], (req, res) => {
  res.status(201).json({ ok: true, body_type: typeof req.body, bytes: Number(req.get("content-length")) });
});

// ボディの解析で出たエラーをまとめて受ける(413・400)
app.use((err, req, res, next) => {
  console.error(`${err.status} ${err.type}: ${err.message}`);
  res.status(err.status || 500).json({ error: err.type, message: err.message, limit: err.limit, length: err.length });
});

app.listen(35103, "127.0.0.1", () => console.log("listening 35103"));
== 102,400 バイト → /small
{"ok":true,"body_type":"object","bytes":102400} [201]
== 102,401 バイト → /small
{"error":"entity.too.large","message":"request entity too large","limit":102400,"length":102401} [413]
== 102,401 バイト → /large
{"ok":true,"body_type":"object","bytes":102401} [201]
== 壊れた JSON
{"error":"entity.parse.failed","message":"Unexpected token 'y', \"{\"name\": yamada}\" is not valid JSON"} [400]
== Content-Type を付け忘れ
{"ok":true,"body_type":"undefined","bytes":17} [201]

100kb は 102,400 バイトで、1バイト超えると 413 になりました。 エラー処理を書かない場合、Express は HTTP/1.1 413 Payload Too Large と HTML を返し、ログに PayloadTooLargeError: request entity too large を出しました。Content-Type を付け忘れると、エラーにはならず req.body が undefined のまま進みます。 express.json は、Content-Type が application/json のリクエストだけを読むためです。

主な上限の早見表

製品・サービス ペイロードの上限 確かめ方
nginx client_max_body_size 既定 1m 実測(1,048,577 バイトで 413)
Express(express.json) limit 既定 100kb 実測(102,401 バイトで 413)
Apache HTTP Server LimitRequestBody 既定 1073741824(1GiB) 公式。2.4.53 以前の既定は 0(無制限)
AWS Lambda(同期呼び出し) リクエスト・レスポンス各 6 MB 公式。非同期は 1 MB
GitHub の Webhook 25 MB 公式。超えると届かない

上の値は 2026年10月23日時点の公式ドキュメントの値です。上限を広げる前に、本当にその大きさを1回で送る必要があるかを考えます。 大きなファイルは、ストレージに直接アップロードして URL だけを API に渡す、分割して送る、gzip で小さくする、といった方法があります。状態コードの一覧は、関連記事「HTTPステータスコード 一覧|全コードの原因と対処・curl実例つき」で扱っています。

ペイロードのよくあるエラーと直し方

この節では、ペイロードまわりで実際に出たエラー文から、原因と直し方を引けます。

エラー文・症状 原因 直し方
413 Request Entity Too Large(nginx) 本文が client_max_body_size を超えた 必要な location だけ上限を広げる
PayloadTooLargeError: request entity too large express.json の limit(既定 100kb)を超えた express.json({ limit: "1mb" })
entity.parse.failed・Unexpected token … is not valid JSON 本文が正しい JSON でない(400) JSON.stringify や json= で作る
req.body が undefined Content-Type が application/json でない ヘッダーに Content-Type を付ける
requests.exceptions.JSONDecodeError: Expecting value: line 1 column 1 (char 0) 413 などで HTML が返り、r.json() で読んだ 先に r.status_code と Content-Type を見る
base64: invalid input JWT の Base64url を base64 -d に渡した = を補い basenc --base64url -d
InvalidSignatureError: Signature verification failed JWT のペイロードを書き換えた・鍵が違う 発行した鍵で検証する
ExpiredSignatureError: Signature has expired JWT の exp を過ぎた トークンを取り直す
Webhook の署名が合わない 本文を解析・整形してから HMAC を計算 届いたままのバイト列で検証
ファイルの改行が消えて届く curl の -d @file は改行を取り除く --data-binary @file
multipart の区切りが無いと言われる FormData を送るのに Content-Type を手で書いた Content-Type を書かずブラウザに任せる

送る前に確かめることです。

  • 1Content-Type が本文の形と合っているかJSON なら application/json。合わないと、サーバーは本文を読まずに進むことがある
  • 2Content-Length はバイト数か日本語は UTF-8 で1文字3バイト。ライブラリに任せれば自動で正しい値になる
  • 3大きさが途中の上限を超えないかnginx 1m・Express 100kb など、いちばん小さい上限で 413 になる
  • 4秘密の値をペイロードに入れていないかJWT のペイロードは誰でも読める。認証情報はヘッダーで送り、通信は HTTPS にする
  • 5受け取った本文を検証してから使うか型・必須の項目・大きさを確かめ、余分な項目は使わない

受け取ったペイロードを検証する(JSON Schema)

チェックリストの5番目を、JSON Schema(JSON の形を JSON で書く決まり)で行う例です。Python の jsonschema 4.26.0 で、4つの本文を検証しました。

"""受け取ったペイロードを JSON Schema で検証する"""
import json
from jsonschema import Draft202012Validator

schema = {
    "type": "object",
    "properties": {
        "name": {"type": "string", "minLength": 1, "maxLength": 50},
        "age": {"type": "integer", "minimum": 0, "maximum": 150},
        "role": {"enum": ["user", "admin"]},
    },
    "required": ["name", "age"],
    "additionalProperties": False,          # 決めていない項目は受け付けない
}
validator = Draft202012Validator(schema)

for body in (b'{"name":"\xe5\xb1\xb1\xe7\x94\xb0","age":28}',
             b'{"name":"","age":"28"}',
             b'{"name":"Yamada","age":28,"role":"owner","is_admin":true}',
             b'{"age":28}'):
    payload = json.loads(body)
    errors = sorted(validator.iter_errors(payload), key=lambda e: list(e.path))
    print(body.decode(), "→", "OK" if not errors else "")
    for e in errors:
        print("   ", "/".join(map(str, e.path)) or "(全体)", ":", e.message)
{"name":"山田","age":28} → OK
{"name":"","age":"28"} → 
    age : '28' is not of type 'integer'
    name : '' should be non-empty
{"name":"Yamada","age":28,"role":"owner","is_admin":true} → 
    (全体) : Additional properties are not allowed ('is_admin' was unexpected)
    role : 'owner' is not one of ['user', 'admin']
{"age":28} → 
    (全体) : 'name' is a required property

型の違い(文字列の "28")、空の名前、決めていない項目(is_admin)、必須の項目の抜けを、すべてエラーとして見つけました。 additionalProperties: False を付けないと、is_admin のような余分な項目も通ります。受け取ったペイロードは、大きさ(413)→ 形式(JSON として読めるか)→ 中身(スキーマ)の順に確かめると、どこで止まったかが分かりやすくなります。

ペイロードを見る方法の早見表

見たいもの 方法
curl で送る本文と受け取る本文 curl -v、curl --trace-ascii -
Python で送った本文 r.request.body・r.request.headers
ブラウザが送った本文 DevTools の Network → Payload タブ
ブラウザが受け取った本文 DevTools の Network → Response タブ
パケットのデータ部 tcpdump -i <インターフェース> -nn -X 'tcp port <番号>'
JWT のペイロード 2つ目を Base64url でデコード

よくある質問

Q. ペイロードとは簡単に言うと何ですか? A. 通信で送るまとまりのうち、宛先や形式などの制御情報(ヘッダー)を除いた「届けたいデータ本体」です。荷物にたとえると、荷札がヘッダー、中身がペイロードです。

Q. API のペイロードとは何ですか? A. リクエストやレスポンスの本文(ボディ)のことです。多くは JSON で、{"name":"山田","age":28} のような部分を指します。認証のトークンや Content-Type はヘッダー側に入ります。

Q. ペイロードとボディ(body)の違いは? A. HTTP ではほぼ同じ意味で使われます。仕様の言葉は、RFC 7231 の「payload」から RFC 9110 の「content」に変わりました。圧縮して送るときは、回線上のボディと元の中身のバイト数が違うことがあります。

Q. ヘッダーとペイロードの違いは? A. ヘッダーは届け方と中身の説明(宛先・形式・長さ・認証)、ペイロードは届けたいデータそのものです。HTTP/1.1 では、ヘッダーの後の空行から後ろがペイロードです。

Q. パケットのペイロードとは?ペイロード長とは? A. IP や TCP のヘッダーの後ろにあるデータ部です。その大きさがペイロード長で、tcpdump の length 166 のような値です。MTU 1500 の経路では、1つの TCP セグメントのペイロードは最大1460バイト(タイムスタンプ付きなら1448バイト)でした。

Q. JWT のペイロードには何が入っていますか?誰でも読めますか? A. sub(ユーザー ID)・iat(発行時刻)・exp(期限)などのクレームの JSON です。暗号化されていないので、Base64url を戻せば誰でも読めます。秘密の情報は入れず、使う前に署名と期限を確かめます。

Q. 413 Payload Too Large はどう直しますか? A. 本文がサーバーの上限を超えています。nginx なら client_max_body_size(既定 1m)、Express なら express.json({ limit })(既定 100kb)を、必要な場所だけ広げます。大きなファイルは分けて送る方法も考えます。

Q. GET リクエストにペイロード(本文)は付けられますか? A. 送ること自体はでき、curl の -X GET -d で7バイトの本文が届きました。ただし MDN は GET の本文の意味は定義されておらず、拒否するサーバーもあるとしています。検索の条件はクエリ文字列で送ります。

Q. Chrome でリクエストペイロードを見るには? A. DevTools の Network パネルでリクエストを選び、Payload タブを開きます。送ったままの形は view source、レスポンスの本文は Response タブで見ます。

Q. マルウェアのペイロードとは? A. セキュリティの用語で、マルウェアが侵入した後に実行する処理の本体を指します。通信のペイロードとは別の意味で使われます。

Q. ロケットのペイロードとは? A. ロケットが打ち上げる人工衛星・探査機・実験装置などの荷物のことです。「運ぶ中身」という意味は、通信のペイロードと同じです。

Q. ペイロードは英語で何と言いますか?語源は? A. 英語は payload です。pay(支払う)と load(荷物)からなり、運賃をもらって運ぶ荷物(有償荷重)が元の意味です。

まとめ

  • ペイロードは、ヘッダーなどの制御情報を除いた「運びたいデータ本体」。API では本文(ボディ)、ネットワークではパケットのデータ部を指す。
  • HTTP/1.1 では空行から後ろがペイロード。curl の JSON は26バイト、requests の json= は日本語を書き換えて35バイトになった。Content-Length はバイト数。
  • 形は Content-Type で伝える。JSON・フォーム・multipart で本文の形がまったく違う。FormData の Content-Type はブラウザに任せる。
  • 層ごとに「ヘッダー+ペイロード」が入れ子になる。218バイトのパケットは IP 20+TCP 32+HTTP ヘッダー140+本文26。MTU 1500 では1つのペイロードは最大1460(実測1448)バイト。
  • JWT のペイロードは誰でも読める。秘密を入れず、署名と期限を確かめてから使う。
  • 本文が上限を超えると 413。nginx は 1m、Express は 100kb が既定で、いちばん小さい上限で止まる。

参考・出典

確認日はいずれも 2026年10月23日です。

  • Weblio 辞書「payload」(IT用語辞典バイナリ・デジタル大辞泉ほか):https://www.weblio.jp/content/payload
  • RFC 7231「Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content」3.3 Payload Semantics:https://www.rfc-editor.org/rfc/rfc7231
  • RFC 9110「HTTP Semantics」6.4 Content:https://www.rfc-editor.org/rfc/rfc9110
  • RFC 9293「Transmission Control Protocol (TCP)」3.7.1 Maximum Segment Size Option:https://www.rfc-editor.org/rfc/rfc9293
  • RFC 7515「JSON Web Signature (JWS)」:https://www.rfc-editor.org/rfc/rfc7515
  • RFC 7519「JSON Web Token (JWT)」:https://www.rfc-editor.org/rfc/rfc7519
  • Auth0 Docs「JSON Web Token の構造」:https://auth0.com/docs/ja-jp/secure/tokens/json-web-tokens/json-web-token-structure
  • MDN「413 Content Too Large」:https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/413
  • MDN「GET request method」:https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Methods/GET
  • Chrome for Developers「Network features reference(View request payload)」:https://developer.chrome.com/docs/devtools/network/reference
  • nginx「Module ngx_http_core_module(client_max_body_size)」:https://nginx.org/en/docs/http/ngx_http_core_module.html
  • Apache HTTP Server 2.4「core(LimitRequestBody)」:https://httpd.apache.org/docs/2.4/mod/core.html
  • expressjs/body-parser「README」:https://github.com/expressjs/body-parser
  • AWS Lambda Developer Guide「Lambda quotas」:https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html
  • GitHub Docs「Webhook events and payloads」:https://docs.github.com/en/webhooks/webhook-events-and-payloads
  • python-jsonschema「Schema Validation」:https://python-jsonschema.readthedocs.io/en/stable/validate/

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「ペイロードとは|ヘッダーとの違い・API・JWT・パケットを実物で解説」

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?