超文本传输协议(HTTP)
是一个用于传输超媒体文档(例如 HTML)的应用层协议。它是为 Web 浏览器与 Web 服务器之间的通信而设计的。
介绍
HTTP(HyperText Transfer Protocol,超文本传输协议)
是互联网使用的核心协议,是所有的Web应用程序的通信协议。
说明:
请求 request
Http 请求消息分为消息头和消息体。
<request info>\r\n
key1: value1\r\n
key2: value2\r\n
...
\r\n // 空行
<request body>
说明:
request info
组成:<method[GET|POST|PUT|...]> <url> <protocol[HTTP/1.0|HTTP/1.1|HTTP/2]>
- Header
- Host
- User-Agent
- Referer 发出请求的原始 URL
- Cookie
响应 response
<response info>\r\n
key1: value1\r\n
key2: value2\r\n
...
\r\n // 空行
<response body>
说明:
response info
组成:<protocol[HTTP/1.0|HTTP/1.1|HTTP/2]> <status code[20x|30x|40x|50x]> <status text[Accept|...]>
- Header
- Server web 服务器软件名称
- Content-Type 消息体类型,浏览器解析使用
- Content-Length 消息体的字节长度
- Set-Cookie 设置 cookie 信息,后续再请求会带回该信息,一般存储状态信息
Multipart formposts
POST http://example.com/submit.cgi HTTP/1.1
Host: example.com
User-Agent: curl/7.46.0
Accept: */*
Content-Length: 313
Expect: 100-continue
Content-Type: multipart/form-data; boundary=------------------------fa163e399192a323
--------------------------fa163e399192a323
Content-Disposition: form-data; name="secret"; filename="file.txt"
Content-Type: text/plain
contents of the file
--------------------------fa163e399192a323--
说明:
Header
boundary
定义为 ------------------------fa163e399192a323
空行
- 开始符
"--" + boundary
--------------------------fa163e399192a323
Content-Disposition
定义基本信息,响应头指示回复的内容该以何种形式展示,是以内联的形式(即网页或者页面的一部分),还是以附件的形式下载并保存到本地
Content-Disposition: form-data
Content-Disposition: form-data; name="fieldName"
Content-Disposition: form-data; name="fieldName"; filename="filename.jpg"
Content-Type: text/plain
定义文件格式
空行
文件内容
- 结束符
"--" + boundary + "--"
HTTP 方法
- GET 获取资源
- POST 创建资源
- PUT 修改资源
- DELETE 删除资源
- HEAD 检测资源是否存在
- OPTIONS 请求服务器报告某一资源的 HTTP 方法,通常返回 Allow 消息头响应
- CONNECT
- TRACE 诊断
RPC vs HTTP
- RPC 是一个完整的远程调用方案,包括:
接口规范
、序列化/反序列化规范
、通信协议
(如七层的HTTP、四层的TCP等)
- HTTP 是一个通信协议,工作中 OSI 的第七层
示例