HTTP是一个客户端终端和服务器端请求和应答的标准。通过使用浏览器、网络爬虫或者其它的工具,客户端发起一个HTTP请求到服务器上指定端口(默认端口为80)。我们称这个客户端为用户代理程序(user agent)。应答的服务器上存储着一些资源,比如HTML文件和图像。我们称这个应答服务器为源服务器(origin server)。在用户代理和源服务器中间可能存在多个“中间层”,比如代理服务器、网关或者隧道(tunnel)。
通常,由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如"HTTP/1.1 200 OK",以及返回的内容,如请求的文件、错误消息、或者其它信息。
响应码
1xx消息——请求已被服务器接收,继续处理
2xx成功——请求已成功被服务器接收、理解、并接受
3xx重定向——需要后续操作才能完成这一请求
4xx请求错误——请求含有词法错误或者无法被执行
5xx服务器错误——服务器在处理某个正确请求时发生错误
几个常用的具体响应码
200 请求成功
401 未验证
404 请求失败,网页未找到
http主要的版本是0.9、1.0、1.1、2(国际标准组织不再准备发布子版本,下一代是http/3)。http是基于TCP/IP的应用层协议,主要规定了客户端与服务器之间的通信格式,并不涉及数据包的传输。
HTTP/1.1是1997年发布到目前为止最流行的,它的最大特点是持久化连接(即TCP默认不关闭,可以被多个请求复用而不用声明),还有管道机制(即同一个TCP中可以同时发送多个请求)。另外还增加了PUT,PATCH,HEAD,OPTIONS,DELETE方法。
HTTP/2是2015年发布的,此版本的头信息和文本都是二进制(统称为帧frame:头信息帧和数据帧)、复用TCP,在一个tcp里客户端和服务器都可以同时发送多个请求和响应并且不用按顺序一一对应,避免”队头堵塞”,这种双向的实时的通信被称为"多工"。
一个http请求携带的东西(以http/1.1为例):
分为请求行(request line),请求头(request header),空行,请求数据四个部分