HTTP协议相关知识
HTTP
HTTP概述
HTTP即超文本传输协议,是一个用于传输超媒体文档(如HTML)的应用层协议。它是为Web浏览与Web服务器之间的通信而设计的。HTTP遵循客户端 – 服务端模型,客户端打开一个连接发出请求,然后等待直到收到服务器端响应。HTTP 是无状态协议,意味服务器不会在两个请求之间保留任何数据(状态)。
HTTP无状态
HTTP协议是无状态的。
请求与请求之间,是互不关心对方的情况的。上一秒发出A请求,下一秒发出B请求,B是完全感知不到A请求曾经的存在。总之,两个请求间毫无瓜葛。
若需要维持状态信息,可以使用cookie
和session
。
cookie:
cookie是存储在浏览器的小段文本,会在浏览器每次向同一服务器再发起请求时被携带并发送到服务器上。可以把状态信息放在cookie里,带给服务器。
session:
session是存储在服务器的用户数据。浏览器第一次向服务器发起请求时,服务器会为当前会话创建一个session,并且把对应的session-id写入cookie中,用来标识session。此后,每次用户的请求都会携带一个包含了 session-id的cookie,服务器解析出session-id,便能定位到用户的用户信息。
TCP长/短连接
短连接:
建⽴连接--数据传输--关闭连接
建⽴连接--数据传输--关闭连接
建⽴连接--数据传输--关闭连接
长连接:
建⽴连接--数据传输--保持连接--数据传输--保持连接--数据传输--关闭连接
优点:
长连接可以省去较多的TCP建⽴和关闭的操作,减少浪费,节约时间。对于频繁请求资源的客户端来说,比较适⽤⻓连接。
缺点:
client与server之间的连接如果⼀直不关闭,会随着客户端连接越来越多,server端迟早会扛不住,这时server端要采取⼀些措施。如关闭⼀些⻓时间没有读写事件发生的连接,这样避免⼀些恶意连接导致server端服务受损。
请求方法类型
HTTP协议的请求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS
等。
类型 | 描述 |
---|---|
GET | 请求指定页面信息,用作数据的读取,请求参数以query的形式附加,返回实体主体。 |
HEAD | 类似于GET请求,只请求页面的首部、不请求页面内容。它允许单纯获取服务器的响应头信息。 |
POST | 向指定资源提交数据进行处理请求,即创建新资源或修改现有资源。请求参数以body的形式传递,即数据被包含在请求体中 |
PUT | PUT的URI指向是具体的某个资源,而不能指向资源集合。同时PUT对资源的修改是幂等的。从客户端向服务器传送的数据取代指定的文档的内容 |
DELETE | 请求服务器删除指定的资源。 |
CONNECT | HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器 |
OPTIONS | 用于获取指定服务能够支持的通信选项。 |
TRACE | 回显服务器收到的请求,主要用于测试或诊断 |
请求格式
HTTP请求格式主要包括:请求行(request line)、请求头(header)、空行和请求数据
GET / HTTP/1.1
# GET表示请求方式 /表示请求的网页 HTTP/1.1表示当前HTTP的版本为1.1
HOST: 127.0.0.1:8080
# 服务器的IP地址和端口号
connection: keep-alive
# 表示连接方式为长连接
accept: text/html, application/xhtml+xml, application/xml; q=0.9,image/webp, */*;q=0.8
# 表示浏览器可接受的数据格式
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36
# 表示浏览器的版本
accept-Encoding: gzip, deflate, sdch
# 表示浏览器可接受的压缩格式
accept-Language: zh-CN, zh; q=0.8
# 表示浏览器可以接受的语言
cookie: uuid_tt_dd=10_19572343470-1658843455170-6410
# 表示浏览器在本地缓存中存储的数据
响应格式
HTTP响应格式主要包括:状态行、消息头、空行和响应正文
HTTP/1.1 200 OK
# HTTP/1.1表示当前HTTP的版本为1.1。200 OK表示网络状态码
Cache-Control: private
# 缓存控制是公有的还是私有的
Connection: keep-alive
# 连接方式是长连接
Content-Encoding: gzip
# 发送数据的压缩格式采用gzip
Content-Type: text/html;charset=utf-8
# 发送数据的格式采用了text/html; 编码是utf-8
date: Thu, 20 Oct 2022 12:02:15 GMT
# 服务器当前的时间
Expires: Thu, 24 May 2022 12:02:15 GMT
# Expires存储的是一个用来控制缓存失效的日期
Set-Cookie: TOKEN=123456
# 设置Cookie,存在浏览器本地的一个缓存区域
Transfer-Encoding: chunked
# 表示将实体安全传递给用户所采用的编码形式。chunked代表使用分块传输编码
响应状态码
1xx
成功接收请求,但是处理过程还没结束,需要客户端再抛出一个请求才能完成整个过程。少见,了解即可。
2xx
表示成功接收请求、并且已经处理完毕。
200 OK:标识客户端的请求已经被服务器正确处理
3xx
表示服务器虽然处理了请求,但客户端还需要进一步的工作,才可以完成请求。
301:永久性重定向,表示资源已被分配了新的URL
302:临时性重定向,表示资源临时被分配了新的URL
304:表示服务器校验后发现资源没有改变,提醒客户端直接走缓存来取资源
4xx
客户端错误,意味着请求出错。
400:请求报文存在语法错误
403:对请求资源的访问被服务器拒绝,多半是没权限
404,资源不存在,可能是访问路径不对,也可能是这个资源在服务端被删除了
5xx
服务器错误,意味着服务器内部的程序处理有问题。
500:服务器在接受请求后进行处理的过程中,发生了内部错误
502:网关错误
504:网关超时
Heather
常规Heather
字段 | 含义 |
---|---|
Cache-Control | 控制缓存的行为 |
Connection | 控制不再转发给代理的首部字段、管理持久连接 |
Date | 创建报文的日期时间 |
Pragma | 报文指令 |
Trailer | 报文末端的首部一览 |
Transfer-Encoding | 指定报文主体的传输编码方式 |
Upgrade | 升级为其他协议 |
Via | 代理服务器的相关信息 |
Warning | 错误通知 |
请求头Heather
字段 | 含义 |
---|---|
Accept | 用户代理可处理的媒体类型 |
Accept-Charset | 优先的字符集 |
Accept-Encoding | 优先的内容编码 |
Accept-Language | 优先的语言(自然语言) |
Authorization | Web认证信息花 |
Expect | 期待服务器的特定行为 |
From | 用户的电子邮箱地址 |
Host | 请求资源所在服务器 |
If-Match | 比较实体标记 |
If-Modified-Since | 比较资源的更新时间 |
If-None-Match | 比较实体标记,与If-Match相反 |
If-Range | 资源未更新时发送实体 Byte的范围请求 |
If-Unmodified-Since | 比较资源的更新时间 |
Max-Forwards | 最大传输逐跳数 |
Proxy-Authorization | 代理服务器要求客户端的认证信息 |
Range | 实体的字节范围请求 |
RefererTE | 传输编码的优先级 |
User-Agent | HTTP客户端程序的信息 |
响应头Heather
字段 | 含义 |
---|---|
Accept-Ranges | 是否接受字节范围请求 |
Age | 推算资源创建经过时间 |
ETag | 资源的匹配信息 |
Location | 令客户端重定向至指定URI |
Proxy-Authenticate | 代理服务器对客户端的认证信息 |
Retry-After | 对再次发起请求的时机要求 |
ServerHTTP | 服务器的安装信息 |
Vary | 代理服务器缓存的管理信息 |
WWW-Authenticate | 服务器对客户端的认证信息 |
实体Heather
请求消息和响应消息都可以包含实体信息
字段 | 含义 |
---|---|
Allow | 资源可支持的HTTP方法 |
Content-Encoding | 实体主体适用的编码方式 |
Content-Language | 实体主体的自然语言 |
Content-Length | 实体主体的大小 |
Content-Location | 替代对应资源的URI |
Content-MD5 | 实体主体的报文摘要 |
Content-Range | 实体主体的位置范围 |
Content-Type | 实体主体的媒体类型 |
Expires | 实体主体过期的日期时间 |
Last-Modified | 资源的最后修改日期时间 |
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/136863.html