概念
http(HyperText transfer protocol)是超文本传输协议
超文本: 文字,音频,视频等
传输:不同于路由协议,隧道协议,传输协议用于两方交换数据
协议:符合rfc规范的应用层协议
相关技术
- web服务器
- 爬虫
- cdn
- html/webservice/waf
报文
请求
1 | request line: method + URI + version |
响应
1 | status line: version + status code + reason |
常用头
通用字段
Data
:通用字段,但一般放在响应头,代表报文创建时间
请求字段
host
: 请求消息必带字段,代表了ip地址下的具体哪台主机,可用于路由重定向
User-Agent
: 请求字段,描述客户端,比如chrome,实际作用不大
响应字段
server
:响应字段,代表web服务器软件和版本,也可以随便写一个来隐藏服务器软件
实体字段
content-lenght
:实体字段,代表body的长度,如果不带content-length则表示报文是不定长的,chunked类型
method
GET
读取下载数据 //幂等
HEAD
获取数据元信息 //幂等
POST
提交数据,偏向create,实际上创建修改都基本用POST //非幂等
PUT
和POST差不多,偏向update,实际多用POST替代 //幂等
DELETE
删除数据 //幂等
CONNECT
建立隧道,webf服务器可以因此作为代理
OPTIONS
列出可选方法
TRACE
追踪请求-响应的传输路径
uri
schema :// user:passwd@ host:port path ?query #fragment
上面的#代表锚点,直接到页面的一个标签处。因为有中文,这里也做了转义
状态码
1xx
提示信息,代表中间状态
101:切换协议
2xx
成功信息
204:响应里面没有body
206: 响应是分段传输的一部分
3xx
重定向
301: 永久重定向
302:临时重定向
304:缓存重定向
4xx
客户端错误
400:格式错误
404:未找到
403:禁止访问
5xx
服务器错误
503:服务器忙
数据类型和编码
http是超文本传输协议,支持文本,视音频等格式,所以需要带上文件类型,因为数据可能被压缩,也要带上压缩格式,文件类型符合MIME协议
text
- text/html 超文本文档
- text/plain 纯文本
- text/css 样式表
audio
- audio/mpeg
video
- video/mp4
image
- image/gif
- image/jpeg
application
- application/pdf
- application/json
encoding
- gzip
- deflate
- br
语言和字符集
- en-US en-GB zh-CN
- utf-8 gbk
内容协商
1 | client server |
分段和范围
感觉不重要,不记录了
长连接
Connection: keep-alive 表示长连接
Connection: close 关闭连接
队头阻塞
因为http是请求-应答模式,一条连接上,前一个请求阻塞了,会影响后面的请求,也就是队头阻塞
解决办法:
请求方并发多个连接,一般浏览器是开6个
响应方开启多主机,域名分片
cookie
cookie可以用来记录客户端的状态
Expire/Max-Age
: 表示cookie的过期时间
HttpOnly
: 表示cookie只适用于http协议,防止脚本攻击
Secure
: 表示cookie智能通过https协议传输,但cookie本身是明文的
SameSite
: 表示cookie只用于本站,防止跨站攻击
Priority
: 表示cookie移除时的优先级
http特点
灵活可扩展
head支持自定义字段
可靠传输
下层是tcp/ip
应用层协议
在应用层协议中(ftp,ssh)表现突出
请求应答
契合c/s, b/s架构
无状态
因为请求应答,两次连接彼此独立,不会记录请求方的状态,但可以通过cookie来实现有状态
流程
浏览器输入 http://nginx.org/
1 | 查dns |