HTTP协议的主要特点
- 简单快速 每个资源的URI都是独一无二的,客户向服务器请求服务时,只需传送请求方法和路径
URI:统一资源标识符,包括URl:统一资源定位符和URN:统一资源名称
- 灵活 通过一个http协议就能传输不同类型数据
- 无连接 每次连接服务器处理完客户的请求,并收到客户的应答后,即断开连接
- 无状态 连接之间没有记忆能力
HTTP报文组成部分
-
请求报文
- 请求行
Request Method,Request URI,Request Version - 请求头 包含若干属性,key:value值,服务端以此获取客户端信息
- 空行 ···请求头结束必须有空行···
- 请求体
- 请求行
-
响应报文
- 状态行
Request Version,Status Code及其描述 - 响应头 包含若干属性,key:value值,服务端以此获取客户端信息
- 空行 ···响应头结束必须有空行···
- 响应体
- 状态行
cookie就存在请求头和响应头中
HTTP的响应状态码由5段组成:
1xx 请求收到,2xx 处理成功,3xx 重定向,4xx 处理发生错误,责任在客户端,5xx 处理发生错误,责任在服务端常见code
200 OK,206 Partial Content完成了带Range的GET请求,301 Moved Permanently重定向,302 Found临时重定向,304 Not Modified继续使用本地的缓存资源,400 Bad Request请求语法错误,401 Unauthorized请求未经授权,403 Forbidden禁止访问,404 Not Found,500 Internal Server Error,503 Server Unavailable请求未完成,服务器临时过载
HTTP方法
GET-->获取资源
POST-->传输资源
post和get的区别
- GET在浏览器回退时无动作,POST会再次提交
- GET产生的URL地址可以被收藏
- GET请求会被浏览器主动缓存,POST除非手动设置
- GET只能url编码,POST支持多种编码方式
- GET参数会被完整保留在浏览器历史记录中
- GET在URL中传参的长度是有限的(IE最小,2083)
- GET只接受ASCII字符
- GET通过URl传递,参数直接暴露在URl上,不安全不能用来传输敏感信息
- POST放在request-body中,较安全
PUT-->更新资源
DELETE-->删除资源
HEAD-->获得报文头部
持久连接keep-Alive
http1.1支持
-
http协议采用“请求-应答”模式,普通模式下,每个请求/应答客户端和服务器都要新建连接,完成后又断开。
-
使用
Keep-Alive模式(持久连接,连接重用),使连接持续有效,避免后续请求时新建连接。 -
管线化 【req1-->res1-->req2-->res-->req3-->res3】 ==> 【req1,2,3-->res1,2,3】
- 原理:请求/响应 打包处理
- 只能通过持久连接完成
- 只有GET和HEAD可以管线化,POST有限制
- 初次连接不会启动,由于服务器不一定支持HTTP1.1
- 管线机制下的响应顺序不变
- HTTP1.1要求服务端支持管线化,对于管线化的请求不失败,但不要求响应也必须管线化
- 现在浏览器默认未开启管线化支持
*TCP协议,三次握手,SYN(同步序列编号)
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
*HTTPS和HTTP的区别主要如下:
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。