HTTP相关

文章目录


以下是本篇文章正文内容

一、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域名的工作过程

  1. 首先会搜索浏览器自身的DNS缓存
  2. 如果浏览器自身的缓存里面没有找到,那么浏览器会搜索系统自身的DNS缓存
  3. 如果还没有找到,那么尝试从 hosts文件里面去找
  4. 在前面三个过程都没获取到的情况下,浏览器就会发起一个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 方式。

  1. GET方法用于信息获取,它携带的数据应该是安全的(安全:指非修改信息,如数据库方面的信息),而POST方法是用于修改服务器上资源的请求。
  2. GET请求的数据会附在URL之后,而POST方法提交的数据则放置在HTTP报文实体的主体里
  3. GET 请求,没有请求体。POST 请求,如果 form 表单提交的方式为 post,则表单项的数据以请求体的形式发送给服务器,没有大小限制。
  4. GET请求会被浏览器主动缓存,而POST不会

四、常见状态码

1xx 信息响应

  • 100 Continue: 请求已接收,客户端应继续发送请求。
  • 101 Switching Protocols: 服务器同意切换协议。

2xx 成功响应

3xx 重定向

4xx 客户端错误

5xx 服务端错误

五、HTTPs

HTTP存在问题:

  1. 机密性问题:通信使用了明文,第三方可以拦截并获悉通信内容;
  2. 完整性问题:未验证报文的完整性,第三方可以篡改通信内容;
  3. 认证问题:未验证对方的身份,第三方可以冒充他人身份参与通信。

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

  1. 最最重要的区别就是安全性,HTTP 明文传输,不对数据进行加密安全性较差。HTTPS (HTTP + SSL / TLS)的数据传输过程是加密的,安全性较好。
  2. 使用 HTTPS 协议需要申请 CA 证书,一般免费证书较少,因而需要一定费用。证书颁发机构如:Symantec、Comodo、DigiCert 和 GlobalSign 等。
  3. HTTP 页面响应速度比 HTTPS 快,这个很好理解,由于加了一层安全层,建立连接的过程更复杂,也要交换更多的数据,难免影响速度。
  4. 由于 HTTPS 是建构在 SSL / TLS 之上的 HTTP 协议,所以,要比 HTTP 更耗费服务器资源
  5. 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持久化和管线化?

  1. HTTP持久化是针对HTTP无连接的特点进行改进的,使用的是keep-live首部字段保持长连接。keep-alive来告诉对方这个请求响应完成后不要关闭,下一次咱们还用这个请求继续交流。协议规定HTTP/1.0如果想要保持长连接,需要在请求头中加上Connection: keep-alive。
  2. HTTP管线化是针对HTTP每次只能是请求一次回答一次的模式进行改进,使得可以连续发送多次请求。

3、SSL有几次握手?具体过程是怎样的?

这个问题和HTTPS的实现原理可以看做是一样的,但是比较有针对性,以下是回答:
SSL有4次握手,握手过程为:

  1. 客户端请求SSL连接
  2. 服务端发送包含公钥的证书
  3. 客户端使用公钥加密对称秘钥并发送给服务端
  4. 服务端使用私钥解密对称秘钥

4、什么是无状态协议,HTTP 是无状态协议吗,怎么解决

无状态协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息。

状态协议解决办法:通过1、Cookie 2、通过Session会话保存。

相关推荐
网安小白的进阶之路3 小时前
A模块 系统与网络安全 第四门课 弹性交换网络-3
网络·安全·web安全
源文雨4 小时前
MacOS 下 Warp ping 局域网设备报错 ping: sendto: No route to host 的解决方法
运维·网络协议·安全·macos·网络安全·ping
清静诗意5 小时前
FRP v0.65.0 内网穿透专业指南(SSH + HTTP/HTTPS 一体化配置)
http·https·ssh·frp
艾菜籽5 小时前
网络原理-HTTP补充2
网络·网络协议·http
fxshy5 小时前
解决 Web 应用加载地图资源时的 HTTP 与 HTTPS 混合内容问题
前端·网络协议·http
周某人姓周5 小时前
安全初级(二)HTTP
网络协议·安全·http
李贺梖梖6 小时前
Tomcat&Http协议
java·http·tomcat
Nimsolax6 小时前
Linux网络应用层自定义协议与序列化
linux·网络
liulilittle10 小时前
macOS 内核路由表操作:直接 API 编程指南
网络·c++·macos·策略模式·路由·route·通信