HTTP 协议


1. HTTP 协议概述

1.1 概念

HTTP 的全称是:Hyper Text Transfer Protocol,意为 超文本传输协议。它指的是服务器和客户端之间交互必须遵循的一问一答的规则。形容这个规则:问答机制、握手机制。

它规范了请求和响应内容的类型和格式 (报文)。

HTTP 协议是由 W3C 组织管理和维护的。

客户端与服务端通信时传输的内容我们称之为报文

  • 请求报文:<font style="color:rgb(51, 51, 51);">客户端发送给服务器的称为"请求报文"</font>
    • 浏览器向服务器发送请求时,携带数据叫 ++请求报文++
  • 响应报文:<font style="color:rgb(51, 51, 51);">服务器发送给客户端的称为"响应报文"</font>
    • 服务器向浏览器做出响应时,携带数据叫 ++响应报文++

1.2 版本

目前 HTTP协议 主要是 1.0 版本和 1.1 版本。这两个版本的区别主要是两个方面。

第一:HTTP1.1 版本比 1.0 版本多了一些消息头。

第二:HTTP1.1 版本和 1.0 版本的执行过程不一样。执行过程如下:

HTTP1.0 HTTP1.1
创建连接(TCP/IP) 创建连接(TCP/IP)
发送请求 发送请求1
得到响应 得到响应1
关闭连接 发送请求2
创建连接(TCP/IP) 得到响应2
发送请求 ...
得到响应 ...
关闭连接 连接超时或手动关闭连接

HTTP 协议概念是客户浏览器和服务器一种一问一答的规则,那么必须要有问有答,而且要先问后答。但是我们使用

1.3 HTTP1.0与HTTP1.1区别(面试题)

Http1.0:客户端(浏览器)每次向服务器发送请求时,都需要 新建连接及关闭连接,相对效率低

Http1.1:客户端(浏览器)每次向服务器发送请求时,只需要 建立一次连接即可(关闭一次连接),相对效率高

2. HTTP 协议组成

由 HTTP 协议的概念可知,它分为问和答两部分。问指的就是 请求部分,而答指的就是 响应部分。

2.1 请求部分

请求行: 永远位于请求的第一行

请求消息头: 从第二行开始,到第一个空行结束

请求的正文: 从第一个空行后开始,到正文的结束

2.2 响应部分

响应行: 永远位于响应的第一行

响应消息头: 从第二行开始,到第一个空行结束

响应的正文: 从第一个空行后开始,到正文的结束

2.3 消息的共性分析

消息头名称首字母大写,多个单词每个单词的首字母都大写。

多个单词用**-**分隔

名称和值之间用冒号加空格分隔

多个值之间用逗号加空格分隔

两个头之间用回车分隔

3. 请求部分详解

3.1 请求行详解

请求行:GET /myapp/2.html HTTP/1.1

内容 说明
GET 请求的方式。(还有POST)
/myapp/2.html 请求的资源。
HTTP/1.1 使用的协议,及协议的版本。

3.2 请求消息头详解

内容 说明
Accept 告知服务器,客户浏览器所支持的MIME类型。
Accept-Encoding 告知服务器,客户浏览器所支持的压缩编码格式。最常用的就是gzip压缩。
Accept-Language 告知服务器,客户浏览器所支持的语言。一般都是zh_CN或en_US等。
Referer 告知服务器,当前请求的来源。 只有当前请求有来源的时候,才有这个消息头。从地址栏输入的没有来源。 作用:1 投放广告 2 防盗链
Content-Type 告知服务器,请求正文的MIME类型。
Content-Length 告知服务器,请求正文的长度。
User-Agent 浏览器相关信息
Connection: Keep-Alive 连接的状态:保持连接
If-Modified-Since 告知服务器,客户浏览器缓存文件的最后修改时间。
Cookie() 会话管理相关,非常的重要。

3.3 请求正文详解

第一:只有post请求方式,才有请求的正文。get方式的正文是在地址栏中的。

第二:表单的输入域有name属性的才会被提交。不分get和post的请求方式。

第三:表单的enctype属性取值决定了请求正文的体现形式。概述的含义是:请求正文的MIME编码类型。

enctype取值 请求正文体现形式 示例
application/x-www-form-urlencoded key=value&key=value username=test&password=1234
multipart/form-data 此时变成了多部分表单数据。多部分是靠分隔符分隔的。 -----------------------------7df23a16c0210 Content-Disposition: form-data; name="username" test -----------------------------7df23a16c0210 Content-Disposition: form-data; name="password" 1234 -----------------------------7df23a16c0210 Content-Disposition: form-data; name="headfile"; filename="C:\Users\snow\Desktop\请求部分.jpg" Content-Type: image/pjpeg -----------------------------7df23a16c0210

4. 响应部分详解

4.1 响应行详解

响应行:HTTP/1.1 200 OK

内容 说明
HTTP/1.1 使用协议的版本。
200 响应状态码
OK 状态码描述

常用状态码介绍:

状态码 说明
200 一切都OK>
302/307 请求重定向(客户端行为,两次请求,地址栏发生改变)
304 请求资源未发生变化,使用缓存
404 请求资源未找到
500 服务器错误

4.2 响应消息头详解

消息头 说明
Location 请求重定向的地址,常与302,307配合使用。
Server 服务器相关信息。
Content-Type 告知客户浏览器,响应正文的MIME类型。
Content-Length 告知客户浏览器,响应正文的长度。
Content-Encoding 告知客户浏览器,响应正文使用的压缩编码格式。常用的gzip压缩。
Content-Language 告知客户浏览器,响应正文的语言。zh_CN或en_US等等。
Content-Disposition 告知客户浏览器,以下载的方式打开响应正文。
Refresh 定时刷新
Last-Modified 服务器资源的最后修改时间。
Set-Cookie(***) 会话管理相关,非常的重要
Expires:-1 服务器资源到客户浏览器后的缓存时间
Catch-Control: no-catch 不要缓存,//针对http协议1.1版本
Pragma:no-catch 不要缓存,//针对http协议1.0版本

4.3 响应正文详解

就和我们在浏览器上右键查看源文件看到的内容是一样的。

html 复制代码
<html>
    <head>
        <link rel="stylesheet" href="css.css" type="text/css">
        <script type="text/javascript" src="demo.js"></script>
    </head>
    <body>
        <img src="1.jpg" />
    </body>
</html>
相关推荐
沐风ya3 小时前
RPC介绍
网络·网络协议·rpc
OAFD.3 小时前
YOLOv3 详解:核心改进、网络架构与目标检测实践
网络·yolo·目标检测
鹿鸣天涯4 小时前
商用密码应用安全性评估
网络·安全·web安全
迎風吹頭髮4 小时前
Linux服务器编程实践27-详解TCP状态转移:从LISTEN到TIME_WAIT的完整路径
linux·服务器·网络
你好,赵志伟4 小时前
网络层(IP)
网络·ip
Yeats_Liao5 小时前
Go Web 编程快速入门 02 - 认识 net/http 与 Handler 接口
前端·http·golang
前端赵哈哈5 小时前
那个让我熬夜三天的 “小数点”:一次 URL 踩坑记
前端·chrome·http
9527出列5 小时前
Netty源码分析--客户端连接接入流程解析
网络协议·netty
Jtti5 小时前
SSH连接服务器超时?可能原因与解决方案
服务器·网络·php