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

  GET POST
后退按钮/刷新 无害 数据会被重新提交(浏览器应该告知用户数据会被重新提交)。
书签 可收藏为书签 不可收藏为书签
缓存 能被缓存 不能缓存
编码类型 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 种类型

通用首部字段

请求首部字段

响应首部字段

实体首部字段

最新文章

  1. lua 时间戳和时间互转
  2. Delphi 控件大全
  3. 算法:x的n次方
  4. mysql取代rand()的高效率随机读取方法
  5. IOS, xib和storyboard的混用
  6. Tmux 常用命令与快捷键
  7. ASP.NET MVC3细嚼慢咽---(3)Razor视图语法
  8. web服务器压力测试工具
  9. 慕课linux学习笔记(二)Xshell与虚拟机的连接
  10. 剑指offier第三题
  11. Android FragmentPagerAdapter和FragmentStatePagerAdapter的区别
  12. 一步一步重写 CodeIgniter 框架 (5) —— 实现Controller,并加载Model
  13. 关于storyboard的一点学习记录
  14. ThinkPHP3.2 常量参考
  15. useradd新建用户和权限分配
  16. sizeof与strlen的不同
  17. babel基本用法
  18. python11 函数的定义,调用,分类
  19. Codeforces Round #404 (Div. 2) D. Anton and School - 2
  20. 设计模式总结篇系列:装饰器模式(Decorator)

热门文章

  1. Redis集群部署与维护
  2. java如何获取当前日期和时间
  3. CNN-1: LeNet-5 卷积神经网络模型
  4. SQL-锁-事物级别
  5. GoF 的 23 种设计模式的分类和功能
  6. 【动态规划】Concerts
  7. oracle 数据库 主键索引重建
  8. (五)web服务中的异常处理
  9. Sql Server根据字符串拆分多列
  10. C#四种深拷贝方法(转载)