1.HTTP 介绍
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网服务器传输超文本到本地浏览器的传送协议。
HTTP工作在 TCP/IP协议体系中的TCP协议上,是一个基于 TCP/IP 通信协议来传递数据(HTML 文件、图片文件、查询结果等)。
2. HTTP 工作原理
HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端(web服务端)发送的请求报文,这个请求报文包含了请求方法、URL协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或错误代码、服务器信息、响应头部和响应数据。
Web服务器有:Nginx,Apache服务器,IIS服务器(Internet Information Services)等。
Web服务器根据接收到的请求后,向客户端发送响应信息。
HTTP默认端口号为80,但是你也可以改为其他端口。
HTTP协议通信流程:
CGI
通用网关接口(Common Gateway Interface/CGI)描述了客户端和服务器程序之间传输数据的一种标准,可以让一个客户端,从网页浏览器向执行在网络服务器上的程序请求数据。CGI 程序可以用任何脚本语言或者是完全独立编程语言实现,只要这个语言可以在这个系统上运行
3.HTTP 消息结构
HTTP是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。HTTP是无状态(被动)协议,意味着服务器不会保留关于客户端或请求的任何信息,每个请求都是独立的,即使是在持久连接(如Keep-Alive)的情况下也是如此。
一个HTTP"客户端"是一个应用程序(Web浏览器或其他任何客户端),通过连接到服务器达到向服务器发送一个或多个HTTP的请求的目的。
nginx静态请求(前端)
一个HTTP"服务器"同样也是一个应用程序(通常是一个Web服务,如Apache Web服务器或IIS服务器等),通过接收客户端的请求并向客户端发送HTTP响应数据。
HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。
4. 客户端请求消息
HTTP 报文可以分为两类:请求报文(request message)和响应报文(response message),两者的基本报文结构相同。
客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成,下图给出了请求报文的一般格式。
5. 服务器响应消息
HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。
使用GET来传递数据的实例:
客户端请求:
curl -v http://www.testpm.cn
Connected to www.testpm.cn (47.244.247.240) port 80 (#0)
> GET /hello.txt HTTP/1.1 # 请求方式与版本协议。
> User-Agent: curl/7.29.0 #用什么客户端访问
> Host: www.testpm.cn #主机名,域名。主机和端口号,
> Accept: */* #匹配什么文件类型,“*” 是通用匹配。匹配所有类型
服务端响应:
< HTTP/1.1 200 OK #请求返回的状态码
< Server: nginx/1.16.0 #请求的服务和版本号
< Date: Thu, 04 Jul 2019 08:19:40 GMT #当前时间,北京时间为GMT+8小时
< Content-Type: text/plain #mime类型,test/plain:普通文本,比如image/png...、video
< Content-Length: 12 #内容的长度
< Last-Modified: Thu, 04 Jul 2019 08:13:25 GMT #最后修改时间
< Connection: keep-alive #是否支持长连接
< ETag: "5d1db525-c" #标识,每次访问如果与最开始的值一样返回304否则校验不一致返回200
< Accept-Ranges: bytes #接受的范围单位
输出结果: hello world
题:
在浏览器地址栏键入 URL,按下回车之后会经历什么?
浏览器向 DNS 服务器请求解析该 URL 中域名对应的 IP 地址;
解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立 TCP 连接;
服务器发出读取文件的HTTP请求(URL 中域名后面部分对应的文件),该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;【该请求报文作为 TCP 完成后发送(数据)给服务器;】
服务器对浏览器请求作出响应,并把对应的HTML文本发送给浏览器;
释放TCP连接;
浏览器将HTML文档渲染并显示内容;
6. HTTP 请求方法
根据HTTP标准,HTTP请求可以使用多种请求方法。
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
6.1 get
用途:获取资源