主要特点:
- 简单快速:每个资源uri是固定的,访问简单
- 灵活:每个http协议头部都有一个数据类型(content-type),通过一个Http协议(不需要配合其他协议)就可以完成不同类型数据的传输
- 无连接:连接一次就会断掉
- 无状态:客户端和服务端是两种状态,服务端不会区分两次连接者的身份
报文的组成部分:
- 请求报文:
请求行(http方法,页面地址,http协议以及版本),请求头(key,value告诉服务器要什么。host以下),空行(告诉服务端下一个不再是请求头),请求体
- 响应报文
状态行,响应头,空行,响应体
HTTP方法:
GET |
获取资源 |
|
POST |
传输资源 |
|
PUT |
更新资源 |
很少用 |
DELETE |
删除资源 |
一般不用 |
HEAD |
获得报文头部 |
post/get区别:
get |
post |
在浏览器回退时无害的 |
在浏览器回退时会再次提交请求,重复提交 |
产生的URL地址被收藏 |
不能收藏 |
请求会被浏览器主动缓存 |
需要手动设置才能被缓存 |
只能进行URL编码 |
支持多种编码方式 |
请求参数会被完整的保存在浏览器历史记录里 |
参数不会被保留 |
URL中传的参数有长度限制2kb(http协议对长度没限制,浏览器或服务器有) |
没有限制 |
参数数据类型只能是ascii字符 |
没有限制 |
参数直接暴露在URL上,不能传递敏感信息 |
不暴露参数在url |
参数通过URL传递 |
参数放在request body中 |
http状态码:
1xx |
指示信息 |
表示请求已接收,继续处理 |
2xx |
|
表示请求已被成功接收 |
3xx |
重定向 |
要完成请求必须更进一步操作 |
4xx |
客户端错误 |
请求有语法错误或者无法实现 |
5xx |
服务器错误 |
服务器未能实现合法的请求 |
200 OK |
客户端请求成功 |
206 Partial Content |
客户端发送了一个带Range头的请求,服务端完成了它,一般是video视频播放,文件很大时候返回206 |
301 Moved permanently |
所请求的页面已经转移至新的url |
302 Found |
所请求的页面已经临时转移至新的url |
304 not modified |
客户端有缓冲的文档并发出了一个条件性请求,服务器告诉客户端原来缓冲的文档还可以用 |
400 Bad Request |
客户端请求有语法错误,不能被服务器理解 |
401 unauthorized |
请求未经授权,必须和WWW-Authenticate报头域一起使用 |
403 Forbidden |
对被请求页面的访问被禁止 |
404 NOT Found |
请求的资源不存在 |
500 Internal Server Error |
服务器发生不可预期的错误,原来缓冲的文档还可以继续使用 |
503 Server Unavailable |
请求未完成,服务器临时过载或宕机,一段时间后可能恢复正常 |
什么是持久连接keep-alive:
- Http协议采用”请求——应答”模式
- 持久连接只有Http1.1支持,1.0不支持
- 使用普通模式:每个请求/应答,客户端和服务器都要新建一个连接,完成之后立即断开连接
使用Keep-alive模式:keep-alive功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,keep-alive功能避免了建立或重新建立连接
什么是管线化:
keep-alive情况下,把多个请求打包(原理)一次发送,服务器再把对应的响应打包返回
- 只有get/head请求可以进行管线化,post有限制
- 初次创建连接,不应启动管线机制,因为服务器不一定支持http1.1版本的协议
- 管线化不会影响响应的顺序
- 现代浏览器默认并未开启管线化支持