1.1 使用 HTTP 协议访问 Web:

  根据 Web 浏览器地址栏中指定的URL,从服务端获取资源等信息,在页面上展示。

  Web 使用一种 HTTP (超文本传输协议)作为规范,完成从客户端到服务端等一系列流程。

  Web 是建立在 HTTP 协议上通信的。

  

1.2 HTTP 的诞生:

  1989-3,CERN(欧洲核子研究组织)蒂姆·伯纳斯-李(Tim Berners-Lee)博士提出一种能让远隔两地的研究者们共享知识的设想。

  基本设计理念:借助多文档之间相互关联形成的超文本(HyperText),连城和相互参阅的 WWW(World Wide Web,万维网)。

  三项WWW构建技术:

  •   把SGML(Standard Generalized Markup Language,标准通用标记语言)作为页面的文本标记的HTML(Hyper Markup Language,超文本标记语言);
  •   作为文档传递协议的HTTP
  •   指定文档所在的地址的URL(Unuform Resource Locator,统一资源定位符)

  1996 年 5 月,HTTP 1.0

  1997 年 1 月,HTTP 1.1 是目前主流的 HTTP 协议版本

  小结:HTTP协议的出现主要是为了解决文本传输的难题  

1.3 网络基础 TCP/IP

  通常使用的网络(包括互联网)是在 TCP/IP 协议族的基础上运作的。HTTP 属于它内部的一个子集。

  计算机与网络设备要相互通信,双方必须基于相同的方法,相同的规则。这种规则称为协议(Protocol)。

  

  协议中存在各种各样的内容,像这样把互联网关联的协议集合起来总称为 TCP/IP 协议。协议族的统称。

  TCP/IP 协议族分层:应用层、传输层、网络层、数据链路层。

  应用层:决定了向用户提供应用服务时通信的活动。TCP/IP 协议族内预存了各类通用的应用服务,如 FTP(File Transfer Protocol,文件传输协议)和 DNS(Domain Name Service,域名系统)服务就是其中两类。HTTP协议也处于该层。

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

  网络层:用来处理在网络上流动的数据包。数据包是网络传输的最小单位。该层规定了通过怎样的路径到达对方计算机,并把数据包传送给对方。

  链路层:用来处理网络的硬件部分。包括控制操作系统、硬件的设备驱动、NIC,及光纤等物理可见部分。硬件上的范畴均在链路层的作用范围之内。

  

  利用 TCP/IP 协议族进行网络通信时,会通过分层顺序与对方进行通信。发送端从应用层往下走,接收端则往上走。

  例如,客户端在应用层(HTTP协议)发出一个想看某个Web页面的 HTTP 请求。

  接着为了传输方便,在传输层(TCP协议)把从应用层处收到的数据(HTTP请求报文)进行分割,并在各个报文打上标记序号及端口号后转发给网络层。

  在网络层(IP协议),增加作为通信目的地的 Mac 地址后转发给链路层。这样一来,发送网络的通信请求就准备齐全了。

  接收端的服务器在链路层接收到数据,按序往上层发送,一直到应用层。当传输到应用层,才能算真正接收到由客户端发送过来的 HTTP 请求。

  

  发送端在层与层之间传输数据时,每经过一层时必定会被打上一个该层所属的首部信息。反之,接收端在层与层传输数据时,每经过一层时会把对应的首部消去。

  这种把数据信息包装起来的做法称为封装(encapsulate)。

1.4 与 HTTP 关系密切的协议:IP、TCP、DNS:

  负责传输的 IP(Internet Protocol) 协议。IP 协议的作用是把各种数据包传送给对方。要保证确实传送到对方那里,则需要满足各类条件。 IP 地址 和 MAC 地址。

  IP 地址指明了节点被分配到的地址,Mac 地址是指网卡所属的固定地址。IP 地址可以和 Mac 地址进行配对。IP 地址可变换,但 Mac 地址基本上不会更改。

  ARP 是一种用以解析地址的协议,根据通信方的 IP 地址就可以反查出对应的 Mac 地址。

  TCP 位于传输层,提供可靠的字节流服务。为了传输方便,将大块数据分割成以报文段(Segment)为单位的数据包进行管理。而可靠的传输服务协议是指,能够把数据准确可靠地传给对方。。

  TCP 协议为了更容易传送大数据才把数据分割,而且 TCP 协议能够确认数据最终是否送达到对方。

  为了准确无误地将数据送达到目的地,TCP 协议采用了三次握手策略。握手过程中使用了 TCP 的标志(flag)--SYN(synchronize)和 ACK(acknowledgement)。

  发送端首先发送一个带 SYN 标志的数据包给对方。接收端收到后,回传一个带有 SYN/ACK 标志的数据包以示传达确认信息。最后,发送端再回传一个带 ACK 标志的数据包,代表“握手”结束。

  若在握手过程中某个阶段莫名中断,TCP 协议会再次以相同的顺序发送相同的数据包。

  

1.5 负责域名解析的 DNS 服务

  DNS(Domain Name System)服务是和 HTTP 协议一样位于应用层的协议。它提供域名到 IP 地址之间的解析服务。

  计算机既可以被赋予 IP 地址,也可以被赋予主机名和域名。

1.6 各种协议与 HTTP 协议的关系

  HTTP 协议职责:生成针对目标 Web 服务器的 HTTP 请求报文;

  TCP 协议职责:为了通信方便,将 HTTP 请求报文分割成报文段,把每个报文段可靠的传给对方;

  IP 协议的职责:搜索对方的地址,一边中转一边传送

  

1.7 URI 和 URL

  URI(Uniform Resource Identifier)统一资源标识符:是由某个协议方案表示的资源定位标识符。协议方案是指访问资源所使用的协议类型名称。

  常见的有 HTTP、FTP、mailto、telnet、File 等;

  URI 用字符串标识某一互联网资源,而URL 标识资源的地点(互联网上所处的位置)。

  URL 是 URI 的子集。

  

  URI 格式:

  

2.1 HTTP 协议用于客户端和服务端之间的通信:

  请求报文的构成:

  

  

2.3 HTTP 是不保存状态的协议:

  HTTP 是不保存状态的协议,即无状态(stateless)协议。HTTP 协议自身不对请求和响应之间的通信状态进行保存。也就是说在 HTTP 这个级别,协议对于发送过的请求或响应都不做持久化处理。

  使用 HTTP 协议,每当有新的请求发送时,就会有对应的新响应产生。协议本身并不保留之前一切的请求或响应报文的信息。

  为了实现保存状态的功能,引入了 Cookie 技术。

2.4 请求 URI 定位资源:

  HTTP 协议使用 URI 定位互联网上的资源。当客户端请求访问资源而发送请求时,URI需要将作为请求报文中的请求 URI 包含在内。

2.5 告知服务器意图的 HTTP 方法:

  GET 方法用来请求访问已被 URI 识别的资源。指定的资源经服务器端解析后返回响应内容。

    如果请求的资源是文本,那就保持原样返回;如果是像 CGI(Common Gateway Interface,通用网关接口)那样的程序,则返回经过执行的输出结果。

  POST 方法用来传输实体的主体。一般用 POST 方法传输实体的主体。POST 的主要目的并不是获取响应的主体内容。

  PUT:传输文件 ,像 FTP 协议的文件上传一样,要求在请求报文的主体中包含文件内容,然后保存到指定 URI 指定的位置。

    PUT 方法自身不带验证机制,任何人都可以上传文件,存在安全性问题,因此一般 Web 网站不使用该方法。

  Head:获取报文首部,不返回报文主体部分。用于确认 URI 的有效性及资源更新的日期时间等。

  DELETE:删除文件:delete 方法按请求 URI 删除指定的资源。不带验证机制,一般的 Web 网站不用。当配合 Web 应用程序的验证机制,或遵守 REST 标准时还是有可能开发使用。

  OPTIONS:方法用来查询对请求 URI 指定的资源支持的方法。

  TRACE:方法是让 Web 服务器将之前的请求通信环回给客户端的方法。发送请求时,在 Max-Forward 首部字段中填入数值,每经过一个服务器端就将该数字减 1,当数值刚好减到 0 时,就停止传输,最后接收到请求的服务端则返回状态码 200 OK 的响应。

  

  CONNECT:要求用隧道协议连接代理,实现用隧道协议进行 TCP 通信。主要使用 SSL(Secure Sockets Layer,安全套接层)和 TLS(Transport Layer Security,安全传输层)协议把通信内容加密后经网络隧道传输。

2.6 使用方法下达命令:

  

  

  

2.7 持久连接节省通信量

  HTTP keep-alive 特点,只要任意一端没有明确提出断开连接,则保持 TCP 连接状态。这样做减少了 TCP 连接的重复建立和断开所造成的额外开销,减轻了服务端的负载。另外,减少开销的那部分时间,

  

  

  

  

【读书笔记】图解HTTP完整流程的更多相关文章

  1. TIJ读书笔记02-控制执行流程

      TIJ读书笔记02-控制执行流程 TIJ读书笔记02-控制执行流程 if-else 迭代 无条件分支 switch语句 所有条件语句都是以条件表达式的真假来决定执行路径,也就是通过布尔测试结果来决 ...

  2. struts 2读书笔记-----struts2的开发流程

    一.将struts 2的lib文件夹下地commons-fileupload.jar.commons-io.jar.freemarker.jar.javassist.jar.ognl.jar.stru ...

  3. 读书笔记---<<图解HTTP>>(一)

    一.了解Web及网络基础 1. 网络基础TCP/IP 通常使用的网络包括互联网都是在TCP/IP协议族的基础上运作的,而HTTP属于它内部的一个子集. 1.1 TCP/IP协议族 像这样吧与互联网关联 ...

  4. hadoop学习day1环境配置笔记(非完整流程)

    hdfs的工作机制: 1.客户把一个文件存入hdfs,其实hdfs会把这个文件切块后,分散存储在N台linux机器系统中(负责存储文件块的角色:data node)<准确来说:切块的行为是由客户 ...

  5. Learning The Bash Shell读书笔记(整理)

    最近搞了一本书 Learning Bash Shell,发现有人已经写了阅读笔记,我就在这边整理一下 来自blog:http://blog.sina.com.cn/n4mine Learning Th ...

  6. 《C#图解教程》读书笔记之六:接口和转换

    本篇已收录至<C#图解教程>读书笔记目录贴,点击访问该目录可获取更多内容. 一.接口那点事儿 (1)什么是接口? 一组函数成员而未实现的引用类型.只有类和结构能实现接口. (2)从ICom ...

  7. 读书笔记——《图解TCP/IP》(1/4)

    读书笔记——<图解TCP/IP>(1/4) 经典摘抄 第一章 网络基础知识 1.独立模式:计算机未连接到网络,各自独立使用的方式. 2.广域网 WAN 局域网 LAN 城域网 MAN 3. ...

  8. 图解http读书笔记

    以前对HTTP协议一知半解,一直不清楚前端需要对于HTTP了解到什么程度,知道接触的东西多了,对于性能优化.服务端的配合和学习中也渐渐了解到了HTTP基础的重要性,看了一些大神对HTTP书籍的推荐,也 ...

  9. C#温故知新:《C#图解教程》读书笔记系列

    一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...

随机推荐

  1. python 让异常名称显示出来

    一 try: pass except Exception as e: print(e) 二 import sys try: pass except: print(sys.exc_info()) 下面有 ...

  2. php一些实用的自制方法

    时间戳转多久之前 function mdate($time = NULL) { $text = ''; $time = $time === NULL || $time > time() ? ti ...

  3. buuctf 二维码

    首先下载文件 然后用解压工具解压之后 发现是一个二维码 扫描二维码 并没有拿到 flag 然后将图片拖进 hxd中搜索PK发现有一个压缩包  将压缩包提取出来 暴力破解 然后得到密码 然后解压 然后得 ...

  4. Educational Codeforces Round 76 (Rated for Div. 2) A. Two Rival Students

    You are the gym teacher in the school. There are nn students in the row. And there are two rivalling ...

  5. 2.6 XML配置:XML文件节点说明

    来源:http://blog.csdn.net/five3/article/details/25907693 TestNG的DTD检查文件:http://testng.org/testng-1.0.d ...

  6. python中给函数传参是传值还是传引用

    首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传 ...

  7. Eclipse C++配置静态链接库和动态链接库

    转:https://blog.csdn.net/iteye_20658/article/details/82650699 1.动态库: 一.创建动态链接库1.创建工程new->project-& ...

  8. 微信小程序UDP通信,注意点 接收 onMessage 收到的message是ArrayBuffer缓冲,不能直接输出,要另转String处理

    1.WXML 页面代码 <!--index.wxml--> <view class="container"> <view class="us ...

  9. shell的debug模式

    如何调试shell脚本? 在指定shell运行版本时加上 '-x' #!/bin/bash   -x ➜ demo git:(master) ✗ cat debug.sh #!/bin/bash -x ...

  10. 洛谷 P1563 玩具谜题(模拟)

    嗯... 题目链接:https://www.luogu.org/problem/P1563 这道题主要问题就是弄明白顺逆时针的问题,其实可以简化成一个异或的问题:当head与x异或值为零时,即为顺时针 ...