- HTTP协议简介
- HTTP五⼤特点
- HTTP之URL
- URL和URI的区别
- HTTP之请求
-
- HTTP请求状态⾏
-
- HTTP请求头
-
- HTTP请求正⽂
- HTTP响应
-
- HTTP响应状态⾏
-
- HTTP响应状态码
-
- HTTP响应状态码说明
-
- HTTP响应报⽂
- HTTP和HTTPS
-
- HTTP的不⾜
-
- HTTPS介绍
-
- HTTPS的不⾜
- http1.0、http1.1和http2.0的特性及区别
-
- http1.0特性
-
- http1.1特性
-
- http2.0特性
-
- 区别
- ⾯试题
-
- 第⼀问:浏览器输⼊url,整个过程发⽣了什么?
-
- 第⼆问:既然说了到浏览器渲染,讲⼀下浏览器渲染⽹⻚的原理和过程
HTTP协议简介
HTTP协议是Hyper Text Transfer Protocol(超⽂本传输协议)的缩写,是⽤ 于从万维⽹(WWW:World Wide Web )服务器传输超⽂本到本地浏览器的传送 协议。 HTTP是⼀个基于TCP/IP通信协议来传递数据(HTML ⽂件, 图⽚⽂件, 查询结 果等)。 HTTP是⼀个属于应⽤层的⾯向对象的协议,由于其简捷、快速的⽅式,适⽤于分 布式超媒体信息系统。它于1990年提出,经过⼏年的使⽤与发展,得到不断地完 善和扩展。⽬前在WWW中使⽤的是HTTP/1.0的第六版,HTTP/1.1的规范化⼯作 正在进⾏之中,⽽且HTTP-NG(Next Generation of HTTP)的建议已经提出。 HTTP协议⼯作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向 HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客 户端发送响应信息。
HTTP五大特点
- ⽀持客户/服务器模式。
- 简单快速:客户向服务器请求服务时,只需传送请求⽅法和路径。请求⽅法常⽤的有GET 、HEAD 、POST 。每种⽅法规定了客户与服务器联系的类型不同。由于HTTP 协议简单,使得HTTP 服务器的程序规模⼩,因⽽通信速度很快。
- 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type 加以标记。
- ⽆连接:⽆连接的含义是限制每次连接只处理⼀个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采⽤这种⽅式可以节省传输时间。早期这么做的原因是请求资源少,追求快。后来通过Connection: Keep-Alive 实现⻓连接
- ⽆状态: HTTP 协议是⽆状态协议。⽆状态是指协议对于事务处理没有记忆能⼒。缺少状态意味着如果后续处理需要前⾯的信息,则它必须重传,这样可能导致每次连接传送的数据量增⼤。另⼀⽅⾯,在服务器不需要先前信息时它的应答就较快.HTTP之URLHTTP使⽤统⼀资源标识符(Uniform Resource Identifiers, URI)来传输数据和建⽴连接。URL是⼀种特殊类型的URI,包含了⽤于查找某个资源的⾜够的信息URL,全称UniformResourceLocator, 中⽂叫统⼀资源定位符,是互联⽹上⽤来标识某⼀处资源的地址。 以下⾯这个URL为例,介绍下普通URL的各部分组成
- www.xxx.com:8080/news/1.html… 从上⾯的URL可以看出,⼀个完整的URL包括以下⼏部分:
- 协议部分:该URL的协议部分为“http:”,这代表⽹⻚使⽤的是HTTP协议。在Internet中可以使⽤多种协议,如HTTP,FTP等等本例中使⽤的是HTTP协议。在"HTTP"后⾯的“//”为分隔符
- 域名部分:该URL的域名部分为“www.aspxfans.com~”。 ⼀个URL中,也可以使⽤IP地址作为域名使⽤
- 端⼝部分:跟在域名后⾯的是端⼝,域名和端⼝之间使⽤“:”作为分隔符。端⼝不是⼀个URL必须的部分,如果省略端⼝部分,将采⽤默认端⼝
- 虚拟⽬录部分:从域名后的第⼀个“/”开始到最后⼀个“/”为⽌,是虚拟⽬录部分。虚拟⽬录也不是⼀个URL必须的部分。本例中的虚拟⽬录是“/news/”
- ⽂件名部分:从域名后的最后⼀个“/”开始到“?”为⽌,是⽂件名部分,如果没有“?”,则是从域名后的最后⼀个“/”开始到“#”为⽌,是⽂件部分,如果没有“?”和“#”那么从域名后的最后⼀个“/”开始到结束,都是⽂件名部分。本例中的⽂件名是“index.asp”。⽂件名部分也不是⼀个URL必须的部分,如果省略该部分,则使⽤默认的⽂件名
- 锚部分:从“#”开始到最后,都是锚部分。本例中的锚部分是“name”。锚部分也不是⼀个URL必须的部分
- 参数部分:从“?”开始到“#”为⽌之间的部分为参数部分,⼜称搜索部分、查询部分。本例中的参数部分为“boardID=5&ID=24618&page=1”。参数可以允许有多个参数,参数与参数之间⽤“&”作为分隔符
URL和URI的区别
URI,是uniform resource identifier,统⼀资源标识符,⽤来唯⼀的标识 ⼀个资源。 Web上可⽤的每种资源如HTML⽂档、图像、视频⽚段、程序等都是⼀个来URI来 定位的
URI⼀般由三部组成:
- 访问资源的命名机制
- 存放资源的主机名
- 资源⾃身的名称,由路径表示,着重强调于资源。 URL是uniform resource locator,统⼀资源定位器,它是⼀种具体的URI, 即URL可以⽤来标识⼀个资源,⽽且还指明了如何locate这个资源。
URL是Internet上⽤来描述信息资源的字符串,主要⽤在各种WWW客户程序和服 务器程序上,特别是著名的Mosaic。
采⽤URL可以⽤⼀种统⼀的格式来描述各种信息资源,包括⽂件、服务器的地址 和⽬录等。URL⼀般由三部组成:
- 协议(或称为服务⽅式)
- 存有该资源的主机IP地址(有时也包括端⼝号)
- 主机资源的具体地址。如⽬录和⽂件名等 URN,uniform resource name,统⼀资源命名,是通过名字来标识资源,⽐ 如mailto:java-net@java.mjj.com 。
URI是以⼀种抽象的,⾼层次概念定义统⼀资源标识,⽽URL和URN则是具体的资 源标识的⽅式。URL和URN都是⼀种URI。笼统地说,每个 URL 都是 URI,但不 ⼀定每个 URI 都是 URL。这是因为 URI 还包括⼀个⼦类,即统⼀资源名称 (URN),它命名资源但不指定如何定位资源。上⾯的 mailto、news 和 isbn URI 都是 URN 的示例。
在Java的URI中,⼀个URI实例可以代表绝对的,也可以是相对的,只要它符合 URI的语法规则。⽽URL类则不仅符合语义,还包含了定位该资源的信息,因此 它不能是相对的。
在Java类库中,URI类不包含任何访问资源的⽅法,它唯⼀的作⽤就是解析。 相反的是,URL类可以打开⼀个到达资源的流。
HTTP之请求
由上图可以看到,http请求由请求⾏,消息报头,请求正⽂三部分构成。
HTTP请求状态⾏
请求⾏由请求Method , URL 字段和HTTP Version 三部分构成, 总的来说请求⾏ 就是定义了本次请求的请求⽅式, 请求的地址, 以及所遵循的HTTP协议版本例 如:
HTTP协议的⽅法有: GET : 请求获取Request-URI所标识的资源
POST : 在Request-URI所标识的资源后增加新的数据
HEAD : 请求获取由Request-URI所标识的资源的响应消息报头
PUT : 请求服务器存储或修改⼀个资源,并⽤Request-URI作为其标识
DELETE : 请求服务器删除Request-URI所标识的资源
TRACE : 请求服务器回送收到的请求信息,主要⽤于测试或诊断
CONNECT : 保留将来使⽤
OPTIONS : 请求查询服务器的性能,或者查询与资源相关的选项和需求
HTTP请求头
消息报头由⼀系列的键值对组成,允许客户端向服务器端发送⼀些附加信息或者 客户端⾃身的信息,主要包括:
| Header | 解释 | 示例 |
|---|---|---|
| Accept | 指定客户端能够接收的内容类型 | Accept: text/plain,text/html |
| Accept-Charset | 浏览器可以接受的字符编码集 | Accept-Charset: iso-8859-5,utf-8 |
| Accept-Encoding | 指定浏览器可以⽀持的web服务器返回内容压缩编码类型 | Accept-Encoding:compress, gzip |
| Accept-Language | 浏览器可接受的语⾔ | Accept-Language: en,zh |
| Accept-Ranges | 可以请求⽹⻚实体的⼀个或者多个⼦范围字段 | Accept-Ranges:bytes |
| Authorization | HTTP授权的授权证书类型 | Authorization: BasicQWxhZGRpbjpvcGVuIHNlc2FtZQ== |
| Cache-Control | 指定请求和响应遵循的缓存机制 | Cache-Control: nocache |
| Connection | 表示是否需要持久连接(HTTP 1.1默认进⾏持久连接) | Connection: close |
| Cookie | HTTP请求发送时,会把保存在该请求域名下的所有cookie值⼀起发送给web服务器 | Cookie: $Version=1;Skin=new; |
| Content-Length | 请求的内容⻓度 | Content-Length: 348 |
| Content-Type | 请求的与实体对应的MIME信息 | Content-Type:application/x-wwwform-urlencoded |
| Date | 请求发送的⽇期和时间 | Date: Tue, 15 Nov 201008:12:31 GMT |
| Expect | 请求的特定的服务器⾏为 | Expect: 100-continue |
| From | 发出请求的⽤户的Email | From: user@email.com |
| Host | 指定请求的服务器的域名和端⼝号 | Host: www.zcmhi.com |
| If-Match | 只有请求内容与实体相匹配才有效 | If-Match:“737060cd8c284d8af7ad3082f209582d” |
| If-Modified-Since | 如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回304代码 | If-Modified-Since:Sat, 29 Oct 201019:43:31 GMT |
| If-None-Match | 如果内容未改变返回304代码,参数为服务器先前发送的Etag,与服务器回应的Etag⽐较判断是否改变 | If-None-Match:“737060cd8c284d8af7ad3082f209582d” |
| If-Range | 如果实体未改变,服务器发送客户端丢失的部分,否则发送整个实体。参数也为Etag | If-Range:“737060cd8c284d8af7ad3082f209582d” |
| If-Unmodified-Since | 只在实体在指定时间之后未被修改才请求成功 | IfUnmodified-Since:Sat, 29 Oct 201019:43:31 GMT |
| Max-Forwards | 限制信息通过代理和⽹关传送的时间 | Max-Forwards: 10 |
| Pragma | ⽤来包含实现特定的指令 | Pragma: no-cache |
| Proxy-Authorization | 连接到代理的授权证书 | Proxy-Authorization:BasicQWxhZGRpbjpvcGVuIHNlc2FtZQ== |
| Range | 只请求实体的⼀部分,指定范围 | Range: bytes=500-999 |
| Referer | 先前⽹⻚的地址,当前请求⽹⻚紧随其后,即来路 | Referer:www.zcmhi.com/archives/71… |
| TE | 客户端愿意接受的传输编码,并通知服务器接受接受尾加头信息 | TE:trailers,deflate;q=0.5 |
| Upgrade | 向服务器指定某种传输协议以便服务器进⾏转换(如果⽀持) | Upgrade: HTTP/2.0,SHTTP/1.3, IRC/6.9,RTA/x11 |
| User-Agent | User-Agent的内容包含发出请求的⽤户信息 | User-Agent:Mozilla/5.0(Linux;X11) |
| Via | 通知中间⽹关或代理服务器地址,通信协议 | Via: 1.0 fred, 1.1nowhere.com(Apache/1.1) |
| Warning | 关于消息实体的警告信息 | Warn: 199Miscellaneous warning |
HTTP请求正⽂
只有在发送POST 请求时才会有请求正⽂, GET ⽅法并没有请求正⽂。
HTTP响应
与HTTP请求类似,先上⼀张图: HTTP响应也由三部分组成,包括状态⾏,消息报头,响应正⽂。
HTTP响应状态⾏
状态⾏也由三部分组成,包括HTTP协议的版本,状态码,以及对状态码的⽂本描 述。例如:
HTTP响应状态码
状态代码有三位数字组成,第⼀个数字定义了响应的类别,且有五种可能取值:
- 1xx :指示信息 - 表示请求已接收,继续处理
- 2xx :成功 - 表示请求已被成功接收、理解、接受
- 3xx :重定向 - 要完成请求必须进⾏更进⼀步的操作
- 4xx :客户端错误 - 请求有语法错误或请求⽆法实现
- 5xx :服务器端错误 - 服务器未能实现合法的请求 常⻅状态代码、状态描述、说明:
- 200 : OK - 客户端请求成功
- 400 : Bad Request - 客户端请求有语法错误,不能被服务器所理解
- 401 : Unauthorized - 请求未经授权,这个状态代码必须和WWW-Authenticate报头域⼀起使⽤
- 403 : Forbidden - 服务器收到请求,但是拒绝提供服务
- 404 : Not Found - 请求资源不存在,eg:输⼊了错误的URL
- 500 : Internal Server Error - 服务器发⽣不可预期的错误
- 503 : Server Unavailable - 服务器当前不能处理客户端的请求,⼀段时间后,可能恢复正常
HTTP响应状态码说明
| StatusCode | StatusCode语义 | 中⽂描述 |
|---|---|---|
| 100 | Continue | 继续。客户端应继续其请求 |
| 101 | SwitchingProtocols | 切换协议。服务器根据客户端的请求切换协议。只能切换到更⾼级的协议,例如,切换到HTTP的新版本协议 |
| 200 | OK | 请求成功。⼀般⽤于GET与POST请求 |
| 201 | Created | 已创建。成功请求并创建了新的资源 |
| 202 | Accepted | 已接受。已经接受请求,但未处理完成 |
| 203 | Non-AuthoritativeInformation | ⾮授权信息。请求成功。但返回的meta信息在原始的服务器,⽽是⼀个副本 |
| 204 | No Content | ⽆内容。服务器成功处理,但未返回内容。在未更新⽹⻚的情况下,可确保浏览器继续显示当前⽂档 |
| 205 | ResetContent | 重置内容。服务器处理成功,⽤户终端(例如:浏览器)应重置⽂档视图。可通过此返回码清除浏览器的表单域 |
| 206 | PartialContent | 部分内容。服务器成功处理了部分GET请求 |
| 403 | Forbidden | 服务器收到请求,但是拒绝提供服务 |
| 404 | Not Found | 请求资源不存在,eg:输⼊了错误的URL |
| 500 | Internal Server Error | 服务器发⽣不可预期的错误 |
| 503 | Server Unavailable | 服务器当前不能处理客户端的请求,⼀段时间后,可能恢复正常 |
| 300 | MultipleChoices | 多种选择。请求的资源可包括多个位置,相应可返回⼀个资源特征与地址的列表⽤于⽤户终端(例如:浏览器)选择 |
| 301 | MovedPermanently | 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会⾃动定向到新URI。今后任何新的请求都应使⽤新的URI代替 |
| 302 | Found | 临时移动。与301类似。但资源只是临时被移动。客户端应继续使⽤原有URI |
| 303 | See Other | 查看其它地址。与301类似。使⽤GET和POST请求查看 |
| 304 | NotModified | 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供⼀个头信息指出客户端希望只返回在指定⽇期之后修改的资源 |
| 305 | Use Proxy | 使⽤代理。所请求的资源必须通过代理访问 |
| 306 | Unused | 已经被废弃的HTTP状态码 |
| 307 | TemporaryRedirect | 临时重定向。与302类似。使⽤GET请求重定向 |
| 400 | BadRequest | 客户端请求的语法错误,服务器⽆法理解 |
| 401 | Unauthorized | 请求要求⽤户的身份认证 |
| 402 | PaymentRequired | 保留,将来使⽤ |
| 403 | Forbidden | 服务器理解请求客户端的请求,但是拒绝执⾏此请求 |
| 404 | Not Found | 服务器⽆法根据客户端的请求找到资源(⽹⻚)。通过此代码,⽹站设计⼈员可设置"您所请求的资源⽆法找到"的个性⻚⾯ |
| 405 | Method Not Allowed | 客户端请求中的⽅法被禁⽌ |
| 406 | NotAcceptable | 服务器⽆法根据客户端请求的内容特性完成请求 |
| 407 | ProxyAuthenticationRequired | 请求要求代理的身份认证,与401类似,但请求者应当使⽤代理进⾏授权 |
| 408 | RequestTime-out | 服务器等待客户端发送的请求时间过⻓,超时 |
| 409 | Conflict | 服务器完成客户端的PUT请求是可能返回此代码,服务器处理请求时发⽣了冲突 |
| 410 | Gone | 客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使⽤410代码,⽹站设计⼈员可通过301代码指定资源的新位置 |
| 411 | LengthRequired | 服务器⽆法处理客户端发送的不带Content-Length的请求信息 |
| 412 | Precondition Failed | 客户端请求信息的先决条件错误 |
| 413 | RequestEntity TooLarge | 由于请求的实体过⼤,服务器⽆法处理,因此拒绝请求。为防⽌客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时⽆法处理,则会包含⼀个Retry-After的响应信息 |
| 414 | Request-URI TooLarg | 请求的URI过⻓(URI通常为⽹址),服务器⽆法处理 |
| 415 | Unsupported MediaType | 服务器⽆法处理请求附带的媒体格式 |
| 416 | Requestedrange notsatisfiable | 客户端请求的范围⽆效 |
| 417 | Expectation Failed | 服务器⽆法满⾜Expect的请求头信息 |
| 500 | InternalServerError | 服务器内部错误,⽆法完成请求 |
| 501 | NotImplemented | 服务器不⽀持请求的功能,⽆法完成请求 |
| 502 | BadGateway | 充当⽹关或代理的服务器,从远端服务器接收到了⼀个⽆效的请求 |
| 503 | ServiceUnavailable | 由于超载或系统维护,服务器暂时的⽆法处理客户端的请求。延时的⻓度可包含在服务器的Retry-After头信息中 |
| 504 | GatewayTime-out | 充当⽹关或代理的服务器,未及时从远端服务器获取请求 |
| 505 | HTTPVersionnotsupported | 服务器不⽀持请求的HTTP协议的版本,⽆法完成处理 |
HTTP响应报⽂
HTTP和HTTPS
HTTP的不⾜
- 通信使⽤明⽂(不加密),内容可能会被窃听
- 不验证通信⽅的身份,因此有可能遭遇伪装
- ⽆法证明报⽂的完整性,所以有可能已遭篡改
HTTPS介绍
HTTP 协议中没有加密机制,但可以通 过和 SSL (Secure Socket Layer, 安全套接层 )或 TLS (Transport Layer Security, 安全层传输协议)的组合使⽤,加密 HTTP 的通信内容。属于通信加密,即在整个通信线路中加密。
HTTPS 采⽤共享密钥加密(对称)和公开密钥加密(⾮对称)两者并⽤的混合加密机制。若密钥能够实现安全交换,那么有可能会考虑仅使⽤公开密钥加密来通信。但是公开密钥加密与共享密钥加密相⽐,其处理速度要慢。
所以应充分利⽤两者各⾃的优势, 将多种⽅法组合起来⽤于通信。 在交换密钥阶段使⽤公开密钥加密⽅式,之后的建⽴通信交换报⽂阶段 则使⽤共享密钥加密⽅式。HTTP + 加密 + 认证 + 完整性保护 =HTTPS(HTTP Secure )
HTTPS 握⼿过程的简单描述如下:
-
浏览器将⾃⼰⽀持的⼀套加密规则发送给⽹站。
-
⽹站从中选出⼀组加密算法与HASH算法,并将⾃⼰的身份信息以证书的形式发回给浏览器。证书⾥⾯包含了⽹站地址,加密公钥,以及证书的颁发机构等信息。
-
获得⽹站证书之后浏览器要做以下⼯作:
-
- (a). 验证证书的合法性(颁发证书的机构是否合法,证书中包含的⽹站地址是否与正在访问的地址⼀致等),如果证书受信任,则浏览器栏⾥⾯会显示⼀个⼩锁头,否则会给出证书不受信的提示。
-
- (b). 如果证书受信任,或者是⽤户接受了不受信的证书,浏览器会⽣成⼀串随机数的密码(接下来通信的密钥),并⽤证书中提供的公钥加密(共享密钥加密)。
-
- (c) 使⽤约定好的HASH计算握⼿消息,并使⽤⽣成的随机数对消息进⾏加密,最后将之前⽣成的所有信息发送给⽹站。
- ⽹站接收浏览器发来的数据之后要做以下的操作:
-
- (a). 使⽤⾃⼰的私钥将信息解密取出密码,使⽤密码解密浏览器发来的握⼿消息,并验证HASH是否与浏览器发来的⼀致。
-
- (b). 使⽤密码加密⼀段握⼿消息,发送给浏览器。
- (b). 使⽤密码加密⼀段握⼿消息,发送给浏览器。
HTTPS的不⾜
- 加密解密过程复杂,导致访问速度慢
- 加密需要认向证机构付费
- 整个⻚⾯的请求都要使⽤HTTPS
http1.0、http1.1和http2.0的特性及区别
只要⾯试问你http相关的,这个⼀般是必备⾯试官问到的。
http1.0特性
- ⽆状态:服务器不跟踪不记录请求过的状态
- ⽆连接:浏览器每次请求都需要建⽴TCP链接
⽆状态
对于⽆状态的特性可以借助cookie/session机制来做身份认证和状态记录
⽆连接
⽆连接导致的性能有两种
-
⽆法复⽤链接 每次发送请求,都需要进⾏依次TCP链接(即三握四挥),使得⽹络的利⽤率⾮常低
-
对头阻塞 http1.0规定在前⼀个请求响应到达之后下⼀个请求才能发送,如果前⼀个 阻塞,后⾯的请求也会阻塞,这叫对头阻塞
http1.1特性
为了解决http1.0的性能缺陷,http1.1出现了解决⽅法:
- ⻓连接:新增Connction字段,可以设置keep-alive值保持连接不断开
- 管道化:基于上⾯⻓连接的基础,管道化可以不等第⼀个请求响应继-续发送后⾯的请求,但响应的顺序还是按照请求的顺序返回。也就是说,可以发送多个请求了,但响应还是依次处理的。
- 缓存处理:新增字段cache-control
- 断点传输
⻓连接
http1.1默认保持⻓连接,数据传输完成保持tcp链接不断开,继续⽤这个通道 传输数据
管道化
基于⻓连接的基础:
tcp没有断开,⽤的同⼀个通道
管道化的请求响应:
即使服务器先准备响应2,也是按照请求顺序先返回响应1
虽然管道话,可以⼀次发送多个请求,但是响应仍是顺序返回,仍然⽆法解决对
头阻塞的问题。
缓存处理
当浏览器请求资源时,先看是否有缓存的资源,如果有缓存,直接取,不会再发请求,如果没有缓存,则发送请求
通过设置字段cache-control来控制
断点传输
在上传/下载资源时,如果资源过⼤,将其分割为多个部分,分别上传/下载,如 果遇到⽹络故障,可以从已经上传/下载好的地⽅继续请求,不⽤从头开始,提⾼效率
在 Header ⾥两个参数实现的,客户端发请求时对应的是 Range 服务器端响 应时对应的是 Content-Range
http2.0特性
-
⼆进制分帧
-
多路复⽤: 在共享TCP链接的基础上同时发送请求和响应
-
头部压缩
-
服务器推送:服务器可以额外的向客户端推送资源,⽽⽆需客户端明确的请求
⼆进制分帧
将所有传输的信息分割为更⼩的消息和帧,并对它们采⽤⼆进制格式的编码
多路复⽤
基于⼆进制分帧,在同⼀域名下所有访问都是从同⼀个tcp连接中⾛,http消息 被分解为独⽴的帧,乱序发送,服务端根据标识符和⾸部将消息重新组装起来
区别
- http1.0 到http1.1的主要区别,就是从⽆连接到⻓连接
- http2.0对⽐1.X版本主要区别就是多路复⽤
⾯试题
第⼀问:浏览器输⼊url,整个过程发⽣了什么?
-
客户端连接到Web服务器⼀个HTTP客户端,通常是浏览器,与Web服务器的HTTP端⼝(默认为403)建⽴⼀个TCP套接字连接。例如,www.baidu.com。
-
发送HTTP请求通过TCP套接字,客户端向Web服务器发送⼀个⽂本的请求报⽂,⼀个请求报⽂由请求⾏、请求头部、空⾏和请求数据4部分组成。
-
服务器接受请求并返回HTTP响应Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。⼀个响应由状态⾏、响应头部、空⾏和响应数据4部分组成。
-
释放连接TCP连接若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持⼀段时间,在该时间内可以继续接收请求;
-
客户端浏览器解析HTML内容客户端浏览器⾸先解析状态⾏,查看表明请求是否成功的状态代码。然后解析每⼀个响应头,响应头告知以下为若⼲字节的HTML⽂档和⽂档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进⾏格式化,并在浏览器窗⼝中显示。 例如:在浏览器地址栏键⼊URL,按下回⻋之后会经历以下流程:
-
浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;
-
解析出 IP 地址后,根据该 IP 地址和默认端⼝ 403,和服务器建⽴TCP连接
-
浏览器发出读取⽂件(URL 中域名后⾯部分对应的⽂件)的HTTP 请求,该请求报⽂作为 TCP 三次握⼿的第三个报⽂的数据发送给服务器;
-
服务器对浏览器请求作出响应,并把对应的 html ⽂本发送给浏览器;
-
释放 TCP连接;
-
浏览器将该 html ⽂本并显示内容;
第⼆问:既然说了到浏览器渲染,讲⼀下浏览器渲染⽹⻚的原理和过程
原理 其实浏览器渲染原理只要明⽩关键渲染路径即可 关键渲染路径是指浏览器从最初接收请求来的HTML、CSS、JavaScript等资 源,然后解析、构建树、渲染布局、绘制、最后呈现给⽤户能看到界⾯的整个过 程 看⼀下webpkit的流程: 总结⼀下过程:
-
浏览器将获取的HTML⽂档解析成DOM树
-
处理CSS标记,构成层叠样式表模型CSSOM
-
将DOM和CSSOM合并成渲染树,代表⼀些列将被渲染的对象
-
渲染树的每个元素包含的内容都是计算过的,它被称之为layout。浏览器使⽤⼀种流式处理的⽅法,只需要⼀次绘制操作就可以布局所有的元素
-
将渲染树的各个节点绘制到屏幕上,这⼀步被称为painting
-
将内容展示(display)到⽹⻚中其实上⾯总结的内容还会被问很多,因为每个⾯试官问的问题基本都不⼀样,所以还是要多⾯试吧多准备。再说⼏个问题吧,希望看到的同学,可以⾃⾏总结: