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协议安全。