HTTP相关
文章目录
- 一、HTTP
- 二、HTTP请求过程
- 2.1 域名解析
- dns域名的工作过程
- 三、HTTP常见请求
- GET方法和POST方法本质上的区别
- 四、常见状态码
- 五、HTTPs
- 六、HTTPvsHTTPs
- 七、HTTP/2
- 八、一些面试题
以下是本篇文章正文内容
一、HTTP
HTTP 的主要特点:
(1) HTTP 本身是无连接的:虽然使用 TCP 连接,但通信双方在交换 HTTP 报文前不需要建立 HTTP 连接。
(2) HTTP 是无状态的:同一个客户第二次访问同一服务器上的页面时,服务器的响应与第一次被访问时相同。
在建立 TCP 连接时,万维网客户把 HTTP 请求报文作为 TCP 连接的第三报文的数据发给万维网服务器。
请求一个万维网文档所需时间:是该文档的传输时间+两倍往返时间 RTT。
二、HTTP请求过程
域名解析------>tcp建立三次握手过程------>发送http请求------>服务器返回html------>浏览器根据html构建dom树,cssom树,加载资源------>呈现给用户
2.1 域名解析
为什么使用域名而不是IP地址?
使用域名更加方便用户记忆。并且服务端如果更换主机,ip地址发生了变化对用户没有影响。不使用域名也无法使用CDN分发网络,必须从网站拿资源,降低了网站的访问速度。
dns域名的工作过程
- 首先会搜索浏览器自身的DNS缓存
- 如果浏览器自身的缓存里面没有找到,那么浏览器会搜索系统自身的DNS缓存
- 如果还没有找到,那么尝试从 hosts文件里面去找
- 在前面三个过程都没获取到的情况下,浏览器就会发起一个DNS的系统调用,就会向本地配置的首选DNS服务器发起域名解析请求
查询本地DNS服务器来解析该名称,每条查询消息包括三个信息
1、指定的查询域名
2、指定的查询类型
3、DNS指定的查询类别
DNS域名的两种查询方式
递归查询和迭代查询。
两者的查询顺序都是一样的。
客户机本地缓存—>本地DNS服务器—>根域名服务器—>顶级域名服务器—>域名提供商
递归查询是将查询结果按照查询过程一层层返回回来,而迭代查询查询到了之后可以直接返回。
DNS域名解析的请求和响应数据报均经过UDP的53端口来发送。
DNS优化两个方面:DNS缓存、DNS负载均衡
为什么通过udp而不通过可靠的tcp?
udp只需要发送两个报文,请求包,响应包。tcp需要握手三个包,请求包,响应包,挥手四个包。一共九个包相比较之下udp的效率更高。
三、HTTP常见请求
get、post、put、delete、option、head等等
请求方式 | 作用 |
---|---|
GET | 本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据。GET请求只用来向服务器获取资源,而GET请求本身不应该携带任何呈现数据。1. 登录时GET获取服务器数据库用户名和密码进行验证。2.下载文本、图片、音视频等时获取服务器资源。 |
POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在POST请求体中。POST 请求可能会导致新的资源的建立或已有资源的修改。 |
HEAD | 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头。欲判断某个资源是否存在,我们通常使用GET,但这里用HEAD则意义更加明确。1. 向服务器获取某些易过期或丢失大型文件时,可用HEAD方式查询资源是否存在。 |
PUT | 从客户端向服务器传送的数据取代指定的文档的内容,即指定上传资源存放路径。这个方法比较少见。HTML表单也不支持这个。本质上来讲, PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST的数据存放位置由服务器自己决定。 |
DELETE | 请求服务器删除指定的资源。基本上这个也很少见,不过还是有一些地方比如amazon的S3云服务里面就用的这个方法来删除资源。 |
GET方法和POST方法本质上的区别
GET一般用来从服务器获取数据,POST一般用来向服务器发送数据。GET产生一个TCP数据包,POST产生两个TCP数据包。
对于POST请求。浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok
由于GET 方式所能够携带的数据是由限制的,其数据大小通常不能超过 4K, 不适于提交大量表单数据, 故而在表单的提交方式中首选 POST 方式。
- GET方法用于信息获取,它携带的数据应该是安全的(安全:指非修改信息,如数据库方面的信息),而POST方法是用于修改服务器上资源的请求。
- GET请求的数据会附在URL之后,而POST方法提交的数据则放置在HTTP报文实体的主体里。
- GET 请求,没有请求体。POST 请求,如果 form 表单提交的方式为 post,则表单项的数据以请求体的形式发送给服务器,没有大小限制。
- GET请求会被浏览器主动缓存,而POST不会
四、常见状态码
1xx 信息响应
- 100 Continue: 请求已接收,客户端应继续发送请求。
- 101 Switching Protocols: 服务器同意切换协议。
2xx 成功响应
3xx 重定向
4xx 客户端错误
5xx 服务端错误
五、HTTPs
HTTP存在问题:
- 机密性问题:通信使用了明文,第三方可以拦截并获悉通信内容;
- 完整性问题:未验证报文的完整性,第三方可以篡改通信内容;
- 认证问题:未验证对方的身份,第三方可以冒充他人身份参与通信。
HTTPS 被称为 HTTP Over SSL (基于SSL加密的HTTP),这里的SSL (Secure Socket Layer) 被称为安全套接层,它是一种加密协议,不仅可应用于HTTP协议、还可应用于POP3协议、SMTP协议、VPN等。
TLS (Transport Layer Security) 被称为传输层安全,TLS相对于SSL 3.0版本做了些修改和功能增强,相当于SSL的升级版本,
HTTPs的缺点:
1、在相同网络环境中,HTTPS 相比 HTTP 无论是响应时间(慢2~100倍)还是耗电量(因为需要更多的服务器资源)都有大幅度上升,会导致成本升高。
2、HTTPS需要客户端、服务端双方做加解密处理,需要消耗更多CPU和内存资源,相比HTTP通信,HTTPS又多了TLS握手,会消耗更多的网络资源,总体也导致HTTPS响应时间变慢。
3、HTTPS 的安全是有范围的,在黑客攻击、服务器劫持等情况下几乎起不到作用。
4、在现有的证书机制下,中间人攻击依然有可能发生。
六、HTTPvsHTTPs
- 最最重要的区别就是安全性,HTTP 明文传输,不对数据进行加密安全性较差。HTTPS (HTTP + SSL / TLS)的数据传输过程是加密的,安全性较好。
- 使用 HTTPS 协议需要申请 CA 证书,一般免费证书较少,因而需要一定费用。证书颁发机构如:Symantec、Comodo、DigiCert 和 GlobalSign 等。
- HTTP 页面响应速度比 HTTPS 快,这个很好理解,由于加了一层安全层,建立连接的过程更复杂,也要交换更多的数据,难免影响速度。
- 由于 HTTPS 是建构在 SSL / TLS 之上的 HTTP 协议,所以,要比 HTTP 更耗费服务器资源。
- HTTPS 和 HTTP 使用的是完全不同的连接方式,用的端口也不一样,前者是 443,后者是 80。
七、HTTP/2
多路复用:允许多个请求和响应在同一连接上并行传输,减少延迟。
头部压缩:通过压缩HTTP头字段,降低协议开销。
服务器推送:服务器可以主动向客户端推送资源,而无需客户端请求。
基于SPDY协议:HTTP/2的设计基于Google的SPDY协议,进一步优化了数据传输效率。
HTTP/2的这些特性使得网页加载速度更快,用户体验更佳。
八、一些面试题
1、cookies机制和session机制的区别:
1、cookies数据保存在客户端。session数据保存在服务端
2、cookies可以减轻服务器压力,但是不安全,容易进行cookies欺骗
3、session安全一点,但是占用服务器资源。
2、什么是HTTP持久化和管线化?
- HTTP持久化是针对HTTP无连接的特点进行改进的,使用的是keep-live首部字段保持长连接。keep-alive来告诉对方这个请求响应完成后不要关闭,下一次咱们还用这个请求继续交流。协议规定HTTP/1.0如果想要保持长连接,需要在请求头中加上Connection: keep-alive。
- HTTP管线化是针对HTTP每次只能是请求一次回答一次的模式进行改进,使得可以连续发送多次请求。
3、SSL有几次握手?具体过程是怎样的?
这个问题和HTTPS的实现原理可以看做是一样的,但是比较有针对性,以下是回答:
SSL有4次握手,握手过程为:
- 客户端请求SSL连接
- 服务端发送包含公钥的证书
- 客户端使用公钥加密对称秘钥并发送给服务端
- 服务端使用私钥解密对称秘钥
4、什么是无状态协议,HTTP 是无状态协议吗,怎么解决
无状态协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息。
状态协议解决办法:通过1、Cookie 2、通过Session会话保存。