HTTP协议理解

2023-11-09

HTTP协议理解

参考:https://www.cnblogs.com/li0803/archive/2008/11/03/1324746.html
HTTPS连接过程:https://blog.csdn.net/lblmlms/article/details/118875722

1.特点

  1. HTTP协议是一种应用层协议,基于TCP连接。
  2. 基于请求/响应模型。
  3. 无连接,即每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
  4. 无状态,即协议本身并不保留之前一切的请求或响应报文的信息。

2.报文组成

请求报文

  • 请求行:包含请求方法和协议版本
  • 消息报头
  • 空行
  • 请求体
/* 请求行 */
GET /kongmin_123/article/details/82154780 HTTP/1.1
/* 请求头 */
Content-Type: text/plain
User-Agent: PostmanRuntime/7.28.1
Accept: */*
Cache-Control: no-cache
Postman-Token: 0b0f764d-7ae0-4b69-b009-445b50ca3b17
Host: blog.csdn.net
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Content-Length: 13
Cookie: dc_session_id=10_1627898159951.546697; dc_sid=c30647f4cb1a0387ba950356a1b79f36; uuid_tt_dd=10_19744463760-1627898159951-274682

/* 请求体 */
username:toda

响应报文

  • 状态行:包含协议版本和状态码
  • 消息报头
  • 空行
  • 响应体
/* 状态行 */
HTTP/1.1 200 OK
/* 响应头 */
Server: openresty
Date: Mon, 02 Aug 2021 09:59:32 GMT
Content-Type: text/html;charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Keep-Alive: timeout=20
Vary: Accept-Encoding
Content-Language: en-US
Strict-Transport-Security: max-age= 31536000
Content-Encoding: gzip

/* 响应体 */
......

状态码

状态码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:
1xx:指示信息–表示请求已接收,继续处理
2xx:成功–表示请求已被成功接收、理解、接受
3xx:重定向–要完成请求必须进行更进一步的操作
4xx:客户端错误–请求有语法错误或请求无法实现
5xx:服务器端错误–服务器未能实现合法的请求

常见状态代码
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

3.消息报头

消息报头有四类:通用报头、请求报头、响应报头、实体报头。
每一个报头域都是由名字+“:”+空格+值组成,消息报头域的名字是大小写无关的。

通用报头

通用头域包含请求和响应消息都支持的头域,通用头域包含Cache-Control、Connection、Date、Pragma、Transfer-Encoding、Upgrade、Via。对通用头域的扩展要求通讯双方都支持此扩展,如果存在不支持的通用头域,一般将会作为实体头域处理。

Date:表示消息产生的日期和时间。

Connection:允许发送指定连接的选项,例如指定连接是连续的,或者指定“close”选项,通知服务器,在响应完成后,关闭连接。

Cache-Control:用于指定缓存指令,缓存指令是单向的(响应中出现的缓存指令在请求中未必会出现),且是独立的(一个消息的缓存指令不会影响另一个消息处理的缓存机制)。

Pragma: 用来包含实现特定的指令,最常用的是Pragma:no-cache。在HTTP/1.1协议中,它的含义和Cache-Control:no-cache相同。

请求报头

请求报头用于请求报文里,通知服务器关于客户端请求的信息。

Host(必需):用于指定被请求资源的主机和端口号,它通常从HTTP URL中提取出来的,eg:
我们在浏览器中输入:http://www.guet.edu.cn/index.html
浏览器发送的请求消息中,就会包含Host请求报头域,如下:
Host:www.guet.edu.cn
此处使用缺省端口号80,若指定了端口号,则变成:Host:www.guet.edu.cn:指定端口号。

User-Agent:向访问网站提供你所使用的浏览器类型、操作系统及版本、CPU 类型、浏览器渲染引擎、浏览器语言、浏览器插件等信息。

Connection:close表示每个每个请求都会重新建立TCP连接;keep-alive表示保持TCP连接,后续请求都在同一条tcp连接上。

Accept:用于指定客户端接受哪些类型的信息。eg:Accept:image/gif,表明客户端希望接受GIF图象格式的资源;Accept:text/html,表明客户端希望接受html文本。

Accept-Encoding:客户端可以接收的编码格式。

Range: 表示访问内容的范围,bytes=100-200 表示访问100-200字节的内容。

响应报头

请求报头用于响应报文里,通知客户端关于服务器的信息。

Location:响应报头域用于重定向接受者到一个新的位置。Location响应报头域常用在更换域名的时候。

Server: 响应报头域包含了服务器用来处理请求的软件信息。与User-Agent请求报头域是相对应的。eg:Server:Apache-Coyote/1.1。

实体报头

实体报头HTTP header用来描述消息体内容。实体报头既可用于请求也可用于响应中。如Content-Length,Content-Language,Content-Encoding之类的报头都是实体报头。

Content-Encoding: 实体报头域被用作媒体类型的修饰符,它的值指示了已经被应用到实体正文的附加内容的编码,因而要获得Content-Type报头域中所引用的媒体类型,必须采用相应的解码机制。Content-Encoding这样用于记录文档的压缩方法,eg:Content-Encoding:gzip。

Content-Language: 实体报头域描述了资源所用的自然语言。没有设置该域则认为实体内容将提供给所有的语言阅读者。

Content-Length: 实体报头域用于指明实体正文的长度,以字节方式存储的十进制数字来表示。

Content-Type: 实体报头域用语指明发送给接收者的实体正文的媒体类型。eg:
Content-Type:text/html;charset=ISO-8859-1
Content-Type:text/html;charset=GB2312

Last-Modified: 实体报头域用于指示资源的最后修改日期和时间。

4.请求方法

1. GET

请求获取Request-URI所标识的资源。

2. POST

向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。

3. HEAD

向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。

4. PUT

向指定资源位置上传其最新内容。

5. DELETE

请求服务器删除Request-URL所标识的资源。

6. TRACE

回显服务器收到的请求,主要用于测试或诊断。

7. CONNECT

HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

8. OPTIONS

返回服务器支持的请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HTTP协议理解 的相关文章

  • 通过 http 的私有 git 存储库

    你能推荐任何简单的解决方案来设置可通过http s cleutus建议的 访问的git存储库吗 我有自己的 http 服务器 我想用它来托管一些小型私人项目 在家里我可以通过 ssh 连接 但在工作中防火墙阻止我这样做 有没有免费的方法来设
  • “双点”可以作为 URL 路径部分的一部分吗

    在 URL 中使用父目录双点是否有效且安全 如下例所示 http example com path to file jpg RFC3986 https www rfc editor org rfc rfc3986定义 URI 它描述了路径如
  • OkHttp如何获取Json字符串?

    Solution 这是我这边的一个错误 正确的方法是响应 body string 以外响应 body toString 我使用 Jetty servlet URL 是http 172 16 10 126 8789 test path jso
  • HttpRequest PUT内容到poco库中

    我想使用 HTTP PUT 请求将一些数据从 C 应用程序发送到服务器 我在用poco http pocoproject org我的应用程序中的网络库 我正在使用这个代码片段 HTTPClientSession session uri ge
  • Perl:LWP::UserAgent 对于重定向 URL 始终返回代码 200

    我有一个简单的 url 它执行 302 临时错误 移至另一页 我尝试在 URL 返回代码 200 表示 OK 时检索它 并在返回 200 以外的其他内容时停止 My code my ua LWP UserAgent gt new env p
  • Chrome 在传输一定量的数据后挂起 - 等待可用的套接字

    我有一个浏览器游戏 最近我开始向游戏添加音频 Chrome 无法加载整个页面并卡在 91 requests 8 1 MB transferred 并且不再加载任何内容 它甚至破坏了所有其他选项卡中的网站 说Waiting for avail
  • 是否可以修改 $_SESSION 变量?

    恶意用户是否可以将 SESSION 在 php 中 变量设置为他想要的任何值 很大程度上取决于您的代码 有一点非常明显 SESSION username REQUEST username
  • 从 HTTP 登录到 HTTPS

    我的网站默认使用 HTTP 我确实有一个启用 HTTPS 的证书 但只有其上的某些区域强制建立安全连接 登录是通过 Ajax 处理的 我想开始使用 SSL 即使请求来自 HTTP 我尝试强制请求的地址具有 HTTPS 并且它完美地回复 然而
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http
  • Python Requests 库重定向新 url

    我一直在浏览 Python 请求文档 但看不到我想要实现的任何功能 在我的脚本中我设置allow redirects True 我想知道该页面是否已重定向到其他内容 新的 URL 是什么 例如 如果起始 URL 为 www google c
  • 动态img(或视频)标签根本不加载资源,HTTP请求处于“待处理”状态

    我尝试使用以下方法在 Web 应用程序上加载资源时遇到一些问题img or videoHTML 标签 我在我的应用程序中使用 Angular 并动态设置src的参数img标签 使用ng src src 指示 没有那么多图像和资源需要加载 在
  • 如何在 Laravel 中使用 PUT http 动词提交表单

    我知道这个问题可能已经提出 但我就是无法让它发挥作用 如果有人可以帮助我 我将非常感激 我安装了 colletive form 但答案也可以是 html 表单标签 现在列出我的表格 我的路线和我的例外情况 Form model array
  • 如何构造 Network.HTTP.Conduit.Request 对象?

    试图构建一个Request with 网络 HTTP 管道 http hackage haskell org packages archive http conduit 1 1 0 1 doc html Network HTTP Condu
  • 无法使用 Net::HTTP 在我的 ruby​​ 代码中发出 HTTP 删除请求

    我在 ruby 代码中使用 Net HTTP 来发出 http 请求 例如 我要发出一个帖子请求 require net http Net HTTP post form url email gt email password gt pass
  • 如何将 HTTP(而非 HTTPS)与 RequestBin 结合使用

    我想使用请求Bin https requestb in用于 HTTP 而非 HTTPS 调试的工具 但是 它似乎不支持它 例如 curl http requestb in 1eqnllm1 vvvv Hostname was NOT fou
  • fetch get 请求返回空标头

    Headers was indeed sent via http However fetch returned empty headers 事实证明我需要设置Access Control Expose Headers包含我想公开的标题
  • Django 是否有一个模板标签可以检测 URL 并将其转换为超链接?

    当有人写一篇文章并复制并粘贴一个网址时 Django 可以检测到它并将其呈现为超链接而不是纯文本吗 姜戈有urlize 模板过滤器 http docs djangoproject com en stable ref templates bu
  • Web 服务器何时清除 PHP 会话标识符?

    背景 我正在尝试编写一个脚本 定期连接到网络服务器并检查特定页面上的某些信息是否已更改 我已经使用 bash 用于脚本 curl 用于实际连接 和 crontab 用于调度 的组合来完成这项工作 由于服务器需要身份验证 我首先使用curl
  • 使用 HTTP 访问数据库对象

    是否可以使用 HTTP 访问数据库对象SQL Server 2012它的完成方式是使用SQL Server 2000 我提到了下面的文章 但它是关于SQL Server 2000 使用 HTTP 访问数据库对象 http technet m

随机推荐

  • 画波形图的工具

    在数字电路设计中 常常会看波形图 通过波形图来表达时序关系 波形图也是设计者直接的标准语言 比如 A模块的开发者会用波形图来表示接口的输入信号或者输出信号的时序关系 B模块 对应A模块的驱动或者接收者会根据接口时序做相应的数据传输控制 那么
  • 目标检测算法研究

    1 目标检测基本介绍 1 1 项目结构 1 2 目标检测的算法分类 1 2 1两步走的目标检测 先进行区域推荐 而后进行目标分类 代表算法 R CNN SPP net Fast R CNN Faster R CNN 1 2 2 端到端的目标
  • Python入门--数组、list

    在Python中 列表 list 是一种用于存储一组有序元素的数据类型 列表中的元素可以是数字 字符串 变量或其他任何Python对象 列表是可变的 也就是说 可以添加 删除和修改列表中的元素 下面是一些列表的基本操作示例 1 创建一个空列
  • mov edi,edi - hook api

    mov edi edi hook api 系统 windows xp 查看系统函数的反汇编代码时会发现开头有个 mov edi edi 2字节 再往前则是5个nop指令 当然这不会引人注意 可是 mov edi edi 有什么用了 上网搜索
  • 故事篇:数据库架构演变之路

    故事的开头总是这样 适逢其会 猝不及防 今天我哼着 也是黄昏的沙滩上 有着脚印两对半 在海边散步 迎面走来了一位身穿黄金甲的男子 来海边还穿这么花哨 真是个傻X 定睛一看 这不是嘉文吗 背景介绍 嘉文四世 德玛西亚皇子 是有名的高富帅 与盖
  • openwifi ap sta路由配置教程

    一 先启动AP wgd sh sysctl w net ipv4 conf all forwarding 1 sysctl w net ipv4 conf default forwarding 1 sysctl w net ipv6 con
  • RANSAC(Random Sample Consensus)对点云进行多个平面的分割并可视化(附python代码)

    使用 RANSAC Random Sample Consensus 算法对点云进行多个平面的分割 并进行可视化 下面是对代码的逐行解释 pcd o3d io read point cloud xxx pcd 从文件中读取点云数据 并将其存储
  • L1-029. 是不是太胖了

    据说一个人的标准体重应该是其身高 单位 厘米 减去100 再乘以0 9所得到的公斤数 已知市斤是公斤的两倍 现给定某人身高 请你计算其标准体重应该是多少 顺便也悄悄给自己算一下吧 输入格式 输入第一行给出一个正整数H 100 lt H lt
  • STM32F1开发指南笔记46----字库原理及汉字库创建

    随着液晶显示技术的发展和应用 越来越多的开发人员希望在自己开发的仪器中使用液晶屏幕来显示汉字 通常的汉字显示方式是 先根据所需要的汉字提取汉字点阵 譬如16x16点阵 24x24点阵等 将点阵文件存入ROM中 形成新的汉字编码 然后在使用时
  • 蓝桥杯练习——Python砖墙

    题目 你的面前有一堵矩形的 由 n 行砖块组成的砖墙 这些砖块高度相同 也就是一个单位高 但是宽度不同 每一行砖块的宽度之和相等 你现在要画一条 自顶向下 的 穿过 最少 砖块的垂线 如果你画的线只是从砖块的边缘经过 就不算穿过这块砖 你不
  • API网关

    API网关 api gateway 即 api 网关 所有的请求首先会经过这个网关 这有点类似于前端控制器模式 也有点类似于 Facade模式 如下图所示 由于所有的请求会先经过这个 api 网关 所以 可以在 这里做 权限控制 安全 负载
  • 微信小程序支付开发及问题

    一 前期准备 微信后台申请微信支付 微信支付 商务号关联 个人信息 填写 操作密码 api密钥设置 得到appid AppSecret 商户号 api密钥等 微信支付接口签名校验工具 二大概流程 1 登录 获取code 一个code只能用一
  • 练习2-2 在不使用运算符&&或

    for i 0 i lt lim 1 c getchar n c EOF i s i c 练习2 2 在不使用运算符 或 的条件下编写一个与上面的for循环语句等价的循环语句 参考代码 include
  • mysql 如何修改数据库表结构_MySQL数据库如何修改表结构

    MySQL数据库修改表结构的方法 1 使用add添加字段 使用drop删除字段 2 使用alter修改字段名 3 修改列类型 4 修改表名 5 修改表选项 6 修改列属性 MySQL数据库修改表结构的方法 1 添加与删除字段 1 添加 Al
  • ChatGLM2-6B中引入ptuning报错:AttributeError: ‘ChatGLMModel‘ object has no attribute ‘prefix_encoder‘

    File home ai gm ChatGLM2 6B ptuning v1 main py line 411 in
  • hdoj1052 Tian Ji -- The Horse Racing(贪心算法+2)

    田忌赛马 关键在于比较的次序 首先先比较两个人最慢的马 如果田忌的马快就直接赢下一分 count 如果更慢的话就用这匹慢马去与大王最快的马比赛 count 如果相等的话 再比较两个人最快的马 如果田忌的马更快 count 反之就用田忌的慢马
  • 关于QT线程暂停、恢复、停止、重启、暂停后回收的处理

    thread h Qmutex m mutex void threadPause void threadResume thread cpp bool Flag StopThread 0 bool Flag PauseThread 0 voi
  • C#中? 、?? 、?. 、??= 的用法和说明

    一 可空类型修饰符 lt gt 引用类型能用空引用来表示一个表示一个不存在的值 但是值类型不能 例如 string str null int i null 编译报错 为了使值类型也能使用可空类型 就可以用 来表示 表现形式为 T 例如 in
  • 关于 Android 8.0 的录像 quota exceeded 异常

    这是个之前从没碰到过的问题 记录一下这无语的跟踪过程 两周前的某一天 忽然一封邮件转过来 测试那边描述手机录像在内置卡录满状态下会出问题 录出的文件播不了 按说 磁盘录满根本不是个大事 Camera APK 会统计内置卡或者外置卡的剩余可用
  • HTTP协议理解

    HTTP协议理解 参考 https www cnblogs com li0803 archive 2008 11 03 1324746 html HTTPS连接过程 https blog csdn net lblmlms article d