HTTP协议基础

模型基础

模型结构

最开始提出的叫做开放系统互连基本参考模型OSI/RM模型,叫做国际标准,但由于种种原因,非国际
标准的TCP/IP模型成为当前主流标准。

OSI模型七层:物理层、数据链路层、网络层、运输层、会话层、表示层、应用层
TCP/IP模型四层:网络接口层、网际层、运输层、应用层

为方便讲述计算机网络原理,通常结合为五层讲:

  1. 物理层:主要规定电气特性,必须按照标准使用哪些硬件。如:调制解调器、PLC、SONET/SDH、G.709、光导纤维、同轴电缆、双绞线,其中数据单元是比特,典型设备有:中继器、集线器、网线、HUB
  2. 数据链路层:有ARQ、CSMA/CD、PPP、LCP、HDLC、ATM等协议,其数据单元为帧,典型设备有:网卡、网桥、交换机
  3. 网络层:有ARQ、RARP、ICMP、IGMP、RIP、OSPF、BGP、IS-IS、IPSec等协议,其数据单元为:数据包,典型设备有:路由器、防火墙、多层交换机
  4. 传输层:有TCP、UDP、DCCP、SCTP、RTP、RSVP、PPTP等协议,其数据单元为数据段,典型设备有端口和进程
  5. 应用层:有DHCP、FTP、HTTP、SMTP、POP3、IMAP、SMTP、SSH、TELNET、RPC、TLS、SOAP、DNS等协议,典型设备有:应用程序,如:FTP、SMTP、HTTP

越往高层走,越偏向软件化


通信基础

基本流程

当在应用层活动时,产出的数据需要与其它计算机通信时,会发生如下过程:

  1. 应用层数据,先按照运输层协议标准,封装到运输层数据里(数据段)
  2. 接着运输层的数据(数据段),会按照网络层协议的标准,封装到网络层数据里(数据包/报文)
  3. 接着这些数据包会按照链路层协议标准,封装到链路层数据里(帧)
  4. 数据帧按照物理层电气特性,转换为二进制比特流发送出去
  5. 网络会把这些流数据,不断拆封再封装,直至到达目标主机。然后又目标主机依层拆封数据,进行反解析,完成传递

可参考链接:数据包结构分析


TCP/UDP协议格式

可参考链接:TCP/UDP协议格式


IP协议格式

可参考链接:IP协议格式


帧协议格式

以太网帧格式较复杂,有四种,分别是:

Ethernet Ⅱ、Novell Ethernet、IEEE 802.3/802.2、Ethernet SNAP

不论帧格式如何规定,始终在帧头部包含有目的mac地址,源mac地址,后面跟数据段,结尾加CRC校验码。
在计算机中,实际是使用MAC地址寻找主机的。


三次握手、四次挥手


HTTP

简介

HTTP(Hyper Text Transfer Protocol)超文本传输协议,是用于从万维网(WWW:World wide Web)服务器传输超文本到本地浏览器的传送协议。
HTTP是一个基于TCP/IP通信协议来传输数据(HTML文件、图片文件、查询结果等)
HTTP是一个属于应用层的面向对象协议,由于其便捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中广泛使用的是HTTP/1.1。


协议说明

B/S架构的系统使用的协议为HTTP协议。浏览器作为HTTP客户端通过URL向HTTP服务端即web服务器发送所有请求。web服务器根据收到的请求后,向客户端发送响应信息。


特点

  • 简单快速:客户向服务器请求服务时,只需传递请求方法和路径。常用方法:GET、HEAD、POST。各方法规定了客户与服务器联系的类型不同
  • 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记
  • 无连接:限制每次链接只处理一个请求。服务器处理完客户的请求并收到其应答后,即断开连接。此方法可节省传输时间。
  • 无状态:HTTP为无状态协议。指对于事物处理无记忆能力。缺少状态意味着如果后续处理需要之前的信息,则必须重传,这样可能导致每次连接传输的数据量增大。另外,在服务器不需要先前信息时它的应答则较快
  • 支持B/S及C/S模式:B/S即使用浏览器通过HTTP协议和服务器通信,C/S即在其他软件中编程实现和服务器的HTTP通信

URL

URL(Uniform Resource Locator)统一资源定位符,是互联网上用来标识某一处资源的地址。


Request请求格式

客户端发送一个HTTP请求到服务器的请求消息包括以下格式:

四部分:请求行(request line)、请求头部(header)、空行和请求数据

请求方法

依据HTTP标准,HTTP请求可以使用多种请求方法:
HTTP1.0

GET,POST,HEAD

HTTP1.1

GET,POST,HEAD,OPTIONS,PUT,DELETE,TRACE,CONNECT

请求方法 含义
GET 请求指定的页面信息,并返回实体主页
HEAD 类似于GET请求,只不过返回的响应中没有具体的内容,用于获取报头
POST 向指定资源提交数据进行处理请求(例如提交表单或上传文件)。数据被包含在请求实体中。POST请求可能会导致新的资源的建立或已有资源的修改
PUT 从客户端向服务器传送的数据取代指定的文档的内容
DELETE 请求服务器删除指定的页面
CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
OPTIONS 允许客户端查看服务器的性能
TRACE 回显服务器收到的消息,主要用于测试或诊断

GET/POST请求举例


GET与POST异同

PHP通过GET和POST获取客户端发送的数据
相同点:

  • GET和POST都可以创建数组。如:array(key => value, key1 => value1, ...)此数组包含键/值对,其中的键是表单控件的名称,值是来自用户的输入数据
  • GET和POST通常被视作$_GET$_POST,是超全局变量,对他们的访问无需考虑作用域,无需任何代码,能够从任何函数、类或文件访问

不同点:

  • $_POST是通过HTTP POST传递到当前脚本的变量数组。$_GET是通过URL参数传递到当前脚本的变量数组
  • GET可以直接在地址栏中看到、修改
  • POST须使用工具来查看内容

响应消息举例


HTTP状态码

状态码有三位数字组成,第一位定义了响应类别,共分五种类别:

1xx:指示信息,标识请求已接受,继续处理
2xx:成功,标识请求已被成功接收、理解、接受
3xx:重定向,要完成请求必须进行更进一步的操作
4xx:客户端错误,请求有语法错误或请求无法实现
5xx:服务器端错误,服务器未能实现合法的请求

常见的还有:

200:OK 请求已成功,请求所希望的响应头或数据体将随此响应返回。出现此状态码是表示正常状态

302:Move temporarily
请求的资源临时从不同的 URI响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。只有在Cache-Control或Expires中进行了指定的情况下,这个响应才是可缓存的。

304:Not Modified
如果客户端发送了一个带条件的 GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态码。304响应禁止包含消息体,因此始终以消息头后的第一个空行结尾。

400:Bad Request

  1. 语义有误,当前请求无法被服务器理解。除非进行修改,否则客户端不应该重复提交这个请求。
  2. 请求参数有误。

404:Not Found
请求失败,请求所希望得到的资源未被在服务器上发现。

500:Internal Server Error
服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器端的源代码出现错误时出现。


HTTP与HTTPS

https == http + ssl/tls
ssl:安全套接字(传输层到应用层之间)
tls:ssh的升级版
ssl 3.0 == tls 1.0

CA:第三方数字证书可信机构

您的支持是我前进的动力!