- 简单快速
- 每个资源是固定的,如果想访问某个资源可以简单输入一个uri即可,请求方法常用的有GET、HEAD、POST
- 灵活
- HTTP允许传输任意类型的数据对象,正在传输的类型由Content-Type加以标记
- 无连接
- 限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接
- 无状态
- HTTP协议是无状态协议,于事务处理没有记忆能力,下次链接需要前一个链接的数据
- 请求行
- http方法 (GET)
- 请求URL地址 (/home/xman/data/....)
- HTTP协议及版本 (HTTP/1.1)
- 请求头(常有)
- accept属性 告诉服务端 客户端接受什么类型的响应
- referer属性 这个请求是从哪个URL过来的,即是表明当前网页的url
- Cache-Control属性 对缓存进行控制,希望响应返回的内容在客户端要被缓存多长时间或不缓存
- Content-Encodingp属性 压缩类型
- 空行
- 请求体
- 请求内容(自定)
- 状态行
- 报文协议 (HTTP)
- HTTP版本号 (1.1)
- 状态码 (200)
- 状态描述 (OK)
- 响应头
- Server //服务器应用程序软件的名称和版本
- Content-Type //响应正文的类型(是图片还是文本还是二进制字符串)
- Content-Length //响应正文长度
- 空行
- 响应体
- 响应内容(自定)
- GET 获取资源
- POST 传输资源
- OPTIONS(CROS相关)
- 获取服务器支持的HTTP请求方法
- AJAX进行跨域请求时的预检,用以判断实际发送的请求是否安全
- PUT 更新资源
- DELETE 删除资源
- HEAD 获得报文首部
重要
| GET | POST | |
|---|---|---|
| 触发 | 浏览器地址栏输入,点击a链接,或者ajax | 表单提交,或者ajax |
| 用途 | 用于获取信息 | 用于修改服务器上的数据 |
| 对数据副作用 | 无 | 有 |
| 幂等 | 非幂等 | 幂等 |
| 可缓存 | 可缓存 (浏览器缓存,nginx,server端Etag) | 不可缓存 |
| 浏览器行为 | 无 | 重新执行,浏览器也会弹提示框“确认重新提交表单” |
| 安全性[1] | 请求参数直接在路径显示 | 安全一点点 |
| 长度限制[2] | 某些浏览器或服务器,为了性能和安全,会给 URL 长度加限制 | 无 |
- [1]因为HTTP报文都是明文,都不安全,最好还是HTTPS协议
- [2]长度限制:HTTP 协议没有 Body 和 URL 的长度限制
更新keep-alive长连接,提高了tcp链接复用性

