HTTP的格式


HTTP 的訊息格式分成兩種:request messages 以及 response messages。

我們以curl取得一組request messages 以及 response messages的例子:

> curl -v http://example.com
*   Trying 93.184.216.34:80...
* TCP_NODELAY set
* Connected to example.com (93.184.216.34) port 80 (#0)
> GET / HTTP/1.1
> Host: example.com
> User-Agent: curl/7.68.0
> Accept: */*
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Age: 600574
< Cache-Control: max-age=604800
< Content-Type: text/html; charset=UTF-8
< Date: Sat, 26 Feb 2022 10:19:07 GMT
< Etag: "3147526947+ident"
< Expires: Sat, 05 Mar 2022 10:19:07 GMT
< Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
< Server: ECS (sab/573F)
< Vary: Accept-Encoding
< X-Cache: HIT
< Content-Length: 1256
< 
<!doctype html>
<html>
<head>
    <title>Example Domain</title>

    <meta charset="utf-8" />
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <style type="text/css">
    body {
        background-color: #f0f0f2;
        margin: 0;
        padding: 0;
        font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
        
    }
    div {
        width: 600px;
        margin: 5em auto;
        padding: 2em;
        background-color: #fdfdff;
        border-radius: 0.5em;
        box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02);
    }
    a:link, a:visited {
        color: #38488f;
        text-decoration: none;
    }
    @media (max-width: 700px) {
        div {
            margin: 0 auto;
            width: auto;
        }
    }
    </style>    
</head>

<body>
<div>
    <h1>Example Domain</h1>
    <p>This domain is for use in illustrative examples in documents. You may use this
    domain in literature without prior coordination or asking for permission.</p>
    <p><a href="https://www.iana.org/domains/example">More information...</a></p>
</div>
</body>
</html>
* Connection #0 to host example.com left intact

HTTP Request Message

GET / HTTP/1.1
Host: example.com
User-Agent: curl/7.68.0
Accept: */*

第一行稱作request line,接下來三行是head lines,head lines可以有數行不同的header field name及value,第六行開始是Entity Body,這個例子沒有放任何東西。

完整結構如下: HTTP request message: general format

HTTP Response Messages

HTTP/1.1 200 OK
Age: 600574
Cache-Control: max-age=604800
Content-Type: text/html; charset=UTF-8
Date: Sat, 26 Feb 2022 10:19:07 GMT
Etag: "3147526947+ident"
Expires: Sat, 05 Mar 2022 10:19:07 GMT
Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
Server: ECS (sab/573F)
Vary: Accept-Encoding
X-Cache: HIT
Content-Length: 1256

<!doctype html>
以下省略

第一行是status line,後面數行是header lines,最後<!doctype html>開始是entity body。

完整結構如下:

HTTP response message: general format


See also