http是什么?
超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,是一种无状态的协议,这就意味着最早期服务器对于发过来的请求是不知道其身份的(cookie)
工作原理
HTTP是基于客户/服务器模式,且面向连接的。http是怎么建立连接的?
(1)客户与服务器建立连接(三次握手);
(2)客户向服务器提出请求;
(3)服务器接受请求,并根据请求返回相应的文件作为应答;
(4)客户与服务器关闭连接(四次挥手)。
报文格式
请求报文格式:
请求行 - 通用信息头 - 请求头 - 实体头 - 报文主体
应答报文格式:
状态行 - 通用信息头 - 响应头 - 实体头 - 报文主体
响应状态码
100~199 | 请求继续 |
100 | 请求继续,前面的一部分内容服务器已经接受到了,正在等待后续内容 |
101 | 请求者已经准备切换协议,服务器表示同意 |
200~299 | 请求成功 |
200 | 请求成功 |
201 | 创建成功(新用户注册,成功添加到数据库) |
203 | 表示服务器已经成功的处理请求,但返回的信息可能来自另一源 |
205 | 服务器成功的处理了请求,但没有数据返回 |
300~399 | 重定向 |
301 | 永久重定向 |
302 | 临时重定向 |
304 | 使用的是缓存数据 |
305 | 使用代理 |
400~499 | 客户端错误 |
400 | 请求的语法,服务端不认识 |
401 | 未授权 |
403 | 服务器拒绝了你的请求 |
404 | 页面不存在 |
407 | 你的代理未授权 |
408 | 请求超时 |
410 | 你请求的数据已经被服务器永久的删除 |
500~599 | 服务器错误 |
500 | 服务器内部错误 |
503 | 服务器当前不可用(过载或者维护) |
505 | 请求的协议服务器不支持 |
http请求方式
get请求 | 用来获取数据的,只是用来查询数据,不对服务器的数据做任何的修改,新增,删除等操作 |
post请求 | 数据发送到服务器以创建或更新资源,侧重于更新数据,对应update操作,post请求的请求参数都是请求body中 |
put请求 | 数据发送到服务器以创建或更新资源,侧重于创建数据,对应insert操作 |
delete请求 | 用来删除指定的资源,它会删除URI给出的目标资源的所有当前内容 |
options请求 | 用来描述了目标资源的通信选项,返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性 |
head请求 | HEAD方法与GET方法相同,但没有响应体,仅传输状态行和标题部分。这对于恢复相应头部编写的元数据非常有用,而无需传输整个内容 |
connect请求 | CONNECT方法用来建立到给定URI标识的服务器的隧道;它通过简单的TCP / IP隧道更改请求连接,通常实使用解码的HTTP代理来进行SSL编码的通信(HTTPS) |
trace请求 | TRACE方法用于沿着目标资源的路径执行消息环回测试;它回应收到的请求,以便客户可以看到中间服务器进行了哪些(假设任何)进度或增量 |
http1和http2的区别
二进制传输
http2采用二进制传输,相较于文本传输的http1来说更加安全可靠
多路复用
http1一个连接只能提交一个请求,而http2可以同时处理无数个请求,可以降低连接的占用数量,进一步提升网络的吞吐量。
头部压缩
http2通过gzip与compress对头部进行压缩,并且在客户端与服务端各维护了一份头部索引表,只需要根据索引id就可以进行头部信息的传输,缩小了头部容量,间接提升了传输效率。
服务端推送
服务端可以主动推送资源给客户端,避免客户端花过多的时间逐个请求资源,这样可以降低整个请求的响应时间
浏览器输入url后经历的过程
1、首先,在浏览器地址栏中输入url
2、浏览器先查看浏览器缓存-系统缓存-路由器缓存,如果缓存中有,会直接在屏幕中显示页面内容。若没有,则跳到第三步操作。
3、在发送http请求前,需要域名解析(DNS解析),解析获取相应的IP地址。
4、浏览器向服务器发起tcp连接,与浏览器建立tcp三次握手。
5、握手成功后,浏览器向服务器发送http请求,请求数据包。
6、服务器处理收到的请求,将数据返回至浏览器
7、浏览器收到HTTP响应
8、读取页面内容,浏览器渲染,解析html源码
9、生成Dom树、解析css样式、js交互
10、客户端和服务器交互
11、ajax查询
https和http的区别:
1、https的端口是443,而http的端口是80,且两者的连接方式不同;
2、http传输是明文的,而https是用ssl进行加密的,https的安全性更高;
3、https是需要申请证书的,而http不需要。