深入Web请求

从C/S发展到B/S的好处

1.客户端使用统一的浏览器(Browser)。
2.服务端(Server)基于统一的HTTP协议,Apache、IIS、Nginx、Tomcat、JBoss,这些服务器和通用框架可以直接拿来用。

B/S的网络架构

与大多数传统C/S互联网应用程序采用的长连接的交互模式不同,HTTP协议采用无状态的短连接的通讯方式,一次请求完成一次数据交互,通常也是对应一个业务逻辑,完成之后通信连接就断开。既要满足海量用户的访问请求,又要保持用户请求的快速响应,所以网络架构越来越复杂。

不管网络怎么复杂,始终有些固定不变的原则要遵守:
  • 互联网上所有的资源都要用一个URL(统一资源定位符)来表示,它包含了整个互联网的架构精髓。
  • 必须基于HTTP协议与服务端交互。
  • 数据展示必须在浏览器中进行。

如何发起一个请求?

发起一个HTTP连接本质上就是建立一个Socket连接,那么就可以模拟浏览器发送HTTP请求,HttpClient就是一个开源的通过程序实现的处理HTTP请求的工具包。
处理JAVA中使用非常普遍的HttpClient还有很多类似的工具,如Linux中的curl命令,curl + URL就可以发起一个HTTP请求。

一个http请求的组成三要素:请求行、请求头、消息体
请求行是请求消息的第一行,由三部分组成:
请求方法(GET/POST/DELETE/PUT/HEAD)
请求资源的URI路径
HTTP的版本号

URL = 协议 + 主机名 + URI

HTTP协议解析

常见的HTTP请求头:

请求头 说明
Accept-Charset 用于指定客户端接受的字符集
Accept-Encoding 用于指定可接受的内容编码,如:Accept-Encoding:gzip.deflate
Accept-Language 用于指定一种自然语言,如:Accept-Language:zh-cn
Host 用于指定被请求资源的Internet主机和端口号,如:Host:www.taobao.com
User-Agent 客户端将它的操作系统、浏览器和其他属性告诉服务器
Connection 当前连接是否保持,如:Connection:Keep-Alive

常见的HTTP响应头:

响应头 说明
Server 使用的服务器名称,如:Server:Apache/1.3.6(Unix)
Content-Type 用来指明发送给接受者的实体正文的媒体类型,如:Content-Type:text/html;charset=GBK
Content-Encoding 与请求报头Accept-Encoding对应,告诉浏览器采用的是什么压缩编码
Content-Language 描述了资源所用的自然语言,与Accept-Language对应
Content-Length 指明实体正文的长度,用以字节方式存储的十进制数来表示
Keep-Alive 保持连接的时长,如Keep-Alive:timeout=5,max=120

常见的HTTP状态码:

状态码 说明
200 客户端请求成功
302 临时跳转,跳转的地址通过Location指定
400 客户端请求有语法错误,不能被服务器识别
403 服务器收到请求,但是拒绝提供服务
404 请求的资源不存在
500 服务器出现不可预期错误

查看HTTP信息的工具

Firefox Chrome

浏览器缓存机制

我们在浏览一个页面发现有异常的情况下,通常会考虑是不是浏览器做了缓存,一般按Ctrl+F5组合键就可以重新请求一下这个界面
1.这个组合键会直接向目标URL发送请求,而不会使用缓存数据
2.即使请求发送到服务端也可能访问到的是缓存数据,当应用服务器的前端部署了缓存服务器时,如Varnish代理,那么Varnish代理就可以直接访问缓存数据,所以为了保证用户能够看到最新的数据,必须通过HTTP协议来控制
Ctrl+F5组合键实质是在请求头增加以下信息:

Progma:no-cache
Cache-Control:no-chche   //优先级较高

DNS域名解析

将域名解析成IP地址
详细步骤如下:
当一个用户在浏览器中输入www.abc.com时,按下回车键

  • 浏览器检查缓存中有没有对应的相关域名解析过的IP地址,如果缓存有,解析过程结束。
  • 用户的浏览器缓存中没有,浏览器检查在操作系统中是否有这个域名对应的DNS解析结果。

windows:C:\Windows\System32\drivers\etc\hosts
linux:/etc/named.conf

上诉步骤都是在本机完成的,在下图没有体现

DNS域名解析.png
  • 我们在网络中的“DNS服务器地址”,操作系统会将域名发送给这里设置的LDNS,LDNS通常会提供你本地互联网接入一个DNS解析服务

windows:ipconfig
linux: cat /etc/resolv.conf

  • 如果LDNS还没有命中,就直接到Root Server域名服务器请求解析
  • Root Server域名服务器返回给LDNS一个查询域的主域名服务器(gTLD Server)。

gTLD是国际顶级域名服务器,如.com .cn .org,全球只有13台左右

  • LDNS再向上一步返回的gTLD Server发送请求
  • 接受请求的gTLD Server查找并返回此域名对应的Name Server对应的地址,这个Name Server通常就是注册的域名服务器
  • Name Server域名服务器会查询域名和IP映射关系,正常情况下会根据域名得到目标IP记录,连同一个TTL值返回给DNS Server域名服务器
  • 返回该域名对应的IP和对应的TTL值,LDNS Server会缓存这个域名和IP的对应关系,缓存的时间由TTL值控制
  • 将解析结果返回给用户,用户根据TTL值缓存在本地系统缓存中,域名解析过程结束。

跟踪域名解析过程:
windows:nslookup
linux:dig url
清除缓存的域名:ipconfig/flushdns
linux:/etc/init.d/nscd restart

重启仍然是解决很多问题的第一选择!

域名解析的几种方式

A记录 Address,用于指定对用域名的IP
MX记录 Mail Exchange,将某个域名下的邮件服务器指向自己的Mail Server
CNAME(别名解析) 将一个域名或者多个别名
NS记录 为某个域名指定DNS解析服务器
TXT记录 为某个主机或域名设置说明

CND(Content Delivery Network)工作机制

构筑在现有Internet上的一种先进的流量分配网络,目的是将网站内容分发到最近接用户的网络“边缘”,使用户可以就近取得所需内用,提高用户访问网站的响应速度。

当一个代理服务器能够代理外部网络上的主机,访问内部网络时,这种代理服务的方式称为反向代理服务

CDN=Mirror(镜像)+Cache(缓存)+GSLB(整体负载均衡)

目前CDN都以缓存网站中的静态数据为主,如CSS JS 图片和静态页面数据,用户在主网站在上请求到动态内容后再从CDN上下载这些静态数据,从而加速网页数据的下载速度,CDN可以达到以下几个目标:
1.可扩展性
2.安全性
3.可靠性、响应和执行。

负载均衡

对工作任务进行平衡、分摊到各个操做单元上执行,共同完成工作任务。可以提高服务器响应速度及利用效率,避免软件或者硬件出现单点失效,解决网络拥塞问题,实现地理位置无关性,为用户提高一致的访问质量。
通常有三种负载均衡架构:

  • 链路负载均衡:DNS解析成不同的IP,用户根据这个IP来访问不同的目标服务器
  • 集群负载均衡:硬件负载均衡(成本较高) 软件负载均衡(网络拥塞)
  • 操作系统负载均衡:利用操作系统级别的软中断或者硬件中断来达到负载均衡

程序媛小白一枚,如有错误,烦请批评指正!(#.#)

你可能感兴趣的:(深入Web请求)