HTTP协议的主要特点

简单 快速灵活 无连接 无状态

HTTP方法

get: 获取资源
post: 传递资源
put: 更新资源
delete: 删除资源
head: 获得报文头部

POST 和 GET 的区别

1、get在浏览器回退时是无害的,而post会再次提交请求
2、get产生的url可以被浏览器收藏,而post不可以
3、get请求会被浏览器自动缓存,而post不会,除非手动设置
4、get请求只能进行url编码,而Post支持多种编码方式
5、get请求参数会完整的保留在浏览器历史记录里,而post的参数不会保留
6、get请求URL中传递的参数有长度限制,一般为2kb,每个浏览器不一样,而post没有限制
7、get因为参数暴露在url上,所以不能传递敏感信息
8、get通过url传递参数,而post通过request body传递参数

HTTP状态码

200 ok: 客户端请求成功
206 Partial Content: 浏览器发送了一个带有Range头的get请求,例如video, audio等

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: 请求未完成,服务器临时宕机,一段时间后可能恢复

什么是持久化链接

HTTP请求采用“请求-应答”模式,当使用普通模式,即非Keep-Alive模式时,每个请求/应答,客户端与服务器都要新建一个连接,完成之后立刻断开:

HTTP协议为无状态协议

当使用Keep-Alive模式(持久连接)时,客户端与服务器建立的连接持续有效,当有后续的请求时,Keep-Alive避免了重新建立连接。

Keep-Alive在http1.1版本开始支持

什么是管线化

当时启用Keep-Alive的情况下,连接的请求类似如下:

请求1 -> 响应1 -> 请求2 -> 响应2 -> 请求3 -> 响应3

使用了管线化后,变成了:

请求1 -> 请求2 -> 请求3 -> 响应1 -> 响应2 -> 响应3

管线化技术通过持久化链接完成,仅http1.1支持此技术。

只有GET和HEAD支持管线化,而POST有所限制。