作为一名准前端开发工程师,必须要对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地址。
  未完,待续!

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

  1. SSH 框架学习之初识Java中的Action、Dao、Service、Model-收藏

    SSH 框架学习之初识Java中的Action.Dao.Service.Model-----------------------------学到就要查,自己动手动脑!!!   基础知识目前不够,有感性 ...

  2. DotNetty网络通信框架学习之初识Netty

    p{ text-align:center; } blockquote > p > span{ text-align:center; font-size: 18px; color: #ff0 ...

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

    一.初识Concurrent 第一次看见concurrent的使用是在同事写的一个抽取系统代码里,当时这部分代码没有完成,有许多的问题,另一个同事接手了这部分代码的功能开发,由于他没有多线程开发的经验 ...

  4. C++学习 之 初识头文件

    声明:            本人自学C++, 没有计算机基础,在学习的过程难免会出现理解错误,出现风马牛不相及的现象,甚至有可能会贻笑大方. 如果有幸C++大牛能够扫到本人的博客,诚心希望大牛能给予 ...

  5. C++学习 之 初识命名空间

    声明:            本人自学C++, 没有计算机基础,在学习的过程难免会出现理解错误,出现风马牛不相及的现象,甚至有可能会贻笑大方. 如果有幸C++大牛能够扫到本人的博客,诚心希望大牛能给予 ...

  6. C++学习 之 初识变量和基本类型 之 内置类型

    声明:            本人自学C++, 没有计算机基础,在学习的过程难免会出现理解错误,出现风马牛不相及的现象,甚至有可能会贻笑大方. 如果有幸C++大牛能够扫到本人的博客,诚心希望大牛能给予 ...

  7. C++学习 之 初识C++

    声明:            本人自学C++, 没有计算机基础,在学习的过程难免会出现理解错误,出现风马牛不相及的现象,甚至有可能会贻笑大方. 如果有幸C++大牛能够扫到本人的博客,诚心希望大牛能给予 ...

  8. TensorFlow学习(1)-初识

    初识TensorFlow 一.术语潜知 深度学习:深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法. 深度学 ...

  9. Java学习-002-Java初识

    此文主要讲述什么是 Java,以及 Java 常识性知识,方便亲们进一步了解 Java 语言相关的常识. 一.Java 概述 Java 语言是美国 Sun Microsystems 公司于 1995 ...

  10. Backbone.js学习之初识hello-world

    说了好久好久要学习Backbone.js,现在终于下定决心开始学习了.然后呢,就根据我的学习进度在这里做个简单的记录,方便新人,也方便我自己以后回忆. 准备 用bower下载这几个库或框架也是醉了.. ...

随机推荐

  1. ubuntu16安装KVM

    apt install qemu-kvm libvirt-bin apt install openvswitch-switch

  2. async & await 的用法

    async 和 await 出现在C# 5.0之后,给并行编程带来了不少的方便,特别是当在MVC中的Action也变成async之后,有点开始什么都是async的味道了.但是这也给我们 编程埋下了一些 ...

  3. IOS9新特性之Contacts联系人

    在以前iOS开发中,涉及联系人相关的编程,代码都非常繁琐,并且框架的设计也不是Objective-C风格的,这使开发者用起来非常的难受.在iOS9中,apple终于解决了这个问题,全新的Contact ...

  4. 使用spol导出exce

    sqlplus 能生产xls的excel文件 connect / as sysdba; SET NEWPAGE 0 SET SPACE 0 SET LINESIZE 80 SET PAGESIZE 0 ...

  5. 学习笔记::LCT

    今天听见茹大神20分钟讲完了LCT,10分钟讲完平衡树,5分钟讲完树剖,感觉自己智商还不及他一半... 还有很多不懂:2017/1/15 的理解: access是干什么用的? 不知道,只知道他是用来把 ...

  6. iOS 操作系统整体架构层次讲解

    iOS的系统架构分为四个层次:核心操作系统层(Core OS layer).核心服务层(Core Services layer).媒体层(Media layer)和可触摸层(Cocoa Touch l ...

  7. iOS 之 static

    函数体内的static变量的作用范围是该函数体,在内存中只分配一次,下次调用时仍维持上次的值. 模块内的static全局变量可以被模块内的所有函数访问,但是不能被模块外的其它函数访问. 模块内的sta ...

  8. Ajax Not Found,asp.net mvc 中

    x前台代码: <script type="text/javascript"> $(document).ready(function () { $("#btnS ...

  9. js原生设计模式——10适配器模式之参数适配器

    原理:参数适配器说白了就是给出要带入数据字段的对应字段的默认值,一旦数据字段值不足,就取默认值补足. [写法一]:直接返回 <!DOCTYPE html><html lang=&qu ...

  10. 读取SQLServer数据库存储过程列表及参数信息

    得到数据库存储过程列表: select * from dbo.sysobjects where OBJECTPROPERTY(id, N'IsProcedure') = 1 order by name ...