Skip to content

Latest commit

 

History

History
149 lines (117 loc) · 9.18 KB

HTTP.md

File metadata and controls

149 lines (117 loc) · 9.18 KB

HTTP

*超文本传输协议*(HTTP)是一个用于传输超媒体文档(例如 HTML)的应用层协议。它是为 ==Web 浏览器==与 ==Web 服务器==之间的通信而设计的,但也可以用于其他目的。HTTP 遵循经典的客户端—服务端模型,客户端打开一个连接以发出请求,然后等待直到收到服务器端响应。HTTP 是无状态协议,这意味着服务器不会在两个请求之间保留任何数据(状态)。

http是什么?

http将客户端与服务端链接起来使得两者之间通信,其中客户端发出请求,服务端做出响应.

基于HTTP的组件系统

协议: 为了完成某一工作,要求两个或多个通信实体运行相同的协议

  • 在Internet中凡是涉及两个或多个远程通信实体的所有活动都受协议的制约.

  • 一个协议定义了在两个或多个通信实体之间交换的报文格式和次序,以及报文发送(或接收报文或其他事件)所采取的行动。

HTTP 是一个客户端—服务器协议:请求由一个实体,即用户代理(user agent),或是一个可以代表它的代理方(proxy)发出。

用户代理: User-Agent 简称"UA",网站通过识别"UA"来确定用户所使用的操作系统版本.CPU类型.浏览器版本等信息来给用户发送不同的页面

拓展:代理与VPN

代理服务器与VPN都可以隐藏自身的ip地址,其区别为:

代理服务器: 将你的IP地址换为代理服务器的IP地址,从而访问一些禁止某些国家访问的网页,可以快速破除网站屏蔽,但不能匿名浏览网站之外的目的,长期使用后会变得速度慢且不稳定.

工作原理:由代理服务器自己去访问你的目标网站,并加载它的内容,然后再把这些加载过的内容传递到你的窗口上。

VPN: 在向服务器传输数据时加密数据并传递给VPN服务器,称为"隧道",VPN可以屏蔽个人在互联网上的行为,在传输数据时代理并不能隐藏数据,尔VPN可以屏蔽所有人,VPN造价高,且会拖慢设备速度.

工作原理: 在VPN服务下,你传输的信息会先经过VPN服务器(加密),然后再抵达目的地,反过来的接收过程也是一样。

客户端:用户代理

用户点击或进行页面操作来访问浏览器数据

Web服务端

提供客户端所请求的文档,一个服务器可以有多个服务端软件实例,利用HTTP/1.1和houst标头

代理

一些计算机和设备在应用层参与消息的传递,一般被成为代理(Proxy)代理可以是透明的也可以时不透明的,作用有:

  • 缓存(公开/私有)
  • 过滤(反病毒扫描等)
  • 负载均衡:让多个服务器服务不同的请求
  • 认证: 控制对不同资源的访问
  • 日志:使代理可以存储历史信息

HTTP的性质

简约

设计简约

可拓展

易添加新功能

无状态下并非无对话

HTTP无状态: 在同一个连接中,两个执行成功的请求之间是没有关系的.用户可以借助HTTP Cookie 使用有状态的会话.

HTTP和网络连接

在互联网两个最常用的传输层协议中,TCP 是可靠的而 UDP 不是。HTTP 因此而依靠于 TCP 的标准,即面向链接的。

在客户端与服务端能够传递请求、响应之前,这两者间必须建立一个 TCP 链接,这个过程需要多次往返交互。HTTP/1.0 默认为每一对 HTTP 请求/响应都打开一个单独的 TCP 连接。当需要接连发起多个请求时,工作效率相比于它们之间共享同一个 TCP 连接要低。

TCP(传输控制协议)与UDP(用户数据报协议)的区别:

  • TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。

    一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂, 只简单的描述下这三次对话的简单过程:

    1)主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话;

    2)主机B向主机A发送同意连接和要求同步 (同步就是两台主机一个在发送,一个在接收,协调工作)的数据包 :“可以,你什么时候发?”,这是第二次对话;

    3)主机A再发出一个数据包确认主机B的要求同步:“我现在就发,你接着吧!”, 这是第三次对话。

    三次“对话”的目的是使数据包的发送和接收同步, 经过三次“对话”之后,主机A才向主机B正式发送数据。

    TCP三次握手过程

    第一次握手:主机A通过向主机B 发送一个含有同步序列号的标志位的数据段给主机B,向主机B 请求建立连接,通过这个数据段, 主机A告诉主机B 两件事:我想要和你通信;你可以用哪个序列号作为起始数据段来回应我。

    第二次握手:主机B 收到主机A的请求后,用一个带有确认应答(ACK)和同步序列号(SYN)标志位的数据段响应主机A,也告诉主机A两件事:我已经收到你的请求了,你可以传输数据了;你要用那个序列号作为起始数据段来回应我

    第三次握手:主机A收到这个数据段后,再发送一个确认应答,确认已收到主机B 的数据段:"我已收到回复,我现在要开始传输实际数据了,这样3次握手就完成了,主机A和主机B 就可以传输数据了。

    3次握手的特点

    没有应用层的数据 ,SYN这个标志位只有在TCP建立连接时才会被置1 ,握手完成后SYN标志位被置0。\

    TCP建立连接要进行3次握手,而断开连接要进行4次

    第一次: 当主机A完成数据传输后,将控制位FIN置1,提出停止TCP连接的请求 ;

    第二次: 主机B收到FIN后对其作出响应,确认这一方向上的TCP连接将关闭,将ACK置1;

    第三次: 由B 端再提出反方向的关闭请求,将FIN置1 ;

    第四次: 主机A对主机B的请求进行确认,将ACK置1,双方向的关闭结束.。

    名词解释

    1、ACK 是TCP报头的控制位之一,对数据进行确认。确认由目的端发出, 用它来告诉发送端这个序列号之前的数据段都收到了。 比如确认号为X,则表示前X-1个数据段都收到了,只有当ACK=1时,确认号才有效,当ACK=0时,确认号无效,这时会要求重传数据,保证数据的完整性。

    2、SYN 同步序列号,TCP建立连接时将这个位置1。

    3、FIN 发送端完成发送任务位,当TCP完成数据传输需要断开时,,提出断开连接的一方将这位置1。

  • UDP是一个非连接的协议,传输数据之前源端和终端不建立连接, 当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。 在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、 计算机的能力和传输带宽的限制; 在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。

    • 一台服务可同时向多个客户机传输相同的信息
    • UDP信息报的标题很短,相对于TCP的20个字节信息包的额外开销小
    • 吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、 源端和终端主机性能的限制。
    • UDP使用尽最大努力交付,即不保证可靠交付, 因此主机不需要维持复杂的链接状态表
    • UDP是面向报文的。发送方的UDP对应用程序交下来的报文, 在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界, 因此,应用程序需要选择合适的报文大小。

    来源

区别:

1) TCP是面向连接的,可靠性高;UDP是基于非连接的,可靠性低 2) 由于TCP是连接的通信,需要有三次握手、重新确认等连接过程,会有延时,实时性差,同时过程复杂,也使其易于攻击;UDP没有建立连接的过程,因而实时性较强,也稍安全 3) 在传输相同大小的数据时,TCP首部开销20字节;UDP首部开销8字节,TCP报头比UDP复杂,故实际包含的用户数据较少。TCP在IP协议的基础上添加了序号机制、确认机制、超时重传机制等,保证了传输的可靠性,不会出现丢包或乱序,而UDP有丢包,故TCP开销大,UDP开销较小 4) 每条TCP连接只能时点到点的;UDP支持一对一、一对多、多对一、多对多的交互通信

应用场景选择

  • 对实时性要求高和高速传输的场合下使用UDP;在可靠性要求低,追求效率的情况下使用UDP;
  • 需要传输大量数据且对可靠性要求高的情况下使用TCP

HTTP能控制什么

可以被HTTP控制的常见特性