HTTP学习(一)初识HTTP

  作为一名准前端开发工程师,必须要对http基础知识有一定的了解,可是想学习HTTP相关的知识,发现国内只有两本相关的图书,《HTTP权威指南》和《图解http》,所有的书但凡带上权威指南,必将是圣经级别的图书,我在学校图书馆借了一本,600多页的砖头书,由于基础太过薄弱,根本读不下去,于是转向了《图解HTTP》,是本书很薄,只有二百多页,很适合我这样的小白。推荐基础比较薄弱的朋友先从《图解HTTP》看起!废话不多说,准备起飞!

几乎每一位前端工程师在面试的时候都会被问道这样一个问题,在浏览器地址栏输入URL到显示出整个页面,经历了什么?这个问题并没有一个统一的答案,最简单的形容:  

  1.利用dns进行域名解析,解析成计算机能够识别的ip地址 。

  2.进行tcp的三次握手 。

  3.建立起tcp连接后,进行http请求 。

  4.服务器端相应http请求,浏览器得到html页面 。

  5.浏览器解析html页面,发起html页面内的资源请求 。

  6.渲染得到的html页面,呈献给用户。

如果觉得理解不了,可以先跳过,等看完全篇文章再回看这个问题,就容易理解很多。

首先要了解两个概念,客户端和服务器,客户端通俗理解就是用户(比如你手机上的浏览器),请求资源的一方,而服务器端就是存储网站信息的主机(比如百度公司的服务器),提供资源相应的一方。而http就是客户端和服务器之间进行交流的一个协议。计算机和网络设备之间进行通信,就必须使用双方都能够理解的信息进行交流,这种为了使双方顺利进行信息的通讯而制定的规范就是协议! 要想学习http,则还要简单了解一下tcp/ip协议,tcp/ip协议是许多协议组成的集合的总称,包括TCP, IP, HTTP, DNS,FTP,UDP,PPPoE,ICMP,SNMP,FDDI等协议,http是tcp/ip协议的一个子集,是tcp/ip协议族的一部分!由于tcp/ip协议族中有很多不同的协议,而这些协议所应用的领域又有很大的不同,所以,对不同领域的协议进行划分就显得很重要了,tcp/ip协议族将这些协议划分为4层,分别是:应用层,传输层,网络层,数据链路层。不同的层次分工也各有不同。

应用层:应用层决定了向用户提供应用服务时通信的活动,包含的协议包括HTTP, DNS(Domain Name System,域名系统),FTP(File Transfer Protocol,文件传输协议)。

传输层:传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传输。包括TCP(Transmission Control Protocol, 传输控制协议)和UDP( User Data Protocol, 用户数据报协议)。

网络层(又称:网络互联层):网络层用来处理 在网络上流动的数据包。数据包是网络传输的最小数据单位,该层规定了通过怎样的传输路线到达对方计算机,并把数据包传给对方,当与对方计算机之间通过多台计算机或者网络设备进行传输时,网络层的作用就是在多条路中间选择一条传输路线。网络层最主要的就是IP协议(Internet Protocol)。

数据链路层: 用来处理连接网络的硬件部分,包括控制操作系统,硬件的设备驱动,网卡,光纤等肉眼可见的部分,硬件范畴都属于数据链路层。

  配图(tcp/ip分层结构图)

在利用tcp/ip协议族通讯的时候,会按分层的顺序走,客户端从上往下,接收端从下往上,以此完成一次通讯!通俗点理解就是,在京东购物下单,发送用户的请求(应用层,http发送请求),仓库打包物品(传输层,tcp将大数据分割成报文段,准确可靠的把信息传递),快递装车,途径各个中转中心,发往全国各地(网络层,ip协议,通过目标地址,选择线路),快递小哥派送物品(数据链路层)。

知道这些显然还不够,与http有关的协议主要有TCP,IP,DNS。

DNS属于应用层,有时候输入域名(给人看的)或者一串数字(给计算机看的)组成的ip地址都能够访问同一个网站,这是因为域名是方便记忆,但是计算机看不懂,计算机只能看懂ip地址,所以DNS就是为了将域名和ip地址进行转换而生的。输入网址后,第一件事就是利用DNS将域名转换为ip地址。

TCP协议属于传输层,将http的大块请求数据进行分解,拆成报文段( segment)为单位的数据包进行管理,这样可以方便传输。tcp有强迫症,将信息告诉他人后,他还不放心,需要再次确认才能够放心,所以tcp传递是靠谱,准确的传递,整个过程就像:

小A:我给你说点事,XXXXXXXXXXXXXXXX,你可别给他人说!收到请回复!(第一次握手)(发送SYN数据包)

小B:好的,收到了。(第二次握手)(回复SYN/ACK数据包)

小A:嗯,我就是确认一下!(第三次握手)(发送ACK数据包)

这就是大名鼎鼎的三次握手,如果中间莫名中断,tcp协议会再次以相同的顺序发送相同的数据包。保证了通信的可靠性。

IP协议属于网络层,主要负责数据传输,把数据包传递给对方,要想传递给对方,则需要知道对方的IP地址或MAC地址,IP地址指明了节点被分配到的地址,而MAC地址是指网卡所属的固定地址,IP地址能够和MAC地址进行配对,IP地址能够更换,而MAC地址是固定不变的!IP间的通讯依赖MAC地址,但是,通信双方在一个局域网内的情况是很少的,所以说大部分的通信都是需要中间的设备进行中转的,根据下一个中转设备的MAC地址才能够搜索下一个中转目标。采用ARP协议(Address Resolution Protocol),解析通信方的ip地址,反查出MAC地址。

  未完,待续!

时间: 2024-10-10 20:56:54

HTTP学习(一)初识HTTP的相关文章

Java基础学习——数组初识(1)

Java基础学习--数组初识(1) 1什么是数组 Java中常见的一种数据结构就是数组,数组可以分为一维数组.二维数组和多维数组. 数组是由一组相同的变量组成的数据类型,数组中每个元素具有相同的数据类型,数组中的每个元素都可以用一个统一的数组名和下标来确定. 2 数组的使用 数组的一般使用步骤: 声明数组 分配内存给该数组 下面是一维数组为例: 数据类型  数组名 []: 数组名 = new 数据类型 [数据个数]: 2.1一维数组的声明与赋值 1.数组的声明 int  num [];    

StyleCop学习笔记——初识StyleCop

一.定义 StyleCop是微软的一个开源的静态代码分析工具,检查c#代码一致性和编码风格. 二.支持的环境. JetBrains R# 5.1.3 ( 5.1.3000.12) JetBrains R# 6.0 (6.0.2202.688) JetBrains R# 6.1 (6.1.37.86) JetBrains R# 6.1.1 (6.1.1000.82) JetBrains R# 7.0.1 (7.0.1098.2760) JetBrains R# 7.1.3 (7.1.3000.22

RTX51 Tiny实时操作系统学习笔记—初识RTX51 Tiny

 一,RTX51 Tiny简单介绍 RTX51 Tiny是一种实时操作系统(RTOS),能够用它来建立多个任务(函数)同一时候运行的应用(从宏观上看是同一时候运行的,但从微观上看,还是独立运行的).嵌入式应用系统常常有这样的需求.RTOS能够提供调度.维护.同步等功能. 实时操作系统能灵活的调度系统资源,像CPU和存储器,而且提供任务间的通信.RTX51 Tiny是一个功能强大的RTOS,且易于使用,它用于8051系列的微控制器.该RTOS最多支持16个任务,基于RTX51 Tiny构建的应用程

capwap学习笔记——初识capwap(四)

2.5.7 CAPWAP传输机制 WTP和AC之间使用标准的UDP客户端/服务器模式来建立通讯. CAPWAP协议支持UDP和UDP-Lite [RFC3828]. ¢ 在IPv4上,CAPWAP控制和数据通道使用UDP.此时CAPWAP报文中的UDP校验和必须设置为0.AC上的CAPWAP控制报文端口为UDP众所周知端口5246,数据报文端口为UDP众所周知端口5247 ,WTP可以随意选择CAPWAP控制和数据端口. ¢ 在IPv6上,CAPWAP控制通道一般使用UDP,而数据通道可以使用U

capwap学习笔记——初识capwap(二)

2.5.1 AC发现机制 WTP使用AC发现机制来得知哪些AC是可用的,决定最佳的AC来建立CAPWAP连接. WTP的发现过程是可选的.如果在WTP上静态配置了AC,那么WTP并不需要完成AC的发现过程. WTP首先发送一个 Discovery Request message给受限的广播地址,或者CAPWAP的多播地址(224.0.1.140),或者是预配置的AC的单播地址.在IPV6网络中,由于广播并不存在,因此使用"All ACs multicast address" (FF0X

capwap学习笔记——初识capwap(一)

2 初识CAPWAP 2.1 CAPWAP简介 说了半天CAPWAP,连全称都还没说,汗-- CAPWAP--Control And Provisioning of Wireless Access Points Protocol Specification.其由两个部分组成:CAPWAP协议和无线BINDING协议. 前者是一个通用的隧道协议,完成AP发现AC等基本协议功能,和具体的无线接入技术无关.后者是提供具体和某个无线接入技术相关的配置管理功能.这么说吧,前者规定了各个阶段需要干什么事,后

capwap学习笔记——初识capwap(五)

3. CAPWAP Binding for IEEE 802.11 ¢ CAPWAP协议本身并不包括任何指定的无线技术.它依靠绑定协议来扩展对特定无线技术的支持. ¢ RFC5416就是用来扩展CAPWAP对IEEE 802.11网络的支持.其中定义了控制消息字段,新的控制消息,消息元素. ¢ 注意,这个协议仅支持IEEE 802.11-2007规范,并不支持IEEE 802.11-2007 standard中定义的ad hoc网络模式(即点到点模式,也就是IBSS),也不适用于four-add

capwap学习笔记——初识capwap(三)

2.5.6 CAPWAP状态机详解 2.5.6.1 Start to Idle 这个状态变迁发生在设备初始化完成. ¢  WTP: 开启CAPWAP状态机. ¢  AC:  开启CAPWAP状态机. 2.5.6.2 Idle to Discovery 这个状态变迁发生是为了支持CAPWAP发现进程. ¢   WTP: WTP进入发现状态是为了优先去传输第一个Discovery Request message.在进入这个状态之前,WTP设置发现DiscoveryInterval timer,将Di

DXUT 初步学习 框架初识

初识DXUT 什么是DXUT 这个概念性的东西,不同的人不同的理解,总的来说还是比较简单的D3D小框架,对D3D的一个简单的封装,可以理解成一个类库.微软作用,可以更好的展示D3D的功能和新发布的特性:游戏开发者作用,可以更快更轻巧的展示模型结果,检验算法效果:学习者作用,可以是一个入门的精巧例子,由于D3D的例子大部分都是利用DXUT的,所以可以更快的学习D3D SDK中的例子,加速学习过程. 现在的DXUT 现在的DXUT主要有D3D9 D3D10和D3D11三个版本,可以看出来D3DX的版

学习笔记:java并发编程学习之初识Concurrent

一.初识Concurrent 第一次看见concurrent的使用是在同事写的一个抽取系统代码里,当时这部分代码没有完成,有许多的问题,另一个同事接手了这部分代码的功能开发,由于他没有多线程开发的经验,所以我就一起帮着分析.最开始看到这个时很烦燥啊,因为自己接触java时间很短,连synchronized都不知道怎么用呢,突然发现有这么个复杂的东西.当时就只好开始学习吧,毕竟是使用嘛,第一目的就是了解清楚这玩意的各个类与方法都干嘛用的,然后看了看同事的代码大概也就清楚了.感觉这和大部分人一样,能