聊聊 HTTP 常见的请求方式
在互联网已经渗透了生产、生活各个角落的今天,人们可以登录微信语音聊天,可以随手“扫”到各种功能的二维码,可以通过方便快捷的无人超市购物……这种互联网领域的跨越式发展,不仅满足了人们生活中各种各样的需求,也催生了一个个新兴领域的诞生,为经济增长注入了强劲动力。
上网的过程,其实是浏览器向服务端发送请求,之后将服务端主机上的内容显示到本地的一个流程。而浏览器与服务器之间的请求走的就是 HTTP 协议。

自 1990 年以来,超文本传输协议(HTTP) 就成为了互联网数据通信的基础,它是分布式协作超媒体信息系统的应用层协议,是一种通用的无状态协议。具体来讲就是让服务器不保留与客户交易时的任何状态,由客户端单方面向服务器发送请求数据。
HTTP 主要有 0.9、1.0、1.1、2.0 版本,其中 1.1 版本定义了 9 种 Method(方法),分别是:

这些方法中,最常见的便是 GET 和 POST,但是可能很少有人关注两者都有什么作用,我们一起来看一看吧。
GET vs POST Method
GET 和 POST 都是 HTTP 协定的一种请求标准,同样基于 TCP 传输层协议。两者主要区别在存放数据的方式不同,进而造成的传输量、安全性等差异。
GET
我们先来看一下 GET 是怎么传送信息的:
<form method="get" action="">
<input type="text" name="id" />
<input type="submit" />
</form>
如上完成代码点击“提交”之后,浏览器的网址就会变成 http://www.a.com/a.html?id=11111,浏览器会自动将表单内容转为 Query String 加在 URL 后面进行请求。这样,从浏览器的网址里就可以看见表单要传送的资料。
POST
接下来我们看看 POST 的传送:
<form method="post" action="">
<input type="text" name="id" />
<input type="submit" />
</form>
提交之后,地址并无变化,但是通过查看 HTTP Request 的内容可以发现,POST 是将表单资料放在 Message Body 进行传送。
看不太懂代码的小伙伴也不要着急,我们以现实生活中寄信的机制来举例。如果说信封的撰写格式是 HTTP,我们可以将信封外的内容称为 Http-Header,信封内的书信称为 Message Body。 HTTP Method 就是你要告诉邮差的寄信规则。
而假设 GET 就如同明信片一样将要传递的信息写在信封(Http-Header)上,是信封内不装信件的寄送方式,是直接将要传送的信息以 Query String(一种 Key/Vaule 的编码方式)的形式加在地址(URL)后面进行传送。那 POST 就是信封内装有信件的寄送方式,不但信封可以写东西,信封内(Message Body)还可以放入你想要寄送的其他资料,之后由邮差进行传送。
GET VS POST
总体来说,两种请求方式有如下区别:
- 传递参数方式:GET 是将参数写在 URL 中 ? 的后面,并用 & 分隔不同参数;而 POST 是将信息存放在 Message Body 中传送。
- 传输资料量限制:HTTP 协定本身没有限制 URL 及正文长度,多半是浏览器为了避免过长的 URL 消耗过多的资源而限制长度;而以 POST 请求通常都没有内容长度限制的问题。
- 安全性问题:GET 请求方式从浏览器的 URL 地址就可以看到参数;但无论是 GET 还是 POST 其实都是不安全的,因为 HTTP 协定是明文传输,只要拦截封包便能轻易获取重要资讯。想要安全传输资料,必须使用 SSL/TLS来加密封包,也就是 HTTPS。
除了我们较为常见的 GET 和 POST 两种请求方式,现在其他请求方式也越来越多的被使用。例如又拍云基于 RESTful 架构的 REST API 中,除了使用 GET 获取文件外,也会使用 PUT 来上传文件,DELETE 用来删除文件,HEAD 用来获取文件信息,使用 PATCH 来修改文件 Metadata 信息等等。
请求与状态码
当然,上面讲的请求方式虽然很常见,但是如果不是稍微有些了解或者对互联网有些关注的小伙伴,可能并不会注意到。但是我们接下来说的肯定是大家都有见过的。毕竟在我们使用网页浏览内容的过程中肯定,有见到过例如:404 NOT FOUND、504 TIME OUT,这类的提示。其实这个是 HTTP 的状态码。
HTTP 状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两位不具有任何分类作用。当用户访问一个网页时,用户的浏览器会向网页所在服务器发出请求。在浏览器接收并显示网页前,此网页所在的服务器会返回一个包含 HTTP 状态码的信息头(Header)用以响应浏览器的请求。而这个状态码则可以帮助我们粗略的判断请求结果或错误原因。
HTTP 状态码共分为 5 种类型:

一直在使用又拍云 CDN 的小伙伴儿对一些常见的状态码肯定很熟悉。比如,网站访问成功请求会返回 200;开启了强制 HTTPS,会返回 301;如果开启了防盗链被拦截,则是返回 403 等等。
在这些常规的状态码下,又拍云还进行了进一步的封装,让我们可以通过查询又拍云错误码表的方式获得更为准确的网站报错原因。
{"code":"40310013","msg":"invalid user token."}
查询错误码表得知,触发了 Token 防盗链规
讲了这么多,是不是对 HTTP 请求有了更近一步的了解?当然了,HTTP 协议不仅仅于此,有兴趣的小伙伴儿们要持续关注哦~
推荐阅读
聊聊 HTTP 常见的请求方式的更多相关文章
- Spring RestTemplate中几种常见的请求方式GET请求 POST请求 PUT请求 DELETE请求
Spring RestTemplate中几种常见的请求方式 原文地址: https://blog.csdn.net/u012702547/article/details/77917939 版权声明 ...
- Spring RestTemplate中几种常见的请求方式
https://github.com/lenve/SimpleSpringCloud/tree/master/RestTemplate在Spring Cloud中服务的发现与消费一文中,当我们从服务消 ...
- RestTemplate中几种常见的请求方式
GET请求 第一种:getForEntity getForEntity方法的返回值是一个ResponseEntity<T>,ResponseEntity<T>是Spring对H ...
- 4种常用的Ajax请求方式
在jQuery中,AJAX常见的请求方式主要有一下4种: 1.$.ajax()返回其创建的 XMLHttpRequest 对象 $.ajax() 只有一个参数:参数key/value对象,包含各配置及 ...
- Ajax学习系列——jQuery中Ajax的请求方式
在jQuery中,Ajax常见的请求方式主要有4种. 1.$.ajax()返回其创建的XMLHttpRequest对象. $.ajax({ type:"POST", content ...
- http协议中常见的状态码以及请求方式,http协议的组成
请求状态码: 2xxx:表示请求成功,例如200. 3xxx:表示请求被重定向,表示完成请求,需要进一步操作,例如 302. 4xxx:表示请求错误,例如:404,资源没有找到. 5xxx:表示服务器 ...
- http常见的get请求方式和set请求方式。
一.Get请求方式 以下是我写的一个用get请求方式获取api工厂中汇率的类. package com.example; import java.io.BufferedReader; import j ...
- IOS 网络请求方式
iOS开发中的网络请求 今天来说说关于iOS开发过程中的网络请求. 关于网络请求的重要性我想不用多说了吧.对于移动客户端来说,网络的重要性不言而喻.常见的网络请求有同步GET, 同步POST, 异 ...
- 转:jQuery 常见操作实现方式
http://www.cnblogs.com/guomingfeng/articles/2038707.html 一个优秀的 JavaScript 框架,一篇 jQuery 常用方法及函数的文章留存备 ...
随机推荐
- 「LOJ 537」「LibreOJ NOIP Round #1」DNA 序列
description NOIP 复赛之前,HSD 桑进行了一项研究,发现人某条染色体上的一段 DNA 序列中连续的\(k\)个碱基组成的碱基序列与做题的 AC 率有关!于是他想研究一下这种关系. 现 ...
- 模拟赛38 B. T形覆盖 大模拟
题目描述 如果玩过俄罗斯方块,应该见过如下图形: 我们称它为一个 \(T\) 形四格拼板 .其中心被标记为\(×\). 小苗画了一个 \(m\) 行 \(n\) 列的长方形网格.行从 \(0\) 至 ...
- get、post、
1.get请求 get请求会把参数放在url后面,中间用?隔开,也可以把参数放在请求body中,如果参数中有中文,http传的时候requests框架会将中文换成urlencode编码 2.get和p ...
- Prometheus+Grafana+Alertmanager实现告警推送教程 ----- 图文详解
前言 本文主要介绍的是Prometheus采集数据,通过Grafana加上PromQL语句实现数据可视化以及通过Alertmanage实现告警推送功能.温馨提示,本篇文章特长,2w多的文字加上几十张图 ...
- 这篇建议java开发都看看,对Java方法及加深理解的很深,值得一看!
方法和加深 方法的定义 修饰符 返回类型 break:跳出switch,结束循环 和 return 的区别 方法名:注意规范 见名知意 参数列表(参数类型,参数名)- 异常抛出 // Demo01 类 ...
- 日志聚合工具之 Loki
本文使用的 Loki 和 Promtail 版本为 1.6.1,Grafana 版本为 7.2.0:部署在 Linux 服务器 Loki 负责日志的存储和查询:Promtail 负责日志的采集并推送给 ...
- moviepy音视频剪辑:使用VideoFileClip、AudioFileClip和write_videofile、write_audiofile进行音视频的加载和输出
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.概述 在本地进行音视频处理时,首先要从视频文件 ...
- 第15.12节PyQt(Python+Qt)入门学习:可视化设计界面组件布局详解
一.引言 在Qt Designer中,在左边部件栏的提供了界面布局相关部件,如图: 可以看到共包含有四种布局部件,分别是垂直布局(Vertical Layout).水平布局(Horizontal La ...
- pandas LabelEncoder方法,对离散值进行编码,并储存
# 3.离散值进行LabelEncoder #处理数据的三个步骤,去重,处理缺失值,离散值LabelEncoder from sklearn import preprocessingfrom skle ...
- leetcode(三)——2020.05.31
(上周7道题完成) 本周leetcode题目(from leetcode hot100): 15 17 19 21 33 94 42 额外完成: 22(回溯), 8, 31,200