http主要特点
- 简单快速
资源的地址是固定的
- 灵活
http协议中有个head部分,会有一个数据类型,通过一个http协议,就能完成不同数据类型的传输
- 无连接
连接一次就会断掉,不会保持连接
- 无状态
客户端和服务端是两种,客户端请求服务端,http帮助建立连接、传输数据
http报文的组成部分
请求报文
- 请求行
请求行包含:http方法、页面地址、http协议、版本
- 请求头
就是一些key/value值来告诉服务端我要哪些内容,要注意哪些类型
- 空行
遇到空行,表示下一行不再是请求头部分
- 请求体
相应报文
-
状态行
-
相应行
-
空行
-
响应体
http方法
- get
获取资源
- post
传输资源
- put
更新资源
- delete
删除资源
- head
获得报文首部
post和get的区别
-
get在浏览器回退时是无害的,而post会再次提交请求
-
get产生的url地址可以被收藏,而post不可以
-
get请求会被浏览器主动缓存,而post不会,除非手动设置
-
get请求参数会被完整保存在浏览器历史记录里,而post中的参数不会被保留
-
get请求在url中传送的参数是有长度限制的,而post没有限制
-
get比post更不安全,因为参数直接暴露在url上,所以不能用来传递敏感信息
-
get参数通过url传递,post放在request body中
http状态码
-
1xx:指示信息-表示请求已接收,继续处理
-
2xx:成功-表示请求已被成功接收
-
3xx:重定向-要完成请求必须进行更一步操作
-
4xx:客户端错误-请求有语法错误或请求无法实现
-
5xx:服务器错误-服务器未能实现合法的请求
200 ok:客户端请求成功
301 moved permanently:所请求的页面已经转移至新的url
302 fonund: 所请求的页面已临时转移至新的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才能使用
什么是管线化
在使用持久连接的情况下,某个连接上的消息的传递类似于
请求1-》响应1-》请求2-》响应2-》请求3-》响应3
管线化的状态下
某个连接上的消息变成类似这样
请求1-》请求2-》请求3-》响应1-》响应2-》响应3
-
管线化机制通过持久连接完成,仅http1.1支持此技术
-
只有get和head请求可以进行管线化,而post则有所限制
-
初次创建连接时不应启动管线机制,因为对方(服务器)不一定支持http1.1版本协议
-
管线化不会影响响应到来的顺序
-
开启管线化很可能并不会带来大幅度的性能提升,而且很多服务器端的代理程序对管线化的支持并不好,因此chrome和firefox默认未开启管线化支持