HTTP请求行详解

2023-10-26

目录

一、认识URL

二、认识方法

2.1 GET方法

2.2 POST方法

2.3 其他方法


请求行也就是HTTP请求的第一行,接下来将对第一行内容进行详细解释

一、认识URL

平时我们俗称的 "网址" 其实就是说的 URL (Uniform Resource Locator 统一资源定位符)。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。

一个具体的URL:

https://mp.csdn.net/mp_blog/creation/editor?spm=1001.2014.3001.4503 

这里可以明显的看出,这个URL相比于上述图表中的URL有些信息是被省略了的

  • https:协议方案名。常见的有http、https,也有mysql的(jdbc:mysql)
  • user:pass : 登陆信息。现在的网站进行身份认证一般不再通过 URL 进行了,一般都会省略
  • mp.csdn.net : 服务器地址。此处是一个 "域名",域名会通过 DNS 系统解析成一个具体的 IP 地址。
  • 端口号: 上面的 URL 中端口号被省略了。当端口号省略的时候,浏用览器会根据协议类型自动决定使用哪个端口。http 协议默认使用 80 端口,https 协议默认使 443 端口。
  • mp_blog/creation/editor: 带层次的文件路径。
  • spm=1001.2014.3001.4503 :查询字符串(query string)。本质是一个键值对结构。键值对之间使用 & 分隔。键和值之间使用 = 分隔。
  • 片段标识: 此 URL 中省略了片段标识。片段标识主要用于页面内跳转。

关于query string

query string 中的内容是键值对结构。其中的 key 和 value 的取值和个数,完全都是程序猿自己约定的。我们可以通过这样的方式来自定制传输我们需要的信息给服务器。

URL 中的可省略部分

  • 协议名: 可以省略,省略后默认为 http://
  • ip 地址 / 域名: 在 HTML 中可以省略(比如 img,link,script,a 标签的 src 或者 href 属性)。省略后表示服务器的 ip / 域名与当前 HTML 所属的 ip / 域名一致。
  • 端口号: 可以省略. 省略后如果是 http 协议,端口号自动设为 80;如果是 https 协议,端口号自动设为 443。
  • 带层次的文件路径: 可以省略。省略后相当于 / 。有些服务器会在发现 / 路径的时候自动访问/index.html
  • 查询字符串: 可以省略
  • 片段标识: 可以省略

关于 URL encode

/ ? : 等这样的字符,已经被url当做特殊意义理解了。因此这些字符不能随意出现。比如, 某个参数中需要带有这些特殊字符,就必须先对特殊字符进行转义。这里的转义器直接在浏览器上搜索一个就可以了。

二、认识方法

2.1 GET方法

GET方法是最常见的HTTP方法,多用于向服务器获取某个资源。在浏览器中直接输入一个URL,此时浏览器就会发送一个GET请求。另外,HTML中的link,img,script等标签,也会触发GET请求。 

使用Fiddler进行抓包,具体的观察GET请求的详细结果

GET请求的特点

  • 首行的第一部分为 GET
  • URL中的 query string 可以为空也可以不为空,其中URL的长度是没有限制的
  • header 中有若干个键值对结构
  • body部分为空(这里的body是可以为空或者不为空的,一般是为空的)

2.2 POST方法

POST 方法也是一种常见的方法。多用于提交用户输入的数据给服务器(例如登陆页面)。通过 HTML 中的 form 标签可以构造 POST 请求,或者使用 JavaScript 的ajax也可以构造 POST 请求

使用Fiddler进行抓包,具体的观察POST请求的详细结果

POST请求的特点 

  • 首行的第一部分为 POST
  • URL 的 query string 一般为空 (也可以不为空)
  • header 部分有若干个键值对结构
  • body 部分一般不为空。body 内的数据格式通过 header 中的 Content-Type 指定。 body 的长度由header 中的 Content-Length 指定。

GET和POST的区别

  • 二者没有本质的区别
  • 语义不同:GET一般用于向服务器获取数据,POST一般用于向服务器提交数据
  • GET的body一般为空,传输数据一般通过query string传递。POST的query string一般为空,传输数据一般通过body传递。
  • GET的请求一般是幂等的,POST的请求一般是不幂等的(如果多次请求的结果是一致的,那么说这个请求是幂等的)
  • GET可以被缓存,POST不能被缓存(这也是由于幂等性)

补充说明

  • 关于语义: GET 完全可以用于提交数据,POST 也完全可以用于获取数据
  • 关于幂等性:标准建议 GET 实现为幂等的。实际开发中 GET 也不必完全遵守这个规则(主流网站都有 "猜你喜欢" 功能,会根据用户的历史行为实时更新现有的结果)。
  • 关于安全性:有些资料上说 "POST 比 GET 请安全". 这样的说法是不科学的. 是否安全取决于前端在传输密码等敏感信息时是否进行加密, 和 GET POST 无关.
  • 关于传输数据量:有的资料上说 "GET 传输的数据量小,POST 传输数据量大"。这个也是不科学的,标准没有规定 GET 的 URL 的长度,也没有规定 POST 的 body 的长度。传输数据量多少,完全取决于不同浏览器和不同服务器之间的实现区别。
  • 关于传输数据类型:有的资料上说 "GET 只能传输文本数据,POST 可以传输二进制数据"。这个也是不科学的。GET 的 query string 虽然无法直接传输二进制数据, 但是可以针对二进制数据进行 url encode。

2.3 其他方法

  • PUT 与 POST 相似,只是具有幂等特性,一般用于更新
  • DELETE 删除服务器指定资源
  • OPTIONS 返回服务器所支持的请求方法
  • HEAD 类似于GET,只不过响应体不返回,只返回响应头
  • TRACE 回显服务器端收到的请求,测试的时候会用到这个
  • CONNECT 预留,暂无使用

这些方法的 HTTP 请求可以使用 ajax 来构造. (也可以通过一些第三方工具)

任何一个能进行网络编程的语言都可以构造 HTTP 请求。本质上就是通过 TCP socket 写入一个符合 HTTP 协议规则的字符串

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

HTTP请求行详解 的相关文章

  • PHP:获取 HTTP 协议版本(HTTP/1.1 与 HTTP/2)

    到目前为止 我的 php 应用程序到处都采用 HTTP 1 1 所以我定义了所有标题 如下所示 header HTTP 1 1 500 Internal Server Error 但现在我的服务器也支持 HTTP 2 我想使用正确的 HTT
  • 使用 jquery ajax 的两个 CORS 请求之间的时间间隔

    我正在使用 jQuery 向 Web 服务发出 CORS 请求 ajax 根据标准 有一个飞行前请求 然后是实际的 POST 请求 我注意到 每次我尝试进行 Web 服务调用时 都会有两个请求 一个是飞行前请求 一个是实际的 POST 请求
  • Curl 同时下载和上传同一文件

    不确定是否可能 但我一直在尝试使用curl 从 HTTP 位置下载文件并将其输出到 FTP 服务器上 如果这实际上可能的话 我真的很希望得到一些帮助 curl http example com down curl T ftp mysite
  • 登录后重定向和会话数据传输到另一个服务器/域

    经过一段时间的搜索和阅读文档后 我决定问你们 所以 场景很 简单 用户前往https Domain1 com https Domain1 com 输入他的凭据 尝试登录 登录成功后 根据用户类型和数据库中的其他信息 Domain1 服务器应
  • 如何检查ResponseWriter是否已经写入

    使用Golang的net http https golang org pkg net http 包裹 我如何检查是否ResponseWriter已写至 我收到以下错误消息 http 多个response WriteHeader调用 当然 我
  • wcf 服务不允许 POST

    一般来说 我对 Web 服务还很陌生 并且 我认为 陷入了配置 IIS 和 Web 服务本身的困境 我在 MVS 2010 中创建了一个 wcf Web 服务 并将其托管在 Windows 7 上的 IIS7 5 上 我使用soapUI 4
  • 检查客户端是否可以访问资源的 RESTful 方法是什么?

    我正在尝试确定 REST API 中用于确定客户端是否可以访问特定资源的最佳实践 两个简单的示例场景 电话簿查找服务 客户端通过访问例如查找电话号码 GET http host directoryEntries numbers 12345
  • 什么时候适合响应 HTTP 412 错误?

    我不清楚什么时候应该或不应该返回 HTTP 412 先决条件失败 Web 服务错误 我正在考虑在验证数据时使用它 例如 如果客户端 POST 的 XML 数据并且该数据缺少必需的数据元素 则以 412 和错误描述进行响应 这是否符合 HTT
  • 如何防止 Safari 在遵循同源重定向时删除授权标头?

    Safari 似乎放弃了Authorization遵循同源 301 重定向时的标头 例如这段JS代码 fetch api endpoint that redirects headers new Headers Authorization s
  • 允许获取请求但仅在我的域中?

    在我的网站上 我可以使用 GET 请求触发某些操作 例如隐藏或删除评论的功能 我不是很担心 但如果有人使用 img src url 设计攻击来删除评论或电子邮件 那会很烦人 有办法防止这种情况吗 我使用 httponlycookies 作为
  • 为什么大多数 API 分页不依赖 HTTP Range 标头?

    我搜索了很多 但找不到这个问题的好的答案 作为 HATEOAS 爱好者 我认为这个标题非常适合 Range item 1 20 100 在HTTP规范中 我不明白一些 矛盾 范围单位可以接受 其他范围单位 range unit bytes
  • 如何在AngularJS中正确使用HTTP.GET?具体来说,对于外部 API 调用?

    我在controller js中有以下代码 var myApp angular module myApp myApp service dataService function http delete http defaults header
  • 如果方法只需要 ajax 调用,会返回什么错误?

    如果操作期望仅通过 AJAX 使用 但在没有正确的 ajax 标头的情况下调用 则操作应返回什么 HTTP 状态 我觉得我应该指出一些错误 但我真的找不到合适的错误 我想最好是 405 Method not allowed 但是如果例如 a
  • 我可以在服务器端应用程序(PHP、Ruby、Python 等)上读取 URL 的哈希部分吗?

    假设 URL 为 www example com val 1 part2 PHP可以读取请求变量val1使用 GET 数组 是哈希值part2还可读吗 或者这仅取决于浏览器和 JavaScript 主要问题是浏览器甚至不会发送带有片段部分的
  • 使用 PHP 的 HTTP PUT、DELETE 和 I/O 流

    除了 HTTP PUT 方法之外 还有什么方法可以访问通过 HTTP PUT 方法发送的数据 putdata fopen php input r 我从未与PUT and DELETE方法和 putdata fopen php input r
  • 在 Android WebView 中获取 HTTP 状态代码

    我正在开发一个 Android 应用程序 该应用程序在 WebView 中加载网站 但有时该网站返回 HTTP 代码 500 我的问题是 有没有办法通过侦听器或另一个类从 WebView 获取 HTTP 状态代码 我尝试实现 WebView
  • PHP 空 $_POST

    我通过 HTTP POST 向 PHP 发送数据 这对于短于 8MB 8192KB 的数据来说效果很好 但是当发送的数据量更大时 PHP 会显示 POST变量为空 我强调的是 POST变量甚至不包含帖子字段的名称 它作为空数组存在 临界点似
  • 如何缓存WKWebView加载的资源?

    I use WKWebView显示包括图像在内的富文本 我想将这些图像缓存在磁盘上 如何获取这些 HTTP 请求并缓存响应 默认设置对 WKWebView 中加载的所有资源进行缓存 您所要做的就是在 HTTP 响应中为这些资源设置正确的标头
  • Flask - POST 错误 405 方法不允许

    我刚刚开始学习 Flask 我正在尝试创建一个表单 该表单将允许POST method 这是我的方法 app route template methods GET POST def template if request method PO
  • 使用 RCurl 登录 WordPress

    我想使用 R 的 RCurl 包登录 WordPress 网站 以便安装 WordPress 插件 可能在 WordPress 的某些选项页面上使用 postForm 由于该网站受密码保护 我请求您帮助如何验证我的 R 会话 我发现以下三个

随机推荐

  • String类型

    String类对象的创建 字符串声明 String stringName 字符串创建 stringName new String 字符串常量 或stringName 字符串常量 String类构造方法 1 public String 无参构
  • JIRA数据迁移到不同服务器及升级(7.1.4升级到7.3.4)

    JIRA SoftWare 官网有关备份 恢复JIRASoftware系统数据文档 071版本 https confluence atlassian com adminjiraserver071 backing up data 802592
  • STP原理

    STP生成树是针对于二层网络优化技术 主要的作用是为了冗余和防止环路的产生 STP的作用 逻辑上断开链路 防止网络风暴的产生 当线路故障的时候 阻塞接口被激活 恢复通信 BID 网桥ID BID 优先级 MAC地址 交换机默认优先级为327
  • 曲线平滑算法:三次Hermite曲线生成

    目录 1 三次Hermite曲线的参数方程 2 三次Hermite曲线的绘制 Hermite曲线是通过给定曲线的两个端点的位置矢量 以及两个端点处的切线矢量 来描述曲线的 如图1所示 这里先对Hermite曲线进行数学公式推导 然后讲述如何
  • 使用Vue Router来实现单页面应用(SPA)的导航和路由管理

    文章目录 安装和配置Vue Router 在项目的主文件 通常是main js 中导入和配置Vue 定义和配置路由 路由参数 嵌套路由 导航守卫 下一篇 Vue Router最佳实践 敬请期待 创作者 全栈弄潮儿 个人主页 全栈弄潮儿的个人
  • python 列表的删除

    1 删除列表中的元素使用remove 函数 示例 代码 fruit a b c d e fruit remove a print fruit 结果 2 使用del关键字来声明 代码 fruit a b c d e del fruit 0 2
  • hx711称重程序讲解_称重传感器是什么?PLC如何连接?怎样使用才能最精确?

    原创不易 请勿抄袭 重量是生活中一个重要的单位 那么在工业上它更是非常重要 生产环节中加了多少公斤的原料 产生了多少公斤的废品等等等等 这些数据都是支撑着整个工厂良好运行的必要元素 那么在工业上如何计算重量呢 我们需要使用称重传感器 称重传
  • 【转】Oracle性能调整的误区

    Oracle性能调整的误区 http tech it168 com db o 2006 07 03 200607031305157 shtml 为了提高性能 我们针对Oracle数据库本身提供了的方法或方案进行过不少的尝试 主要包括 共享服
  • JAVA BufferedWriter简单讲解

    JAVA缓冲流 BufferedWriter 简单讲解 BufferedWriter类是Writer的子类 它为了提高效率 加入了缓冲技术 将字符读取对象作为参数 BufferedWriter类将一个常量值作为默认缓冲区的大小 它同时也可以
  • 三相pwm整流器simulink仿真。 采用电压电流双闭环

    三相pwm整流器simulink仿真 采用电压电流双闭环 SVPWM调制 附带三篇参考文献 ID 4250669791519649
  • (Java 基础知识) Java反射

    本篇文章依旧采用小例子来说明 因为我始终觉的 案例驱动是最好的 要不然只看理论的话 看了也不懂 不过建议大家在看完文章之后 在回过头去看看理论 会有更好的理解 下面开始正文 案例1 通过一个对象获得完整的包名和类名 1 2 3 4 5 6
  • docker如何查看容器的挂载目录

    执行命令 docker inspect 容器ID grep Mounts A 20 Mounts Type bind Source root projects project dist Destination root share ngin
  • 利用Repeater控件显示主-从关系数据表

    本文介绍了一种利用Repeater控件显示主 从关系数据表的方法 原文参见 http support microsoft com default aspx scid kb en us 306154 NestedRepeater aspx
  • Lora配置

    文章目录 前言 一 LoRa是什么 二 使用步骤 总结 前言 随着物联网技术的发展 越来越多的应用场景需要进行数据传输和通信 而LoRa技术的出现 为长距离 低功耗 低速率的通信提供了一种可靠的解决方案 正点原子的LoRa模块 是一种基于S
  • Oracle 输出方式

    用过几次经常忘记 特此做个笔记 1 Oracle 输出没有sqlserver方便 直接print message 就行 而是需要放到 块 中输出 比如下面的匿名块 set serveroutput on declare begin dbms
  • pcm vlc 文件_VLC播放pcm

    Applications VLC app Contents MacOS VLC demux rawaud rawaud channels 1 rawaud samplerate 48000 rawaud fourcc s8 Users lz
  • 白银价格波动因素是什么?

    在白银产品的投资中 人们要更加全面的对市场进行了解 其中涉及到的范围比较广阔 只有对整个市场的发展和影响因素进行细致的分析 才可以更好的参与到白银产品的投资中 为了更好的获得实际性的利益 重点要对白银的价格进行细致的了解 这样使人们在投资时
  • 特别篇:input小结

    input 我们日常中在使用Python时都会使用input 在控制台进行输出 但是不知道大家发现没有 因为Python是一种动态语言 所以不会像Java中的Scanner类 在代码中可以控制输入的类型 所以当我们输入数字时 底层也会把我们
  • 程序流程图画法复习-三种循环语句(for,while,do while)

    程序流程图画法复习 1 程序流程图的作用 程序流程图的作用程序流程图的作用程序流程图的作用 程序流程图是人们对解决问题的方法 思路或算法的一种描述 流程图的优点 a 采用简单规范的符号 画法简单 b 结构清晰 逻辑性强 c 便于描述 容易理
  • HTTP请求行详解

    目录 一 认识URL 二 认识方法 2 1 GET方法 2 2 POST方法 2 3 其他方法 请求行也就是HTTP请求的第一行 接下来将对第一行内容进行详细解释 一 认识URL 平时我们俗称的 网址 其实就是说的 URL Uniform