http协议主要特点
简单快速 灵活 无连接 无状态
http报文的组成部分
请求报文:
1. 请求行 (http方法,网页地址,http协议版本)
Example Get/home/*** http1.1
2. 请求头 (是key,value值告诉服务器需要哪些内容,注意什么类型)
3. 空行(下一个不是请求头的部分了,当做请求体来解析)
4. 请求体
响应报文:
1. 状态行(example : http、1.1 200ok)
2. 响应头
3. 空行
4. 响应体
Http响应一般由三部分组成
1. 一个数字和文字组成的状态码,用来显示请求成功还是失败
2. 响应头(服务器类型,日期时间,内容类型,长度等)
3. 响应体(正文)
Http方法
| Get | 获取资源 |
|---|---|
| Post | 传输资源 |
| Put | 更新资源 |
| Delete | 删除资源 |
| Head | 获得报文首部 |
| Patch | 对资源部分内容更新,打补丁 |
什么是Restful API
1. 一种新的api设计方法(早已推广使用)
2. 传统api设计把每个url当做一个功能
3. Restful Api 设计把每个url当做唯一资源
如何设计一个资源
1. 尽量不用url传参
2. 用method表示操作类型
Post和get的区别
1. get在浏览器回退时是无害的,而post会再次提交请求
2. Get请求会被浏览器主动缓存,而post不会,除非手动设置
3. Get请求的参数会被完整的保留在浏览器历史记录里,post中的参数不会被保留
4. Get请求在url中传参,参数是有长度限制的,而post没有
5. Get比post更不安全,因为参数直接暴露在url上,不能用来传递敏感信息
6. Get参数通过url传递,post放在request body
http协议中get和post分别适用于什么场景
1. post一般用于表单提交
2. Get一般用于简单的数据查询,要求不是那么高的场景
何时使用post
1. 无法使用缓存文件(更新服务器上的文件或数据)
2. 向服务器发送大量数据(post没有数据量限制)
3. 发送包含未知字符的用户输入时,post比get更稳定可靠
什么是持久连接
Http采用“请求-应答”模式,当使用普通模式,即飞keep-alive模式时,每个请求/应答客服端和服务器都要重新建立一个连接,完成之后立刻断开
当使用keep-alive模式时(又称持久连接,连接重用),keep-alive功能使客户端到服务器端的连接持续有效,当出现服务器的后继请求时,keep-alive功能避免了建立或重新建立连接(http/1.1支持此技术)
http的keep-alive是干什么的
在早期的http1.0中,每次http请求都要创建一个连接,而创建连接的过程需要消耗资源和时间,为了减少资源的消耗,缩短响应时间,就需要重用连接,在后来的http/1.0中以及http1.1中,引用了重用连接的机制,就是在http请求头中加入connection:keep-alive来告诉对象这个请求响应完成后不要关闭,下次还用这个请求继续交流,协议规定http1.0,如果想要保持长连接,需要在请求头中加上connection:keep-alive
keep-alive的优点:
1. 较少的cpu和内存的使用(由于同时打开的连接减少来)
2. 允许请求和应答的http管线话
3. 降低拥塞控制(tcp连接减少了)
4. 减少了后续请求的延迟(无需在进行握手)
5. 报告错误无需关闭tcp连接
什么是管线化
在使用持久连接的情况下,某一个连接上的消息的传递类似于请求1---->响应1---->请求2---->响应2---->请求3---->响应3.....整个连接没有中断。管线化是一次性打包过去 请求1---->求2---->请求3---->响应1---->响应2---->响应3
管线化特点
1. 管线化机制是通过持久连接完成,仅http/1.1支持此技术
2. 只有get和head请求可以进行管线化而post是有所限制的
3. 初次建立连接时,不应启动管线化机制,因为对方服务器不一定支持http1.1版本协议
http常见的状态码
Http状态码负责表示客户端http请求的返回结果,标记服务器的处理是否正常,通知出现的错误工作等,借助状态码,用户可以知道服务端是正常处理了请求还是出现了错误
| 状态码 | 类别 | 描述 |
|---|---|---|
| 1** | Informational(信息状态码) | 接受请求正在处理 |
| 2** | Success(成功状态码) | 请求正常处理完毕 |
| 3** | Redirection(重定向状态码) | 需要附加操作已完成请求 |
| 4** | Client Error(客户端错误状态码) | 客户端错误,服务器无法处理请求 |
| 5** | Server Error(服务器错误状态码) | 服务器处理请求出错 |
常见的状态码
| 200 | Ok | 请求成功,一般用于get和post |
|---|---|---|
| 204 | No content | 无内容 服务器成功处理,但未返回内容,在未更新网页情况下,可以确保浏览器继续显示当前文档 |
| 206 | Partial content | 是对资源的某一部分请求,响应报文中包含由content-range指定范围的实体内容 |
| 301 | Moved permanently | 永久性重定向 请求的资源已被永久的移动到新的URI,返回信息会包含新的URI.浏览器会自动重定向新的uri.今后任何新的请求都应使用新的URI代替 |
| 302 | Found | 配合地址(location),临时性重定向,与301类似,但资源是指临时被移动,客户端应继续使用原有URI |
| 303 | See Other | 查看其他地址,与302类似,使用get请求查看 |
| 304 | Not Modified | 未修改,所请求的资源未修改,服务器返回此状态码时,不会返回任何资源,客户端通常会缓存访问过的资源,通过提供一个头信息,指出客户端希望只返回在指定日期之后的资源 |
| 307 | Temporany Redirect | 临时重定向,与302类似,使用get请求重定向,会按照浏览器标准,不会从post变成get |
| 400 | Bad Request | 错误的请求,客户端请求报文中存在语法错误,浏览器会像200ok一样对待该状态码 |
| 401 | Unauthorized | 请求要求用户的身份认证,通过http认证(BASIC认证 DIGEST认证)的认证信息,若之前已经进行过一次请求,则表示用户认证失败 |
| 402 | Payment Require | 保留将来使用 |
| 403 | Forbidden | 服务器理解客户端的请求,但是拒绝执行 |
| 404 | Not found | 服务器无法根据客户端的请求找到资源 |
| 500 | Internal server error | 服务器内部错误,无法完成请求,也可能是web应用存在bug或某些临时故障 |
| 501 | Not implememnted | 服务器不支持请求的功能,无法完成请求 |
| 502 | Bad gateway | 网关错误,对用户访问请求的响应超时造成的 |
| 503 | Service unavailable | 由于超载或系统维护,服务器暂时无法处理客户端的请求,延时的长度可包含在服务器的retry-after头信息中 |
同样是重定向307,303,302的区别
302是http1.0的西医状态码,在http1.1版本的时候为了细化302状态码又出来了两个303和307
303明确标识客户端应当采用get方法获取资源,他会把post请求变为get请求进行重定向,307会遵照浏览器标准,不会从post变为get
http和https的区别
http协议传播的数据都是未加密的,也就是明文的,因此使用http协议传输隐私信息非常不安全。为了保证数据加密传输于是诞生了https,简单来说,https协议是有SSL+http协议构建的可进行加密传输身份认证的网络协议。要比http协议安全。
https协议主要的作用有两个,第一建立一个信息安全通道来保证数据传输的安全,第二就是确认网站的真实性,那么https和http的区别主要有以下几个特点
1. http不需要证书而https协议需要用到ca申请证书,一般免费的证书很少
2. http下的信息是明文传输,https是有ssl+http协议构建的,可进行加密传输身份认证的网络协议,可以防止传输的内容被篡改,比http协议更安全。
3. http和https使用的是完全不同的连接方式,用的端口不一样,http是90 https是443
4. http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
Http https http2
http(超文本传输协议)是一种常用于应用层的协议,他是基于文本传输内容
Https 可以成为http安全版,主要是http下增加了SSL或TSL,在传输层对数据进行了加密
Http2(超文本传输协议第二版),对http进行了一些升级改造
1. 新的二进制格式
2. 多路复用
3. Header压缩
4. 支持server push
HTTP协议和udp区别
http协议在应用层 tcp udp协议在传输层
严格来说 应该拿tcp和udp进行比较 tcp协议
- 有连接 三次握手
- 又断开 四次挥手
- 稳定传输
- 适用于网络请求 upd协议
- 无连接无断开
- 不稳定传输,但效率高
- 适用于 视频会议,语音通话
http跨域请求时为何发送options请求
发一个options请求 看下 access-control-allow-methods支持哪些请求 options请求是跨域之前的预检查 浏览器自行发起的 无需我们干预 不影响实际功能 跨域请求
- 浏览器同源策略
- 同源策略一般限制ajax网络请求,不能跨域请求server
- 不会限制