超文本传输协议(HTTP)
是一个用于传输超媒体文档(例如 HTML)的应用层协议。它是为 Web 浏览器与 Web 服务器之间的通信而设计的。
介绍
HTTP(HyperText Transfer Protocol,超文本传输协议)
是互联网使用的核心协议,是所有的Web应用程序的通信协议。
说明:
URI & URL
统一资源标识符(Uniform Resource Identifier, URI)
一个用来标识
某一互联网资源名称的字符串
统一资源定位符(Uniform Resource Locator, URL)
一个用于标识和定位
某一互联网资源名称的字符串,即我们经常说的网页地址
URL 组成
一般格式如下:
scheme:[subscheme]://[username:password@]host:port/path?query#fragment
说明:
Scheme
通信协议,一般为http、https、ftp等
subscheme
子协议(可选),一般用于区分不同数据库驱动协议
Host
服务器的域名或ip地址
Port
端口号(可选),http默认为80、https默认为443
Path
目录,由/
分隔的字符串,表示具体的资源路径
Query
:查询项(可选),和 Path
见使用 ?
分隔,多个用 &
隔开,参数的名和值用 =
隔开
Fragment
信息片段,用于指定网络资源中的某片断
示例:
http://user:pwd@baidu.com/login
ftp://user:pwd@127.0.0.1
telnet://user:pwd@127.0.0.1
ssh://user:pwd@127.0.0.1
# 数据库
jdbc:mysql://localhost:3306/test?user=root&password=pwd
jdbc:oracle:thin:@localhost:1521:test
jdbc:sqlserver://localhost:1433:DatabaseName=test
请求 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 的第七层
示例