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

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. Debug 是门艺术

    最近想结合发生在身边码农身上的一些小故事,尝试表达一个观点“Coding 是门技术,Debug 是门艺术”. 上期的分享<Coding 是门技术>主要通过引入身边 Code farmer ...

  2. markdown中锚链接实现目录跳转以及注意事项

    当文章有分类,需要快速阅读,通常会先在文首部写一个目录,点击可以跳转. 为文章写目录,特别在文章较长的时候,有助于对内容的整体把握,能提高阅读效率. 以下,将写一个基本的锚目录demo,然后特别说明需 ...

  3. String 对象-->charCodeAt() 方法

    1.定义和用法 获取指定下标的字符的ASCII码(Unicode) 返回值:0~65535之间的整数 语法: string.charCodeAt(index) 参数: index:指定字符的下标 举例 ...

  4. 科技发展时间线(Technology Timeline)

    本文主要记录,过去两百年间,科技发展的时间线 这些内容,是自己在学习电脑发展历史的时候做的, 感兴趣的同学,可以复制到 Excel 里面,按顺序逐一进行学习, 学习和整理的过程确实花了很长时间,但是并 ...

  5. AJ学IOS 之小知识之xcode6自动提示图片插件 KSImageNamed的安装

    AJ分享,必须精品 一:首先看效果 KSImageNamed是让XCode能预览项目中图片的插件 很牛逼,据说写这个插件的牛人在日本~ 主要针对imageNamed:方法 效果如图: 安装: 首先需要 ...

  6. 2019-07-31【机器学习】无监督学习之聚类 K-Means算法实例 (图像分割)

    样本: 代码: import numpy as np import PIL.Image as image from sklearn.cluster import KMeans def loadData ...

  7. Android传感器--光照传感器使用

    Android 设备中有许多传感器,其中有一个传感器控制着你屏幕亮度的变化.当你在很暗的地方使用手机,你设备的屏幕会自动调暗,从而保护你眼睛. 起着这样作用,Android是通过一款光照传感器来获取你 ...

  8. Simple Chat Application for Python

    一.知识点介绍: asyncore .asynchat模块使用 由于 Python 是一门带 GIL 的语言,所以在 Python 中使用多线程处理IO操作过多的任务并不是很好的选择.同时聊天服务器将 ...

  9. 绝地求生模拟登陆!高难度JS解密教程,Python高级爬虫开发,

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取htt ...

  10. python实现双向链表的操作

    双向链表 双向链表又叫做双链表,每个节点有两个指针域和一个数据域.prev指针域指向前一个节点,next指针域指向下一个节点.注意,第一个节点的prev指针域指向空值,最后一个节点的next域也是指向 ...