HTTP协议类
一次完整的HTTP请求所经历的7个步骤
1. 域名解析
2. 发起TCP的3次握手(建立TCP连接)
3. 建立TCP连接后发起http请求(HTTP Request)
4. 服务器端响应http请求,浏览器得到html代码 (服务器端HTTP响应(HTTP Response)请求(Web服务器发送应答头信息 ))
5. 浏览器解析html代码,并请求html代码中的资源
6. 浏览器对页面进行渲染呈现给用户
7.web 服务器关闭TCP连接(如果浏览器或服务器在头部加入Connection:keep-alive ,就会保持连接状态,节约实际和带宽)
HTTP协议类:
http协议的主要特点:
简单快速 灵活 无连接 无状态
Http报文的组成部分
- 请求报文 (强求行 请求头 空行 请求体)
- 请求行包含: http方法,页面地址,http协议,以及版本
- 请求头包含: key 和value值,告诉服务端要哪些内容
- 响应报文 (状态行 响应头 空行 响应体)
- 状态行包含协议、版本 状态码 状态信息
http方法
GET(获取资源)、POST(传输资源)、PUT(更新资源)、DELETE(删除资源)、HEAD(获取报文首部)POST和GET的区别
- get比post不安全,因为get参数直接暴露在url上
- get请求url中传送的参数长度有限的,而post没有长度限制
- get产生的url可以被收藏,post不会
- get请求只能进行url编码,而post支持多种编码方式
- get的请求被完整保流在浏览器历史记录里,而post中的参数不会被保留
- get参数通过url传递, post放在Request body中
HTTP状态码
- 1 XX : 指示信息-表示请求已接收,继续处理
- 2XX: 成功-表示请求已被成功接收
- 3XX: 重定向- 要完成请求必须进行更进一步的操作
- 4XX: 客户端错误-请求有语法错误或请求无法实现
- 5XX:服务器错误-服务器未能实现合法的请求
- 200 OK: 客户端请求成功
- 206: Partial Content: 客户端发送了一个带有Range头的get请求,服务器完成了它
- 301 Moved Permanently: 所请求的页面已经转移至新的url
- 302 Found: 所请求的页面已经临时转移至新的url
- 304 Not Modified: 客户端有缓冲的文档并发出了一个条件性的请求,服务器告诉客户,原来缓冲的文档还可以继续使用
- 400 Bad Request: 客户端请求有语法错误,不能被服务器所理解
- 401 Unauthorized :请求未经授权,
- 403 Forbidden: 被请求页面的访问被禁止
- 404 Not Found: 请求资源不存在
- 500 Internal Server Error: 服务器发生错误
- 503 Server Unavailable: 服务器临时过载或当机
什么是持久连接(长连接)
http是支持持久连接的,1.1版本的支持, 当使用keep-Alive模式是可以持久连接,数据传输完成了保持TCP连接不断开(不发RST包、不四次握手),等待在同域名下继续用这个通道传输数据;
使用普通模式即非Keep-Alive模式时,每个请求/应答客户和服务器都要新建议一个连接,完成之后立即断开连接。(HTTP头部有了Keep-Alive这个值,代表客户端这次请求期望是长连接的。但是并不代表一定会使用长连接,服务器端都可以无视这个值,也就是不按标准来。这里需要后台服务器支持这个标准。)
持久连接的好处有:
1,同一个客户端可以使用这个长连接处理其他求情,避免http重新链接和断开所消耗的时间。
2,服务器可以利用这个连接 主动推送 消息到客户端(这个才是我想要的)。
什么是管线化
也可以理解为流水线。在长连接的基础上,将客户端的其他请求都交给这一个连接去处理。
在持久连接的情况下,仅http/1.1支持此技术,只有GET和HEAD请求 可以进行管线化,而POS则有所限制
这里服务器需要注意一件事情。那就是这个请求的先后顺序是不能颠倒的
某个连接上消息的传递类似于
请求1 ->响应1 -> 请求2-> 响应2-> 请求3-> 响应3
某个连接上的消息变成了类似这样
请求1 -> 请求2-> 请求3-> 响应1 ->响应2->响应3
Hello Javascript!