HTTP协议
- HTTP协议
- 协议简介
HTTP 超文本传输协议,是基于TCP/IP协议之上的应用层协议。
特点:
基于请求-响应的模式。
无状态保存:不保存之前发送过的请求或响应,为了实现保存功能引入了cookie。
无连接:服务器处理完客户的请求,并收到客户的应答后,即断开连接。HTTP1.0是直接断开,1.1就是长连接机制。
- HTTP的请求方法
- HTTP有几种请求方法?
一共有八种方法,以不同的方式操作资源:
GET:发出获取资源的请求,只用在读取数据。
POST:提交数据,创建或修改资源。
PUT:只能修改已有字段的资源。
DELETE:删除Request—URI所表示的资源。
HEAD:发出资源请求,服务器不传回资源的文本部分。
TRACE:回显服务器收到的请求,用于测试或诊断。
OPTIONS:使服务器传回该资源所支持的所有HTTP请求的方法,可在CORS跨域资源共享时测试是否有访问权限。
CONNECT:通常用于SSL加密服务器的链接,管道方式的连接
- GET与POST的区别?
数据存放位置:GET放在URL中(请求行)。POST放在请求体中。
数据限制:GET数据大小有限制(URL长度限制,IE最小为2083字节),POST没有。
安全性:GET安全性低,会被保存在历史记录中。
- PUT与POST的区别?
PUT是更新数据,因为PUT是幂等的,幂等就是如果两个请求相同,后一个请求会把第一个请求覆盖掉。而POST则不是幂等的,他是新增数据。
- 常见的HTTP请求头
Accept | 浏览器能够处理的内容类型 |
Accept-Charset | 浏览器能够显示的字符集 |
Accept-Encoding | 浏览器能够处理的压缩编码 |
Accept-Language | 浏览器当前设置的语言 |
Connection | 浏览器与服务器之间连接的类型 |
Cookie | 当前页面设置的任何Cookie |
Host | 发出请求的页面所在的域 |
Referer | 发出请求的页面的URL |
User-Agent | 浏览器的用户代理字符串 |
- 常见的HTTP响应头
Date | rfc822格式表示消息发送的时间 |
server | 服务器名称 |
Connection | 连接的类型 |
Cache-Control | 控制HTTP缓存 |
content-type | 后面的文档属于什么MIME类型 |
常见的Content-Type 属性值有以下四种:
(1)application/x-www-form-urlencoded:浏览器的原生form表单,按照key=val&的方式进行URI转码。
(2)multipart/form-data:通常表单POST上传文件时使用该方式。
(3)application/json:服务器消息主体是序列化后的JSON字符串。
(4)text/xml:主要用来提交XML格式的数据。
五、HTTP迭代
1、HTTP1.0到HTTP1.1的区别?
①引入长连接机制
1.0是一个请求响应后就马上关闭TCP连接。而1.1则基于TCP长连接机制(传输层才需要建立连接),一般几十秒内没有操作才断开连接。这样避免了频繁的三次握手和四次挥手,建立和关闭TCP连接带来的开销和时延。
②管道机制实现同时发送多个HTTP请求
1.0一个请求发送后,必须等待响应才能发送下一个请求,而1.1可以同时发送多个请求,节约等待时长。
③分块传输
1.0是content-length确定响应体长度。但数据过大或不断增大,则无法准确知道内容长度大小。1.1则采用流模式分块传输,每个数据块前指明大小,最后一个0表示结束。
④断点传输
1.1将已传输的部分写入临时文件.temp/.download,当网络断开重连,HTTP请求报文中会添加已经传输部分的长度。
2、HTTP1.1到HTTP2.0的区别?
①二进制
1.1请求体可以是不同的格式,其他是文本形式,2.0则是完全的二进制格式,即帧。
②I/O多路复用
2.0以前因为浏览器限制了同一个域名下的请求数量,页面要请求很多资源时会有队头阻塞的情况,而2.0基于二进制分帧可以同时交错的发送和请求数据,再重新组装。
③服务器推送
2.0服务端可以对一个客户端请求发出多个响应,预计需求推送额外的资源给客户端,这样可以减少请求的次数,提高页面响应速度。
④头信息压缩
1.1每次都要传输一样的请求字段(如cookie)。2.0将头信息压缩后再传输,且服务器和客户端同时维护一张头信息表,只发送索引即可。
3、页面有多张图片,HTTP是怎么加载的?
HTTP1,浏览器对同域名最大TCP连接数为6,所以会请求多次。可以多域名部署解决。
HTTP2支持多路复用,可以在一个TCP里发送多个HTTP请求,一瞬间加载很多资源。
六、HTTPS和HTTP
HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议。
HTTPS和HTTP的区别主要如下:
1、HTTPS协议需要到ca申请证书,需要一定费用。
2、HTTP信息是明文传输,HTTPS则是具有安全性的SSL加密传输协议,更安全。
3、HTTP是80端口,HTTPS是443。
七、HTTP状态码
1xx | 请求正在处理 | ||
2xx | 请求正常处理完毕 | 200 | 正常处理 |
204 | 正常处理但无需服务端返回内容 | ||
206 | 响应指定范围的实体内容 | ||
3xx | 重定向 | 301 | 永久重定向,已分配新的URI |
302 | 临时重定向,资源临时被分配了新的 URI | ||
303 | 资源存在着另一个 URI,应使用GET方法获取资源 | ||
304 | 告诉客户端可以直接使用缓存的内容 | ||
307 | 临时重定向,保持方法不变重新请求新URI | ||
4xx | 客户端错误码 | 400 | 请求报文中存在语法错误 |
401 | 需要有通过HTTP认证的认证信息 | ||
403 | 请求资源的访问被服务器拒绝了 | ||
404 | 服务器上无法找到请求的资源 | ||
405 | 服务器禁止使用该请求方法 | ||
5xx | 服务器错误状态码 | 500 | 服务器执行时发生错误 |
502 | 网关或代理服务器错误 | ||
503 | 服务器暂时超负荷或正在停机维修 | ||
504 | 超时未得到响应 |
304多好还是少好?
304优点:提高网站访问速度,对有缓存的页面直接使用缓存。
304多缺点:内容源更新频繁的页面,搜索引擎蜘蛛抓取频率更高,访问量更多。
八、WebSocket
是H5提供的一种浏览器与服务器进行全双工通信的网络技术,基于TCP连接,只需要完成一次握手后就能创建持久性的连接,且双向数据传输。即服务器和客户端都可以向对方主动推送消息。没有同源限制,协议标识符是ws/wss。
计算机网络
计算机网络模型
ISO为了更好的使网络应用更为普及,推出了OSI参考模型
ISO | TCP/IP | 作用 | 举例 |
应用层 | 应用层 | 为应用程序提供服务 | HTTP/HTTPS/FTP |
表示层 | 数据加密、编码和转换 | base64对数据编码 | |
会话层 | 建立、管理和维护会话 | 单工、半双工和全双工 | |
传输层 | 传输层 | 端到端的连接 | TCP/UDP,端口号 |
网络层 | 网络层 | IP寻址及路由选择 | IP寻址建立两个节点之间的连接 |
数据链路层 | 数据链路层 | 组帧、物理编址 | |
物理层 | 物理层 | 物理层 |
TCP的三次握手和四次挥手?
TCP三次握手:客户端向服务器发送SYN,服务端返回 SYN ACK ,客户端再发送ACK。
TCP四次挥手:客户端向服务器发送连接释放请求,服务器接收后返回ACK确定包。但因为TCP连接是双向的,如果此时服务端还有数据没发完,会继续发送数据,结束后向客户端发送连接释放请求,客户端收到后发送ACK应答。
为什么建立连接只要三次而关闭连接却要四次?
因为服务端LISTEN状态下,当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。
TCP和UDP的区别
UDP无连接,不可靠传输,可同时对多个设备通信,适用于实时应用,例如视频会议。
TCP有连接,可靠传输(流浪控制、拥塞控制),只能一对一,适用于可靠的文件传输。
DNS解析过程
首先在浏览器缓存中查找对应的IP地址,若无进行下一步。
向本地DNS服务器发送请求,若本地DNS服务器有缓存则返回,没有则下一步。
本地DNS服务器分别向根域名服务器->顶级域名服务器->权威域名服务器发送请求,获取到IP地址后保存在缓存中,同时将结果返回给浏览器。