不管网络架构如何变化,但始终有一些固定不变的原则需要遵守。
1,互联网上所有资源都要用一个url来表示。url就是统一资源定位符。
2,必须基于HTTP协议与服务端交互。
如何发起一个HTTP请求?
发起一个HTTP请求和建立一个Socket连接区别不大,只不过outputStream,write写的二进制字节数据格式要符合HTTP协议。
浏览器在建立Socket之前,必须根据地址栏里输入的URL的域名DNS解析出IP地址,再根据这个IP地址和默认80端口与远程服务器建立Socket连接,然后浏览器根据这个URL组装成一个get类型的HTTP请求头,通过outputStream.write发送到目标服务器,服务器等待inputStream.read返回数据,最后断开这个连接。
一句话,发起一个HTTP请求的过程就是建立一个Socket通信的过程。
要理解HTTP协议,最重要的就是熟悉HTTP协议中的HTTP Header,HTTP Header控制着互联网上成千上万的用户的数据的传输。最关键的是,它控制着用户浏览器的渲染行为和服务器的执行逻辑。例如,当服务器没有用户请求的数据就会返回一个404状态码,告诉浏览器没有要请求的数据,通常浏览器就会展示一个非常不愿意看到的该页面不存在的错误信息。
常见的HTTP请求头
Accept-Charset 用于指定客户端接受的字符集
Accept-Encoding 用于指定可接受的内容编码
Accept-Language用语指定一种自然语言
Host 用于指定被请求资源的Internet的主机和端口号
User-Agent 客户端将它的操作系统,浏览器和其他属性告诉服务器
Connection 当前连接是否保持
常见的HTTP响应头
Server 使用的服务器名称
Content-Type 用来指明发送给接收者的实体正文的媒体类型
Content-Encoding 与请求报头Accept-Encoding对应,告诉浏览器服务器采用的是什么压缩编码
Content-Language 描述了资源所用的自然语言
Conent-Length 描述了实体正文的长度
Keep-Alive 保持连接的时间
常见的HTTP转态码
302 临时跳转,跳转的地址通过Location指定
403 服务器收到请求,但是拒接提供服务
DNS域名解析过程
第1步,浏览器会检查缓存中有没有这个域名对应的解析过的IP地址,如果缓存中有,这个解析过程就结束。
第2步,如果用户的浏览器缓存中没有,浏览器会查找操作系统中是否有这个域名对应的DNS解析结果。
第3步,操作系统会把这个域名发送给这里设置的LDNS,也就是本地区的域名服务器(LDNS).
第4步,如果LDNS仍然没有命中,就直接到Root Server域名服务器请求解析。
第5步,根域名服务器返回给本地域名服务器一个所查询域的主域名服务器地址
第6步,本地域名服务器再向上一步返回的gTLD服务器发送请求。
第7步,接受请求的gTLD服务器查找并返回此域名对应的Name Server域名服务器的地址,
这个Name Server通常就是你注册的域名服务器,假如你在某个域名服务提供商申请的域名,那么这个域名解析任务就由这个域名提供商的服务器来完成。
第8步,Name Server 域名服务器会查询存储的域名和IP的映射关系表,
第9步,返回该域名对应的IP和TTL值,Local DNS Server会缓存这个域名和IP的对应关系
第10步,把解析的结果返回给用户
CDN工作机制
CDN也就是内容分布网络(Conent Delivery Network),它是构筑在现有Internet上的一种先进的
流量分配网络。其目的是通过现有的Internet中增加一层新的网络架构。
有这样一个比喻:CDN=镜像(Mirror)+缓存(Cache)+整体负载均衡(GSLB).。
目前CDN都以缓存网站中的静态数据为主,如CSS,JS图片和静态页面等数据。