我了解从客户端来看 HTTP 请求是什么样的,但我很好奇的是服务器使用什么方法来返回页面?
客户:
GET /index.html HTTP/1.1
Host foo.com:80
服务器:
Does it perform an HTTP PUT of index.html ? If not, then what? Are HTTP methods used both ways?
如果响应不使用 HTTP 方法,那么它是否只是一个(或多个)包含有效负载的 TCP 数据包?数据包中是否有任何 HTTP 协议特定信息?
答案1
可以使用以下方法之一发送 HTTP 请求:
> 获取()
发出 HTTP GET 请求。此方法使 Web 服务器返回所请求的页面。
> 头()
发出 HTTP HEAD 请求。此方法使 Web 服务器仅返回响应的标头,而不返回任何正文。
> 发布()
发出 HTTP POST 请求。使用此方法将数据(例如表单结果)发送到 Web 服务器,或上传文件。
>Put()
发出 HTTP PUT 请求。使用此方法将数据上传到 Web 服务器。PUT 请求并不常见。
> 发送()
向服务器发送指定类型的 HTTP 请求。
在接收并解释请求消息后,服务器会以 HTTP 响应消息进行响应。
Response = Status-Line ; Section 6.1
*(( general-header ; Section 4.5
| response-header ; Section 6.2
| entity-header ) CRLF) ; Section 7.1
CRLF
[ message-body ] ; Section 7.2
回复信息摘自以下网站:W3网站
答案2
我会回答我自己的问题。不,HTTP 方法仅用于请求标头。状态代码用于响应标头。我知道我已经查看了双方的标头,应该能够不查找就说出这一点,但我不确定。在有用的论坛上提出这样的问题(可以相当容易地查找)的好处是,有时您会学到一些额外的东西,或者获得一些有助于加深理解的观点。
答案3
第一的
您的请求必须符合 HTTP 协议。
即你的标题必须以空行结束:
GET /index.html HTTP/1.1
Host foo.com:80
注意:每行必须以回车换行符, 不仅如果也不仅仅是碳排放:
00000000 47 45 54 20 2f 20 48 54 54 50 2f 31 2e 30 5c 72 |GET / HTTP/1.0\r|
00000010 5c 6e 48 6f 73 74 3a 20 66 6f 6f 2e 63 6f 6d 3a |\nHost: foo.com:|
00000020 38 30 5c 72 5c 6e 5c 72 5c 6e 0a |80\r\n\r\n.|
服务器的答案可以匹配相同的形式:
标题 - 空行 - 正文
因此,您可以使用删除标题sed
,例如:
nc foo.com 80 <<<$'GET / HTTP/1.0\r\nHost: foo.com:80\r\n\r' |
sed '1,/^\r\?$/d' > index-of-foo.com.html
或者只转储标题:
nc foo.com 80 <<<$'GET / HTTP/1.0\r\nHost: foo.com:80\r\n\r' |
sed '/^\r\?$/q'
你可以在网上找到所有答案:
第一个参考文档:在 w3.org 上
或者参见维基百科:维基百科上的 http
有什麼解答方法?
答案的标题确实包含了了解如何处理答案所需的所有信息。
本质上,有一个内容类型,需要告诉您的浏览器如何处理该信息。
服务器可能需要处理一些内容来构建其答案,但在服务器和客户端之间只有一个(愚蠢的) TCP 连接。
服务器无法要求客户端做任何事情......
除了高级处理堆栈之间的交互构造之外,例如JavaScript的,HTML5 教程(样式表),Java 语言,闪光或其他呆伯特之光。