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不需要。