总体过程:

1、DNS解析

2、TCP连接

3、发送HTTP请求

4、服务器处理请求并返回HTTP报文

5、浏览器解析渲染页面

6、连接结束

一、DNS解析

在互联网中,每一台机计算机的唯一 标识是他的IP地址,由于IP地址难以记忆,因此便有了与其相对应的网址,便于用户搜索网站。于是,DNS解析就是将网址(即域名)解析为IP地址的过程,具体如下(盗)图:

讲解一波:

突然计算机中浏览器中有人输入了www.google.com;

1、浏览器问本地域名服务器,你有没有www.google.com的IP地址呢?(没有);

2、本地域名服务器去问根域名服务器,你有没有www.google.com的IP地址呢?;

3、根域名返回答案:我没有诶!;

4、本地域名服务器得到答案后,就再去问COM顶级域名服务器,你有没呢?;

5、顶级域名服务器也返回答案说:我也没有呢!不过你可以去找一下google.com;

6、本地域名服务器又去问了最终boss(google.com);

7.google.com说我有www.google.com的IP地址呢!于是将IP地址返回给本地域名服务器;

8、本地域名服务器终于拿到了IP地址,于是将IP地址告诉给了浏览器;

以上过程为最原始的DNS域名解析过程,可见复杂与繁琐程度,在现代用户量与请求数以百万级别计算的互联网时代,倘若每次访问都需要进行这些步骤,显然是不科学的。

于是,DNS缓存出现了。

上图可见,DNS缓存在较近距离的服务器或者浏览器中,则第二次查询的过程与时间便缩短很多。

DNS缓存,根据距离远近分别为:浏览器缓存、系统缓存、路由器缓存、IPS服务器缓存、根域名服务器缓存、顶级域名服务器缓存、主域名服务器缓存。

关于访问页面过程的优化还有一项:DNS负载均衡。

DNS负载均衡,又称DNS重定向;是一种以空间换时间的技术。

具体实现为:

倘若用户访问的IP地址不变,都在某一台服务器上,那该服务器所需要承受的性能要求便非常高。因此,作为用户,它只需要得到对应的IP地址和请求内容就可以,并不会在乎是哪台服务器提供的。

其中CDN(content  delivery network)内容分发网络,就是一门DNS重定向技术,为用户响应最近的服务器需要的IP地址和请求内容。这样将会大量提高用户访问速度。(空间交换时间)。

二、TCP连接

TCP/IP协议簇共有四层,分别对应如下:

应用层 : HTTP、FTP、DNS、SMTP等

  传输层:TCP、UDP等

  网络层:IP、ARP等

  数据链路层:802.11、WIFI等

TCP的连接与断开过程,共需要发7个包才能实现,成为“三次握手,四次挥手”,如下:

第一次握手:客户端发送带SYN标志的数据报;(SYN请求连接)

第二次握手:服务端发送回带SYN/ACK标志的数据报;(ACK确认应答,SYN请求连接)

第三次握手:客户端发送带ACK标志的数据报;(ACK确认应答)

连接成功。

第一次挥手:客户端发送带FIN标志的数据报;(FIN请求切开连接)

第二次挥手:服务端发送带ACK标志的数据报;(ACK确认应答)

第三次挥手:服务端发送带FIN标志的数据报;(FIN请求切开连接)

第四次挥手:客户端发送带ACK标志的数据报;(ACK确认应答)

三、发送HTTP请求

HTTP请求是基于TCP连接上的,也就是说只有建立起了TCP连接之后才能进行HTTP请求。

HTTP报文的总体如下图:

以上部分是一个完整的HTTP请求。

第一部分是综合体(General),第二部分是HTTP发送的请求,第三部分是HTTP的响应。(具体细节后面再述)。

关于HTTP请求和响应的组成分别为:

请求:请求行、请求头、请求体;

请求行:HTTP/1.1  304  Not modified;

请求头:Accept-Ranges:bytes;

    .........

    Content-Length:0;

请求体:发送的数据(当请求为GET时,请求体为空)

响应:响应行、响应头、响应体;

响应与请求类似,不过多阐述。

HTTP/1.1请求方法总结:

GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT;

GET请求:GET方法是默认的HTTP其你去,请求已被URI识别的资源。指定资源经服务器端解析后返回响应内容。GET请求可以再URL上明文传参,但是安全性不高,当然也可以不带参数。当用来提交表单数据时,很容易被辨认出表单数据。

POST请求:用来传输实体的主体。而GET方法一般用来获取响应的主体内容。因此作为传输方法,POST请求克服了GET请求在传输实体的一些缺点。

GET请求与POST请求的区别比较:

1)服务器端安全方面。GET请求用于信息获取,它不存在传输实体,因此对于修改方面或者数据库方面是安全的。而POST请求的实质是修改服务器上资源的请求,相对来说容易被利用进行一些流氓操作。

2)传输信息方面。GET请求将数据信息附在URL上面明文传输,而POST请求将传输的信息放在HTTP报文中,在信息安全性方面,POST请求比GET请求更好。

3)数据大小方面。GET请求传输的数据量限制一般为2KB左右,原因:GET请求通过URL传输数据,URL对于数据是没有限制的,但是不同浏览器对于URL的大小是存在限制的,所以一般来说是2KB。POST                                请求对于数据是不存在限制的,唯一可能限制的原因是服务器端处理数据的能力。

HEAD请求:与GET请求类似,不过不返回报文的主体信息。

      具体作用:判断类型;查看状态码;判断资源是否修改;检查超链接的有效性;

PUT请求:修改服务器端指定资源,一般用户上传文件,但由于该方法在HTTP/1.1自身不带验证机制,所以无法保证安全性,因此一般不使用。

DELETE请求:与PUT请求相反,请求修改服务器上的指定资源;

OPTIONS请求:获取服务器端支持的HTTP请求方法;用途:获取HTTP请求方法(黑客常用);检查服务器性能(未深入);

TRACE请求和CONNECT请求(暂时不了解过多);

HTTP状态码:

1XX:提示信息类,表示请求被成功接收,继续处理;

2XX:请求成功类,表示请求被成功接收,理解,接受;

3XX:重定向类,要完成请求必须进行更进一步的处理;

4XX:客户端错误类,请求有语法错误或请求无法处理;

5XX:服务端错误类,服务器未能实现合法的请求;

常见状态码:

200:请求被成功完成,资源已返回到客户端。

301:重定向,客户请求的文档在其他地方,表示永久性转移。

302:重定向,客户请求的文档在其他地方,表示暂时性转移。

304:自从上次请求后,请求的网页从未修改过。即浏览器获取缓存即可(详细见前端缓存篇)

400:请求出现语法错误。

401:客户试图未经授权访问受密码保护的页面。(即未授权)

403:资源不可用,禁止访问。

404:无法找到指定位置的资源。

405:请求方法对指定资源不适用。

500:常见的服务器端错误。

503:服务器暂时无法处理请求(可能维护或过载)

301和302区别:

两者都表示地址的重定向。也就是当浏览器得到服务器返回的这两种状态码,就会进行从旧地址跳转到一个新的地址,新的地址可以从响应的Location的首部得到。

区别:301表示资源被永远地在旧地址移除,搜索引擎会进行新旧地址的交换。302表示资源暂时从旧地址迁出去,过段时间会回来,搜索引擎还会保留旧地址。

一般出现重定向的情况:网站目录调整;网站地址更改;网页扩展名更改。如果没有重定向,会返回404,导致用户流量浪费。

尽量少用302重定向,易发生网址劫持。

所谓网址劫持:A网站拥有简洁友好的url,但是B网站的url非常长且混乱,如果A网站重定向到B网站,对于搜索引擎算法来说,它依旧可能将网址显示为A网站,便于用户,此时的情况就是:浏览器中是A网站的网址,但是页面内容为B网站的。此时,B网站Url就不能被抓取了,也就是发生了URL的劫持。

URI和URL的区别:

URI:统一资源标识符,表示网络资源。

URL:统一资源定位符,表示网络资源的地址,即网址。

RFC:征求修正意见书,RFC是互联网设计文档。倘若不按照RFC标准执行,可能导致无法通信的情况。(暂未深入)

HTTP:无状态协议,对请求和响应不做持久化处理。

无状态:协议对于事务处理没有记忆能力。通俗点,当浏览器发送请求给服务器,服务器响应,当浏览器再次发送请求给服务器时,服务器不会知道你是上次的浏览器,或者说,服务器不会记住浏览器。

TCP协议和UDP协议都属于TCP/IP协议簇。

TCP:面向连接,可靠的连接;UDP:非连接,尽可能交付,不可靠连接;

HTTP和HTTPs区别:

HTTP:超文本传输协议,应用层的协议。

缺点:

1、通信内容为明文,未加密,内容可能被窃听。

2、通信双方的身份未进行验证,可能出现伪装身份的情况。(例如DOS攻击)

3、接受的报文的完整性无法保证,中途可能被篡改。

鉴于HTTP的缺点,HTTPS在HTTP的基础上增加了:

1、通信加密; 2、证书认证; 3、完整性保护

SSL是如何配合HTTP进行通信加密的:

HTTPS并非一个新的协议,可以说是:HTTPS = HTTP +SSL;

由图可见,SSL协议独立于HTTP协议,也可以用于其他协议的加密。如 SMTP等。

目前,百度搜索引擎对于HTTPS的抓取还不是很支持,但是谷歌是支持的。

HTTPS会降低通信效率:

1、通信速率降低,加多了一层SSL协议的通信过程。

2、加密过程消耗资源。

3、证书开销,需要向认证机构购买证书。

最新文章

  1. cookie的基本用法案例
  2. 【CodeVS1076】排序
  3. [Linux-shell] AWK
  4. 20145320 《Java程序设计》第10周学习总结
  5. win系统下nodejs安装及环境配置
  6. 关于 Visual Studio 调试 Global 的一点总结
  7. ylbtech-Unitity-CS:Indexers
  8. 三种找回 linux root密码的方法
  9. 如何设置(修改)jetty(maven插件maven-jetty-plugi)的端口
  10. .NET c# 串口通信
  11. flex调用webservice中的datatable结果写入datagrid
  12. C++教程之lambda表达式一
  13. tomcat配置管理员-走后门
  14. Winsock网络编程笔记(2)----基于TCP的server和client
  15. [51nod1213]二维曼哈顿距离最小生成树
  16. ubuntu命令行下java工程编辑与算法(第四版)环境配置
  17. 理解Device Tree Usage
  18. 使用ansible实现轻量级的批量主机管理
  19. 酒店管理系统ER图
  20. 启动和停止SQL Server服务三种形式

热门文章

  1. 爬起点小说 day01
  2. 如何搭建一个B2B电商的跨境系统网站?
  3. 解释器模式(Interpreter)
  4. 51Nod 1084 矩阵取数问题 V2 双线程DP 滚动数组优化
  5. php面向对象(OOP)编程完全教程(转载笔记,有兴趣可以看看))
  6. android应用集成facebook登录
  7. Hibernate框架进阶(中篇)之多表关系
  8. NIO相关基础篇二
  9. 利用vmware搭建分布式集群
  10. 学习日记之工厂方法模式和Effective C++