• 学习过程对书本的内容的摘要以及总结,逐步完善,带有个人理解成分。

Web 及网络基础

使用 HTTP 协议访问 Web

  • 客户端:通过获取请求获取服务资源的 Web 浏览器等
  • HTTP 全称:HtyperText Transfer Protocol
  • WWW 全称:Wrold Wide Web
  • SGML 标准通用标记语言 全称:Standard Generalized Markup Language

网络基础 TCP/IP

  • TCP/IP 协议族,或指TCP、IP
  • 协议族常见协议:TCP、UDP、IP、PPPoE、DNS、SNMP、ICMP 等

TCP/IP 的分层管理

分为四层:应用层、传输层、网络层、数据链路层

应用层
  • 决定了向用户提供应用服务时通信的活动
  • 预存了各类通用的应用服务。如:DNS、FTP
  • HTTP 协议也在该层
传输层
  • 对上层应用层,提供处于网络连接中的两台计算机之间的数据传输协议
  • TCP、UDP在其中
网络层(网络互连层)
  • 处理网络上的流动数据包。
  • 数据包:网络传输的最小单位。
  • 规定了通过了怎样的传输路径(传输路线)到达对方的计算机,并把数据包给对方。
链路层(数据链路层、网络接口层)
  • 处理连接网络的硬件部分。
  • 例如:控制操作系统、硬件的设备驱动、光纤等,硬件范围。

TCP/IP 通信传输流

  • 发送端:应用层往下走。接受端相反
  • 发送端:层与层之间传输数据的时候会把对应的首部信息打上。反之消去首部。
  • 把数据包装起来的做法叫封装。

与 HTTP 密切相关的协议:IP、TCP 和 DNS

负责传输的 IP 协议

  • IP:Internet Protocol 位于网络层的网际协议。
  • 把各自数据包传送给对方。
  • 要保证确实传输到对方那里,需要满足各类条件。其中两个重要的是:IP 地址和 MAC 地址(Media Access Control Address)。IP 地址指明了节点被分配的地址,MAC 地址是指网卡所属的固定地址。
  • IP 地址可和 MAC 地址相互匹配,IP 地址可变换, MAC 地址基本上不会更改。

使用ARP协议(Address Resolution Protrocol)协议

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

确保可靠性的 TCP 协议

  • 位于传输层,提供可靠的字节流服务。

  • 字节流服务:为方便传输,将大块的数据分割成报文段(segment)为单位的数据包进行管理。(为了传输大数据才将数据经行分割)

  • 可靠的服务:把数据准确的传输给对方。

  • 确保能到达目标。

    • 采用三次握手策略(three-way handshaking)策略。
    • 使用了 TCP 标志:(flag)—SYN(synchronize) 和 ACK(ackonwledgement)

负责域名解析的 DNS 服务

  • DNS(Domain Name System)是位于应用层的协议。同 HTTP 一样。
  • 提供域名到 IP 地址之间的解析服务。可逆向查询。
  • 计算机可被赋予 IP 地址,也可被赋予 主机名和域名。通常用主机名或域名,因为符合人类记忆习惯。

各种服务与 HTTP 协议的关系

  • 想想想想

URI 和 URL

  • URI:Uniform Resource Identifier 统一资源标识符。
    • Uniform 规定统一的格式,方便处理多种不同类型的资源。
    • Resource 资源的定义是“可标识的任何东西”。除文档文件、图形或服务等能够区别与其他的,全部可做资源。资源不仅可单一,也可以是多数的集合体。
    • Identifier 表示可标识的对象。也称标识符。
    • 就是由某个协议方案表示的资源定位符。协议方案是指访问资源时使用的协议的类型名称。例如:采用 HTTP 协议的时候,协议方案就是 http。除此之外,还有ftp、file等30多种。

URI 用字符串标识着某一互联网资源,URL 表示资源的地点。

可见,URL 是 URI 的子集。

  • URL:Uniform Resource Locator 统一资源定位符。

URI 格式

  • 表示指定的 URL ,要使用涵盖全部必要信息的 绝对 URL 、绝对 URL 以及相对 URL 以及相对 URL 。相对 URL ,是指从浏览器中基本 URL 处指定的 URL,形如 /image/logo.gif

绝对 URL 的格式:

http:// user:pass @ www. exanple.jp: 80 / dir/index.htm ? uid=1 # ch1

  • http:// 协议方案名。不区分大小写。
  • user:pass 登录信息(认证)。可选信息。
  • www. exanple.jp: 服务器地址。
    • 使用绝对的URL必须指定待访问的服务器地址。
    • 地址可以是类似 hackr.jp 这种DNS 可解析的名称,也可以是 192.168.1.1 这种类似 IPv4 地址名,还可以是 [0:0:0:0:0:0:0:1]这种方括号括起来的 IPv6 地址名。
  • 80 服务器端口号。可选项。省略则使用默认的端口号。
  • dir/index.htm 带层次的文件路径。与 UNIX 系统的文件目录结构类似。
  • uid=1 查询字符串。针对已指定的文件路径内的资源。可选。
  • ch1 片段标识符。通常可标记出已获取资源的子资源。可选。 RFC 中没有规定其使用方法。

RFC(Request for COmments)征求修正意见书

制定 HTTP 协议技术标准的文档。

简单的 HTTP 协议

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

  • 必定是一端担任客户端角色,另一端担任服务器角色。

通过请求和响应的交换达成通信

  • 请求必定由客户端发出,服务端回复

实例:

客户端发给某个服务器的请求报文中的内容。


GET /index.htm HTTP/1.1

Host : hacker.jp


  • GET 请求访问服务器的类型,称为方法(method)。
  • /index.htm 指明了访问的资源对象。称为 请求URI(request-URI)。
  • HTTP/1.1 是 HTTP 的版本号。

意思是:请求访问某台 HTTP 服务器上的 /index/htm 页面资源


// 服务器

HTTP/1.1 200 OK

Date: Tue, 1 Jan 2020 08:00:01 GMT

Content-Length: 362

Content-Type: text/html

...


请求报文是由请求方法、请求URL、协议版本、可选的请求首部字段和内容实体构成。

  • HTTP/1.1 表示服务对应的 HTTP 版本。
  • 200 OK 表示请求的处理结果的状态码(status code)和原因短语(reason-phrase)。
  • 下一行显示响应的时间,是首部字段(header field)内的一个属性。
  • 接下来,空一行 分隔,之后的内容称为资源实体的主体(enntity field)
  • GMT 是响应首部字段。

HTTP 是不保存状态的协议

  • 无状态协议(stateless)
  • HTTP 这个级别,协议对于发送请求或响应都不做持久化处理。
  • 每当有新的请求,即产生新的响应,不保存之前的响应报文信息。
  • 为了保持状态,引入 Cookie 技术。

请求 URL 定位资源

  • 类型很多种。。。

如果不是访问特定的资源,而是对服务器本身发起请求,可以用一个 * 来代替请求URI。例如:

OPTIONS * HTTP/1.1

告知服务器意图的 HTTP 方法

GET :获取资源

  • GET 方法用来请求访问已被 URI 识别的资源。
  • 指定的资源经服务端解析后返回响应内容。如果请求资源是文本,那就保持原样返回;如果是像 CGI(Common Gateway Interface) 通用网关接口那样的程序,则返回经过执行后的输出结果。

例子:

请求 Get /index.html http/1.1
响应 返回 index.html 的页面资源
请求 Get /index.html http/1.1
Host: www.hackr. jp
if-modified-since: thu, 1 jan 2020 08:20:01 gmt
响应 仅返回2020年1月1日8点20分以后更新过的index页面资源。

POST:传输实体主体

  • 用来传输实体的主体。

例子:

请求 post /submit.cgi http/1.1
Host: www.hackr. jp
content-length:1560(1560字节的数据)
响应 返回 submit.cgi 接收数据的处理结果

PUT:传输文件

  • 传输文件,像 FTP 一样。
  • 要求在请求报文主体中包含文件内容,然后保存到请求 URI 制定的位置。
  • HTTP/1.1 自身不带验证机制。存在安全问题,一般不用。
  • 若配合 Web 应用程序的验证机制,或采用 REST(REpresentational State Transfer,表征状态转移) 标准的同类 Web 网站,可能会使用。

例子:

请求 put /example.html http/1.1
host: www.hackr .jp
content-type: text/html
content-length: 1560 (1560字节的数据)
响应 响应返回状态码 204 Not Content (比如:该 html 已存在于服务器上)

HEAD:获得报文首部

  • HEAD 方法和 GET 方法一样,不返回报文主体部分。
  • 用于确认 URL 的有效性及资源更新的日期时间等。

例子:

请求 head /index.html http/1.1
host: www.hackr .jsp
响应 返回 index.html有关的响应首部

DELETE:删除文件

  • 用来删除文件,是与 PUT 相反的方法。
  • 但是和 HTTP/1.1 一样,不带验证机制,所以一般的 Web 网站也不使用 DELETE 方法。
  • 当配合 Web 应用程序的验证机制,或遵循 REST 标准时还是有可能会开放使用。

例子:

请求 DELETE /example.html HTTP/1.1
响应 响应返回状态码 204 No Content (比如:该 html 已从该服务器上删除)

OPTIONS:询问支持的方法

例子:

请求 OPTIONS * HTTP/1.1
Host:www.hackr .jp
响应 HTTP/1.1 200 OK
Allow: GET, POST, HEAD, OPTIONS(返回服务器支持的方法)

TRACE:追踪路径

  • 让 Web 服务器端将之前的请求通过通信回环给客户端的方法。
  • 在 Max-Forwards 首部字段中填入数值,每经过一个服务器就将该数字减1,当数字减到 0 时,就返回状态码 200 OK 的响应。
  • 客户端通过 TRACE 方法查询发送出去的请求是怎样被加工修改/篡改的。因为请求连接到源目标服务器可能会通过代理中转,TRACE 方法就是用来确认连接过程中发生的一系列操作。
  • 不常用。易引发 XST(Cross-Site Tracing,跨站追踪)攻击。

例子:

请求 TRACE / HTTP/1.1
Host: hackr.jp
Max-Forwards:2
响应 HTTP/1.1 200 OK
Content-Type: message/http

TRACE / HTTP/1.1
Host: hackr.jp
Max-Forwards:2 (返回响应包含的请求内容)

CONNECT:要求要用隧道协议连接代理

  • 要求在与代理服务器通信时建立隧道,实现用隧道协议进行 TCP 通信。
  • 主要使用 SSL (Secure Sockets Layer,安全套接层) 和 TLS(Transport Layer Security,传输层安全)协议把通信内容加密后经网络隧道传输。
  • 语法格式:CONNECT 代理服务名:端口号 HTTP版本

例子:

请求 CONNECT proxy.hackr.jp:8080 HTTP/1.1
Host: proxy.hackr.jp
响应 HTTP/1.1 200 OK(之后进入网络隧道)

使用方法下达命令

  • 向请求 URI 制定的资源发送请求报文时,采用成为方法的命令。
  • 方法的作用在于,可以指定请求的资源按期望产生某种行为。方法中有 GET、POST 和 HEAD 等。

支持的方法

方法 说明 支持的 HTTP 协议版本
GET 获取资源 1.0、1.1
POST 传输实体主体 1.0、1.1
PUT 传输文件 1.0、1.1
HEAD 获取报文首部 1.0、1.1
DELETE 删除文件 1.0、1.1
OPTIONS 询问支持的方法 1.1
TRACE 追踪路径 1.1
CONNECT 要求用隧道协议连接代理 1.1
LINK 建立和资源之间的联系 1.0
UNLINE 断开连接关系 1.0

持久连接节省通信量

  • 之前的情况:每进行一次 HTTP 通信就要断开一次 TCP 连接。

持久连接

  • 持久连接(HTTP Persistent Connections),也称为 HTTP keep-alive 或 HTTP connection reuse。
  • 特点:只要任意一端没有明确提出断开连接,则保持 TCP 连接状态。
  • 在 HTTP/1.1 中所有的连接默认都是持久连接。

管线化

  • 使用管线化技术,不用等待响应即可直接发送下一个请求

使用 Cookie 的状态管理

  • HTTP 协议,无协议也有好处,简单才会被更多的应用。

Cookie 技术:通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态。

Cookie 会根据从服务器端发送的响应报文内的一个叫 Set-Cookie 的首部字段信息,通知客户端保存 Cookie。

下次再客户端再往该服务器发送请求时,客户端会自动再请求报文中加入 Cookie 值后发送出去。

  • HTTP 请求报文和响应报文内容如下:

1.请求报文(没有 Cookie 信息的状态)


GET /reader/ HTTP/1.1

Host: hackr.jp

  • 首部字段内没有 Cookie 的相关信息

2.响应报文(服务器端生成 Cookie 信息)


HTTP /1.1 200 OK

Date: Tue, 1 Jan 2020 08:10:01 GMT

Sever: Apache

<Set-Cookie:sid=13420770140226734; pa+10-jan-11 08:10:01 GMT>

content-Type: text/plain; charaset=UTF-8


3.请求报文


GET /image/ HTTP/1.1

Host: hackr.jp

Cookie: sid=1342077140226724

《图解 HTTP》 摘要一的更多相关文章

  1. 【图解HTTP】笔记摘要

    第1章 了解Web及网络基础 根据Web浏览器(Web客户端)地址栏中指定的URL,Web浏览器从Web服务器端获取文件资源(resource)等信息,从而显示出Web页面. CERN(欧洲核子研究组 ...

  2. 《图解HTTP》摘要

    网络基础TCP/IP 使用Cookie进行状态管理 HTTP首部 确保Web安全的HTTPS 1.网络基础TCP/IP 2.使用Cookie进行状态管理:HTTP是无状态协议. 3.HTTP首部 HT ...

  3. 加密算法大全图解 :密码体系,对称加密算法,非对称加密算法,消息摘要, Base64,数字签名,RSA,DES,MD5,AES,SHA,ElGamal,

    1. 加密算法大全: ***************************************************************************************** ...

  4. 《图解HTTP》读书笔记

    目前国内讲解HTTP协议的书是在太少了,记忆中有两本被誉为经典的书<HTTP权威指南>与<TCP/IP详解,卷1>,但内容晦涩难懂,学习难度较大.其实,HTTP协议并不复杂,理 ...

  5. 用 Wireshark 图解:TCP 三次握手

    摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “snow warn throughout the winter” 一.什么是 Wireshar ...

  6. Android压力测试快速入门教程(图解)——Monkey工具

    文章目录: 一.Monkey简介 二.Monkey的基本用法 三.Monkey测试示例图解 四.Monkey命令参数介绍 五.Monkey log分析 一.Monkey简介 Monkey:Androi ...

  7. 【转载】图解:二叉搜索树算法(BST)

    原文:图解:二叉搜索树算法(BST) 摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢!“岁月极美,在于它必然的流逝”“春花 秋月 夏日 冬雪”— ...

  8. 转:在ElasticSearch之下(图解搜索的故事)

    ElasticSearch 2 (9) - 在ElasticSearch之下(图解搜索的故事) 摘要 先自上而下,后自底向上的介绍ElasticSearch的底层工作原理,试图回答以下问题: 为什么我 ...

  9. Orm图解教程

    entity framework框架生成摘要文档为空(没有元数据文档可用)的bug解决方案 西安.王磊 2012-10-25 10:47 阅读:1234 评论:2   ORM for Net主流框架汇 ...

随机推荐

  1. 1044 Shopping in Mars (25分)(二分查找)

    Shopping in Mars is quite a different experience. The Mars people pay by chained diamonds. Each diam ...

  2. python使用阿里云oss-sdk

    python使用阿里云oss-python-sdk 请访问github获取源码 安装 pip install oss2 安装验证 >>> import oss2 >>&g ...

  3. 让 .NET 轻松构建中间件模式代码

    让 .NET 轻松构建中间件模式代码 Intro 在 asp.net core 中中间件的设计令人叹为观止,如此高大上的设计何不集成到自己的代码里呢. 于是就有了封装了一个简单通用的中间件模板的想法, ...

  4. WordPress快速增加百度收录,加快网站内容抓取

    本文已同步到专业技术网站 www.sufaith.com, 该网站专注于前后端开发技术与经验分享, 包含Web开发.Nodejs.Python.Linux.IT资讯等板块. 利用百度站长平台提供的链接 ...

  5. bit/byte/ascii/unicode

    bit(位).byte(字节).ASCII.Unicode 和 UTF-8位和字节的关系bit 电脑记忆体中最小的单位,在二进位电脑系统中,每一bit 可以代表0 或 1 的数位讯号byte一个byt ...

  6. 11-Json提取器使用

    1.使用json提取关键信息 有时候接口返回数据为json数据或者直接为一个列表,可使用这个更简单快捷 json数据: 这样的,数据有在result里面以列表形式存在,也有在列表外的,可在json提取 ...

  7. Codeup 25609 Problem I 习题5-10 分数序列求和

    题目描述 有如下分数序列 2/1,3/2,5/3,8/5,13/8,21/13 - 求出次数列的前20项之和. 请将结果的数据类型定义为double类型. 输入 无 输出 小数点后保留6位小数,末尾输 ...

  8. Continue 和 Break

    1.什么是continue和break continue:继续的.持续的 break:冲断的.折断的 作用:用于终止循环体,主要用于switch条件语句和循环体条件语句(for.while.do-wh ...

  9. F - Select Half dp

    题目大意:从n个数里边选n/2个数,问和最大是多少. 题解:这是一个比较有意思的DP,定义状态dp[i][1],表示选了第i个数的最优状态,dp[i][0]表示没有选第i个数的最优状态. 状态是如何转 ...

  10. react-devtools安装调试

    初学react,Chrome F12调试,需要一款插件react-devtools. 网上大多对于翻墙不利索的同学大多才用了git源码.npm本地手动打包Chrome拓展程序.如:https://ww ...