图解http读书笔记一——基础知识

网络基础tcp/ip

tcp/ip
- 计算机与网络设备需要通信,双方就必须基于相同方法,把这些规则成为协议。
- 协议中存在各种内容,如电缆规格,ip地址选定等
- 这些相关协议集合总称为tcp/ip

tcp/ip的分层管理
分为以下四层:应用层、传输层、网络层、数据链路层
层次化不关注对方如何实现

应用层:
决定了向用户提供应用服务时通信活动
比如ftp协议和dns服务,http协议也处于该层

传输层:
传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传输
有两个性质不同的协议:tcp和udp协议

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

链路层:
用来处理连接网络的硬件部分。

之间的关系图:
图解http读书笔记一——基础知识_第1张图片

其中具体的实现我们用http来举例子说明:
客户端在应用层发出一个想看某个web页面的http请求,然后,为了传输方便,在传输层(tcp协议)把从应用层接收到的数据http请求报文,进行分割,并在各个报文上标记序号和端口号转发给网络层,在网络层(ip协议),增加作为通信目的地的mac地址后,转发给链路层,这样,通信请求就准备齐全了。

图解http读书笔记一——基础知识_第2张图片

发送端,每经过一层必然打上该层所属的首部信息。

ip,tcp和dns 协议

ip协议:位于网络层,保证确实将数据包传输给对方。

  • ip地址时节点被分配到的地址,mac地址时网卡所属固定地址,ip可改变,mac基本不变。
  • arp协议可以解析ip地址查出对应的mac地址,通信时往往需要中转,会利用下一站的mac地址来搜索下一个中转目标

tcp协议:
位于传输层,为了更容易传输大数据而的协议:

  • 即将大块儿数据分割为报文段为单位的数据包进行管理
  • 可以通过三次握手确保数据到达目标
    图解http读书笔记一——基础知识_第3张图片

dns服务:
位于应用层,提供域名到ip地址之间的解析服务

总结:见图
图解http读书笔记一——基础知识_第4张图片

http协议

  • 位于应用层,用于客户端和服务器端之间的通信
  • 通过请求和响应的交换达成通信
  • 是不保存状态的协议
  • 请求uri定位资源
  • 告知服务器意图的http方法
    get :获取资源,用来请求访问已被uri识别的资源
    。。。。post,put..。等方法需要在体会
    - 持久连接节省通信量
    http初始版本,每进行一次http通信就要断开一次tcp,当请求的资源大的时候(如图片,多文本),需要不停的通信,浪费,于是http1.1后,提出了持久连接,即任意一端没有提出断开,则保持tcp连接,减少了tcp重复建立连接的开销。
    然后持久化使得管线化成为可能,即同时并行发送多个请求,而不需要一个一个等待响应了
    见下图的演变
    图解http读书笔记一——基础知识_第5张图片
    即每次都需要重建
    图解http读书笔记一——基础知识_第6张图片
    持久化后(我认为其实就是connection的一个字段值的默认值改变)
    图解http读书笔记一——基础知识_第7张图片
    管线化后
    图解http读书笔记一——基础知识_第8张图片

cookie由来

http是无状态协议,不对之前发生过的请求和响应的状态进行管理,由于不必保存状态,可以减少服务器cpu和内存的使用。从某方面来说,正是因为这个原因,才会被应用到各种场景中。
但是这个特征似的需要web登录认证的页面无法进行状态管理,每次跳转就要再次登陆,为了解决这个矛盾,加入了cookie技术,通过在请求和响应报文中写入cookie信息来控制客户端状态。

cookie的过程

cookie会根据从服务器端发送的响应报文内的几个叫做set-cookie的首部字段信息,通知客户端自动在请求报文中加入cookie值后发送出去。

服务器端发现客户端发送过来的cookie后,会去检查究竟是从哪个客户端发来的连接请求,然后对比服务器上的记录,得到之前的状态信息。

见下图:
图解http读书笔记一——基础知识_第9张图片
图解http读书笔记一——基础知识_第10张图片

http报文内的http信息

图解http读书笔记一——基础知识_第11张图片
图解http读书笔记一——基础知识_第12张图片

报文首部:服务器端或客户端需处理的请求或响应的内容及属性
空行:回车符和换行符
报文主体:应该被发送的数据

报文首部:
请求行:包含请求的方法,请求uri和http版本
状态行:响应结果的状态码,原因短语和http版本
首部字段:包含请求和响应的各种条件和属性的各类首部
其他:可能包含http中rfc未定义的首部 如cookie等
rfc:http协议用来制定标准技术的文档
报文首部其实就是各种状态和属性

http状态码

报文状态码告知从服务端返回的请求结果
状态码如 200 ok 三位数字+原因短语
类别
图解http读书笔记一——基础知识_第13张图片
例子:
200 ok
比如使用get方法,对应请求资源的实体会作为响应返回

206 partial content
表示客户端进行了范围请求,而服务器成功执行了这部分的get请求,响应豹纹中包含由content-range指定范围的实体内容

与http协作的web服务器

单台虚拟主机实现多个域名

域名通过dns服务映射到ip地址,可见,当请求发送到服务器的时候,已经是以ip地址形式访问了。
所以,如果一台服务器内托管了多个域名,那么当收到请求的时候就要弄清楚究竟访问哪个域名(dns后映射到同一个ip地址)。
所以在发送http请求的时候,必须在host首部内完整指定主机名或域名的uri。

通信数据转发程序:代理、网关、隧道

http通信时,除了客户端和服务器外,还有一些用于通信数据转发的程序,他们可以配合服务器工作。

这些应用程序可以将请求转发给通信线路上的下一站服务器,并能从那台服务器发送的响应再转发给客户端

代理:代理基本行为就是转发请求和响应,不会改变请求uri
图解http读书笔记一——基础知识_第14张图片

转发时候 ,需要附加via首部,标记经过的主机信息

使用代理的场景: 利用缓存技术减少网络带宽流量等

缓存代理(catching proxy):预先将资源的副本缓存在代理服务器上
当再次接收到对相同资源的请求,就可以不用从源服务器哪里获取资源

网关:
利用网关可以使通信线路伤的服务器提供非http协议服务,可以提高安全性
场景:连接数据库等

缓存服务器

缓存服务器是代理的一种,当代理转发从服务器返回的响应时候,代理服务器将会保存一份资源的副本。

源服务器不必多次处理相同请求

当然, 缓存也是有期限的,过期后依旧需要重新向源服务器发出请求。

客户端的缓存

缓存还可以存在与客户端浏览器中,ie浏览器将其称为临时网络文件。
缓存如果有效,可直接从本地磁盘内读取。

http首部

http协议的请求和响应报文中必定包含http首部。首部内容为客户端和服务器分别处理请求和响应提供所需要的信息。

http请求报文

由请求行(方法,uri,http版本)、http首部字段(请求首部字段、通用首部字段、实体首部字段)构成

http响应报文

由状态行(http版本、状态码)、http首部字段(响应首部字段、通用首部字段、实体手部字段)构成

http首部字段

是报文的要素之一,传递了重要信息,为浏览器和客户端提供报文主体大小、所使用语言、认证信息等等。

结构:
首部字段名:字段值

四种http首部字段类型:
通用首部字段:请求报文和响应报文都会用
请求首部字段:请求报文时使用的首部。补充了请求的附加内容、客户端信息、响应内容相关优先级等信息
响应首部字段: 补充了响应的附加内容,也会要求客户端附加额外的内容信息

实体首部字段:针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体有关的信息。

http首部字段一览
图解http读书笔记一——基础知识_第15张图片

图解http读书笔记一——基础知识_第16张图片

图解http读书笔记一——基础知识_第17张图片

非http1.1首部字段

在http通信中使用的首部字段,不限于rfc2616中定义的。还有包括cookie,set-cookie等在其他rfc中定义的首部

http1.1通用首部字段
cache-control:操作缓存的工作机制
表示能否缓存的指令:
cache-control:public 表示其他用户也可以利用缓存
private:特定用户
。。。还有许多指令
图解http读书笔记一——基础知识_第18张图片

图解http读书笔记一——基础知识_第19张图片

cache-control扩展:
cache-extension token

cache-control:private,community="uci"

如上,cache-control手部字段本身没有community这个指令,借助extension tokens实现了指令的添加,如果缓存服务器不能理解这个指令,那么就会直接忽略它。因此,extension tokens仅能对理解他的缓存服务器来说时有意义的

connection指令:
控制代理不再转发的首部字段
图解http读书笔记一——基础知识_第20张图片

connection:不再转发的首部字段名

管理持久连接:
http1.1版本默认连接都是持久连接。为此,客户端会在持久连接上连续发送请求。当服务器想断开时,指定connection手部字段为close
而http1.1之前 默认为close,

data:
手部字段data表明创建http报文的日期和时间

。。。还有许多通用字段此处不一一介绍

请求首部字段

accept :
accept首部可通知服务器,用户代理能够处理的媒体类型及其相对优先级

accept:text/html,application/xhtml+xml,
  • 文本文件:text/html,text/plain,application/xhtml+xml,application/xml
  • 图片:image/jpeg,image/gif

即根据浏览器支持的格式来设定

。。还有许多其他请求首部不一一介绍

响应首部字段

accept-ranges:

accept-ranges:bytes

用来告知客户端服务器是否能处理范围请求,以指定获取服务器端某个部分的资源

字段值 none bytes
其余字段不一一介绍,有需要直接百度

实体首部字段

即请求和响应报文中实体部分的首部字段

allow:

allow:get,head

用于通知客户端能够支持request-uri指定资源的所有http方法,
即服务器告诉客户端,从这里获得uri资源的method

其余字段请查询。。

为cookie服务的首部字段
看下图即刻明白:
图解http读书笔记一——基础知识_第21张图片

set-cookie
当服务器开始管理客户端,会告知其各种信息
字段值:
图解http读书笔记一——基础知识_第22张图片

图解http读书笔记一——基础知识_第23张图片

其他首部字段
此处不赘述。。。需要请百度

后面的安全部分~敬请期待

你可能感兴趣的:(网络技术,读书笔记)