# HTTP网络协议

为了使不同计算机厂家生产的计算机能够相互通信,以便在更大的范围内建立计算机网络,国际标准化组织(ISO)在1978年提出了“开放系统互联参考模型”,即著名的OSI/RM模型(Open System Interconnection/Reference Model)。它将计算机网络体系结构的通信协议划分为七层,自下而上依次为:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。

(1)物理层:以太网、调制解调器、电力线通信(PLC)、SONET/SDH、光导纤维、同轴电缆、双绞线等

(2)数据链路层:Wi-Fi(IEEE 802.11)、WiMAX(IEEE 802.16)、ATM、令牌环、PPP、L2TP、PPTP等

(3)网络层协议:IP(IPv4、IPv6)、ICMP、ICMPv6、IGMP、IS-IS、IPsec、ARP、RARP等

(4)传输层协议:TCP、UDP、TLS、DCCP、SCTP、RSVP、OSPF等

(5)应用层协议:DNS、FTP、Gopher、HTTP、IMAP4、POP3、SIP、SSH、TELNET、RPC、SDP、SOAP、GTP等。

# HTTP网络协议的定义

把HTTP协议的官方定义进行归纳,得出HTTP协议的4个关键点:

(1)HTTP是建立在TCP/IP协议之上,面向应用层的超文本传输协议

(2)它由请求和响应组成,完全符合标准的客户端服务器的请求响应模型

(3)协议很轻便简单,并且请求与请求间没有关联,是无状态性的协议

(4)为了弥补这种无状态性就需要使用HTTP协议的扩展Cookie等方式建立关联。

# HTTP网络协议的原理

HTTP 协议工作于客户端-服务端的架构上,客户端通过URL向服务器发送所有请求,服务器根据接收到的请求,向客户端发送响应信息

URL主要有三个作用:

(1)HTTP是URL的方案,方案告诉客户端使用什么样的协议去访问服务器

(2)Host:www.example.com,指服务器的位置

(3)/index.html是资源路径,说明了请求的是服务器上哪个特定的本地资源。

# HTTP协议状态码

  • 200:代表你发送的请求成功了,服务端成功响应了你的请求。
  • 202:代表你发送的请求已接受,但服务端还未完成处理。
  • 301:你请求的资源已被永久地移动到新的URL,网页会跳转到新的地址。
  • 302:URL临时移动,与301类似。但资源只是临时被移动,客户端应继续使用原有URL。
  • 400:客户端请求的语法错误,服务器无法理解。
  • 403:资源不可用,服务器理解客户的请求,但拒绝处理它,通常是由于服务器上文件或目录的权限设置导致的Web访问错误。
  • 404:服务器无法根据客户端的请求找到资源(网页),也就是代表着你请求的资源(网页)不存在了。
  • 500:服务器的内部产生了错误,无法完成客户端的请求。
  • 501:服务器不具备完成请求的功能,无法完成此请求。

# Session和Cookie

由于HTTP是一个无状态协议,客户端每次发出请求时,本次请求无法得知上一次请求的状态信息。在常见的网站中,服务端需要在多次HTTP请求间共享数据。Session是在服务端保存的数据,Cookie是在客户端浏览器中保存的数据,它们一起合作,来实现跨HTTP请求的数据共享。

# get和post的区别

  1. 区别一:对请求参数的处理方式不同(直观的区别)
  • GET请求:请求的数据会附加在URL之后,以“?”分隔URL和传输数据,如有多个参数则用“&”连接。URL采用的是ASCII编码格式,而不是Unicode编码格式,即所有的非ASCII字符都要在编码之后再传输。

举例:https://www.v2ex.com/api/nodes/show.JSON?name=Python

  • POST请求:POST请求会把请求的数据放置在HTTP请求包的Body数据中,数据包的形式可以是“参数名1=参数值1&参数名2=参数值2”,也可以是JSON格式(键值对)。当然,JSON格式是一种通用的方式。

举例:http://192.168.1.171:8081/api/user_sign/

Body数据:{"time":"1499933825","sign":"deb697c7fffcca828a7a03a218b2cda5"}

  1. 区别二:传输数据的大小不同HTTP没有对传输数据的大小进行限制,也没有对URL的长度进行限制。而在实际的程序开发中,存在以下限制。
  • GET:特定浏览器和服务器对URL的长度有限制。例如,IE对URL长度的限制是2083Byte(2×1024Byte+35Byte)。其他浏览器(如Netscape、FireFox等)在理论上没有长度的限制,其限制取决于操作系统的支持。因此,在采用GET方式提交数据时,传输数据会受到URL长度的限制。
  • POST:由于不是通过URL传值,在理论上数据的大小不受限制。但实际上,各个Web服务器会对采用POST方式提交的数据的大小进行限制,例如,Apache、IIS6都有各自的配置。
  1. 区别三:安全性不同POST方式的安全性比GET方式的安全性高。
  • 使用GET方式时,在地址栏里可以直接看到请求数据,采用这种方式可能受到Cross-site request forgery攻击
  • POST方式需要抓包才能获取到数据,变相地提高了安全性
上次编辑时间: 2020/9/18 上午9:17:07