《图解HTTP》笔记1

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

HTTP 通常被译为超文本传输协议,但这种译法并不严谨。严谨的译名应该为“超文本转移协议”。

通过发送请求获取服务器资源的 Web 浏览器等,都可称为客户端(client)。

1.TCP/IP

TCP/IP 是互联网相关的各类协议族的总称。

像这样把与互联网相关联的协议集合起来总称为 TCP/IP。也有说法认为,TCP/IP 是指 TCP 和 IP 这两种协议。还有一种说法认为,TCP/IP 是在 IP 协议的通信过程中,使用到的协议族的统称。

TCP/IP 协议族里重要的一点就是分层。TCP/IP 协议族按层次分别分为以下 4 层:应用层、传输层、网络层和数据链路层。

应用层决定了向用户提供应用服务时通信的活动。

OSI参考模型与TCP/IP模型

 

TCP协议和UDP协议的区别和联系

https://www.jianshu.com/p/c91c96c8442e

TCP(传输控制协议)UDP(用户数据报协议)
TCP是面向连接的协议,在正式收发数据前,必须和对方建立可靠的连接 UDP是面向非连接的协议,不用与对方建立连接,而是直接把数据报发送出去
TCP的传输是可靠传输,提供超时重发、丢弃重复数据、检验数据、流量控制等功能,保证数据能从一端传到另一端 UDP的传输是不可靠传输,只是把应用程序传给IP层的数据报发送出去,但是并不能保证一定被接收
TCP占用系统资源较多,负载较大 UDP占用系统资源较少,负载较小
TCP在发送数据前通信双方有一个三次握手机制,确保双方准备好,在传输数据期间,TCP会根据链路中数据流量的大小来调节传送的速率,传输时如果发现丢包,则会有严格的重发机制,故而传输速度很慢 UDP在传输数据报前不用在客户端和服务器之间建立连接,且没有超时重发等机制,故而传输速度很快

 2.IP与IP地址是不一样的

TCP/IP 协议族中的 IP 指的就是网际协议,协议名称中占据了一半位置,其重要性可见一斑。可能有人会把“IP”和“IP 地址”搞混,“IP”其实是一种协议的名称。

IP 协议的作用是把各种数据包传送给对方。而要保证确实传送到对方那里,则需要满足各类条件。其中两个重要的条件是 IP 地址和 MAC地址(Media Access Control Address)。
IP 地址指明了节点被分配到的地址,MAC 地址是指网卡所属的固定地址。IP 地址可以和 MAC 地址进行配对。IP 地址可变换,但 MAC地址基本上不会更改。

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

3.TCP三次握手

(之前在网上看的资料,看完就忘了,这个分析的很清楚、简洁,一下就明白了原理,果然有时候看书比网上搜资料更靠谱)

TCP 协议采用了三次握手(three-way handshaking)策略。用 TCP 协议把数据包送出去后,TCP不会对传送后的情况置之不理,它一定会向对方确认是否成功送达。
握手过程中使用了 TCP 的标志(flag) —— SYN(synchronize,同步序列编号) 和ACK(acknowledgement,确认字符)。

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

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

4.DNS

计算机既可以被赋予 IP 地址,也可以被赋予主机名和域名。比如www.baidu.com
用户通常使用主机名或域名来访问对方的计算机,而不是直接通过 IP地址访问。因为与 IP 地址的一组纯数字相比,用字母配合数字的表示形式来指定计算机名更符合人类的记忆习惯。

但要让计算机去理解名称,相对而言就变得困难了。因为计算机更擅长处理一长串数字。为了解决上述的问题,DNS 服务应运而生。

DNS 协议提供通过域名查找 IP 地址,或逆向从 IP 地址反查域名的服务。

5.URI 和 URL

  • URI(统一资源标识符)
  • URL(UniformResource Locator,统一资源定位符)

URI 就是由某个协议方案表示的资源的定位标识符。协议方案是指访问资源所使用的协议类型名称。
采用 HTTP 协议时,协议方案就是 http。除此之外,还有 ftp、mailto、telnet、file 等。标准的 URI 协议方案有 30 种左右。

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

以下列举了几种URI例子

ftp://ftp.is.co.za/rfc/rfc1808.txt
http://www.ietf.org/rfc/rfc2396.txt
ldap://[2001:db8::7]/c=GB?objectClass?one
mailto:John.Doe@example.com
news:comp.infosystems.www.servers.unix
tel:+1-816-555-1212
telnet://192.0.2.16:80/
urn:oasis:names:specification:docbook:dtd:xml:4.1.2

6.GET和POST

GET :获取资源

通常用于请求服务器发送某个资源

POST:传输实体主体 

向服务器发送表单数据

POST方法期初是用来向服务器输入数据的。实际上,通常会用它来支持HTML的表单。表单中填好的数据通常会被送给服务器,然后由服务器将其发送到它要去的地方。

比较 GET 与 POST

 https://www.w3school.com.cn/tags/html_ref_httpmethods.asp

 GETPOST
后退按钮/刷新 无害 数据会被重新提交(浏览器应该告知用户数据会被重新提交)。
书签 可收藏为书签 不可收藏为书签
缓存 能被缓存 不能缓存
编码类型 application/x-www-form-urlencoded application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。
历史 参数保留在浏览器历史中。 参数不会保存在浏览器历史中。
对数据长度的限制 是的。当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。 无限制。
对数据类型的限制 只允许 ASCII 字符。 没有限制。也允许二进制数据。
安全性

与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。

在发送密码或其他敏感信息时绝不要使用 GET !

POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。
可见性 数据在 URL 中对所有人都是可见的。 数据不会显示在 URL 中。

7.Cookie

HTTP 是无状态协议,它不对之前发生过的请求和响应的状态进行管理。也就是说,无法根据之前的状态进行本次的请求处理。

HTTP/1.1 虽然是无状态协议,但为了实现期望的保持状态功能,于是引入了 Cookie 技术。有了 Cookie 再用 HTTP 协议通信,就可以管理状态了。

Cookie是当前识别用户,实现持久会话的最好方式。

1) cookie的类型
      可以笼统地将cookie分为两类:会话cookie和持久cookie。会话cookie是-一种临时cookie,它记录了用户访问站点时的设置和偏好。用户退出浏览器时,会话cookie就被删除了。持久cookie的生存时间更长一些,它们存储在硬盘上,浏览器退出,计算机重启时它们仍然存在。通常会用持久cookie维护某个用户会周期性访问的站点的配置文件或登录名。
      会话cookie和持久cookie之间唯--的区别就是它们的过期时间。

8.请求报文和响应报文

首部字段
包含表示请求和响应的各种条件和属性的各类首部。

请求报文

 响应报文

9.状态码

状态码告知从服务器端返回的请求结果

状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结果。借助状态码,用户可以知道服务器端是正常处理了请求,还是出现了错误。

状态码如 200 OK,以 3 位数字和原因短语组成。
数字中的第一位指定了响应类别,后两位无分类。响应类别有以下 5种。

  

10.代理

代理是一种有转发功能的应用程序,它扮演了位于服务器和客户端“中间人”的角色,接收由客户端发送的请求并转发给服务器,同时也接收服务器返回的响应并转发给客户端。

使用代理服务器的理由有:利用缓存技术(稍后讲解)减少网络带宽的流量,组织内部针对特定网站的访问控制,以获取访问日志为主要目的,等等。
代理有多种使用方法,按两种基准分类。一种是是否使用缓存,另一种是是否会修改报文。
缓存代理
代理转发响应时,缓存代理(Caching Proxy)会预先将资源的副本(缓存)保存在代理服务器上。
当代理再次接收到对相同资源的请求时,就可以不从源服务器那里获取资源,而是将之前缓存的资源作为响应返回。

11.HTTP 请求报文

在请求中,HTTP 报文由方法、URI、HTTP 版本、HTTP 首部字段等部分构成。

12.HTTP首部字段

常见的首部实例

1)Date  创建报文的日期时间

  首部字段 Date 表明创建 HTTP 报文的日期和时间。

2)Content-length  实体主体的大小(单位:字节)

首部字段 Content-Length 表明了实体主体部分的大小(单位是字节)。

3)Content-type  实体主体的媒体类型

首部字段 Content-Type 说明了实体主体内对象的媒体类型。

4)Accept  用户代理可处理的媒体类型

Accept 首部字段可通知服务器,用户代理能够处理的媒体类型及媒体
类型的相对优先级。

下面我们试举几个媒体类型的例子。
1)文本文件
text/html, text/plain, text/css ...
application/xhtml+xml, application/xml ...
2)图片文件
image/jpeg, image/gif, image/png ...
3)视频文件
video/mpeg, video/quicktime ...
4)应用程序使用的二进制文件
application/octet-stream, application/zip ...
比如,如果浏览器不支持 PNG 图片的显示,那 Accept 就不指定image/png,而指定可处理的 image/gif 和 image/jpeg 等图片类型。

当服务器提供多种内容时,将会首先返回权重值最高的媒体类型。

 七种常见的用来承载用户相关信息的HTTP请求首部

From首部包含了用户的E-mail地址。每个用户都有不同的E-mail地址,所以在理想情况下,可以将这个地址作为可行的源端来识别用户。但由于担心那些不讲道德的服务器会搜集这些E-mail地址,用于垃圾邮件的散发,所以很少有浏览器会发送From首部。实际上,  From首部是由自动化的机器人或蜘蛛发送的,这样在出现问题时,网管还有个地方可以发送愤怒的投诉邮件。

User-Agent首部可以将用户所用浏览器的相关信息告知服务器,包括程序的名称和版本,通常还包含操作系统的相关信息。要实现定制内容与特定的浏览器及其属性间的良好互操作时,这个首部是非常有用的,但它并没有为识别特定的用户提供太多有意义的帮助。

Referer首部提供了用户来源页面的URL。Referer首部自身并不能完全标识用户,但它确实说明了用户之前访问过哪个页面。通过它可以更好地理解用户的浏览行为。

HTTP 首部字段根据实际用途被分为以下 4 种类型

通用首部字段

 请求首部字段

 响应首部字段

 实体首部字段

原文地址:https://www.cnblogs.com/songsongblue/p/11616242.html