HTTP的概念、原理、数据格式
HTTP两种最直观的印象
- 浏览器输入网址,打开网页
- 客户端中发送网络请求,返回相应内容
Hypertext Transfer Protocol 超文本传输协议
- 超文本(HTML):在设备中显示的、含有可以指向其他文本的链接文本
- HTTP与HTML一起出现的
HTTP工作方式
客户端拼装HTTP报文并向服务器发送请求,服务器处理请求并返回响应报文客户端接收到响应报文解析并得到数据后进行相应的处理
URL转换成HTTP报文
- 实例 http://xxx.xx/xxx?a=b
http: 协议类型
//xxx.xx 服务器地址
xxx?a=b 路径
转换成
GET /xxx?a=b HTTP/1.1
Host: xxx.xx
Request(请求报文)
以 api.github.com/users/shuike/repos
请求行 -> GET /users HTTP/1.1
- GET 请求方法
- /users 请求地址
- HTTP/1.1 HTTP版本
请求方法 Request Method
- GET
- 获取资源, 没有Body
- POST
- 增加或修改资源, 有Body
- PUT
- 修改资源, 有Body
- DELETE
- 删除资源, 没有Body
- HEAD
- 与GET同功能, 不返回Body
POST与PUT 幂等
Headers:
Host: api.github.com
Content-Length: xx
等。。
如果是POST还有 Body:
请求体
Response(响应报文)
响应报文三部分
状态行 -> HTTP/1.1 200 OK
- HTTP/1.1 HTTP版本
- 200 状态码(Status Code)
- OK 状态描述
Headers
Body
状态码 Status Code
- 1xx: 临时性消息
- 2xx: 成功
- 3xx: 重定向
- 301 永久更改
- 302 临时更改
- 304内容没被改变
- …
- 4xx: 客户端错误
- 5xx: 服务器错误
Header
作用:HTTP消息的元数据(metadata)
-
Host:服务器主机地址(一般为域名+TCP端口)
这里的Host不是用来寻址的,由于同一个IP之下可能会有多个服务器存在,所以用于找到目标主机后确认主机域名和端口。
-
Content-Length: 内容的长度(字节)
-
Content-Type:内容类型
- text/html:html文本,用于浏览器
- application/x-www-form-urlencoded:普通表单,encoded URL格式
- multipart/from-data:多部分形成,一般用于传输包含二进制内容的多项内容 后面会附带boundary指定分节符
- application/json:json格式,一般用于WebApi的响应或POST、PUT请求
- image/jpeg 、 application/zip:单文件,一般用于WebApi的响应或POST、PUT请求
-
Location:重定向的目标URL
-
User-Agent:用户代理(个人理解是客户端标识,最直观的运用是判断是否手机或电脑访问资源)
-
Range:指定Body的内容范围(是否支持分段加载)
- Range: bytes=0-xxx
-
Accept-Range:指定Body的内容范围(是否支持分段加载)
-
Cookie:发送Cookie
-
Set-Cookie:设置Cookie
-
Authorization:授权信息
部分其他Header
- Accept:客户端能接受的数据类型。如text/html
- Accept-Charset:客户端接受的字符集。如utf-8
- Accept-Encoding:客户端接受的压缩编码类型。如gzip
- Content-Encoding:类型压缩。如gzip