Http目前有1.0和1.1两个版本
http 1.0是非持续性连接
http 1.1是持续性连接
Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。
GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。
什么是Http?
Http是基于TCP/IP数据通信协议的一个通信规则。
不管是Get、Post、Put还是Delete都是基于TCP/IP来做的,都是TCP/IP链接。GET和POST能做的事情是一样一样的。你要给GET加上request body,给POST带上url参数,技术上是完全行的通的。
但是,它们之间的区别,到底有哪些呢?
我们先看看它们之间是怎么进行工作的。
下面对上图进行简单的分析:
请求行
由请求方法字段、URL 字段、协议版本字段三部分构成,它们之间由空格隔开。常用的请求方法有:GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。
请求头
请求头由 key/value 对组成,每行为一对,key 和 value 之间通过冒号(:)分割。请求头的作用主要用于通知服务端有关于客户端的请求信息。
典型的请求头有:
User-Agent:生成请求的浏览器类型
Accept:客户端可识别的响应内容类型列表;星号* 用于按范围将类型分组。*/*表示可接受全部型,type/*表示可接受 type 类型的所有子类型。
Accept-Language: 客户端可接受的自然语言
Accept-Encoding: 客户端可接受的编码压缩格式
Accept-Charset: 可接受的字符集
Host: 请求的主机名,允许多个域名绑定同一 IP 地址
connection:连接方式(close 或 keeplive)
Cookie: 存储在客户端的扩展字段空行
最后一个请求头之后就是空行,用于告诉服务端以下内容不再是请求头的内容了。
请求内容
请求内容主要用于 POST 请求,与 POST 请求方法配套的请求头一般有 Content-Type(标识请求内容的类型)和 Content-Length(标识请求内容的长度)
响应报文
HTTP 响应报文由状态行、响应头、空行和响应内容 4 个部分构成。
如下图所示:
下面对响应报文格式进行简要的分析说明:
状态行
由 HTTP 协议版本、状态码、状态码描述三部分构成,它们之间由空格隔开。
状态码由 3 位数字组成,第一位标识响应的类型,常用的 5 大类状态码如下:
1xx:表示服务器已接收了客户端的请求,客户端可以继续发送请求
2xx:表示服务器已成功接收到请求并进行处理
3xx:表示服务器要求客户端重定向
4xx:表示客户端的请求有==非法内容==
5xx:标识服务器未能正常处理客户端的请求而出现意外错误
常见状态码说明:
200 OK: 表示客户端请求成功
400 Bad Request: 表示客户端请求有语法错误,不能被服务器端解析
401 Unauthonzed: 表示请求未经授权,该状态码必须与WWW-Authenticate 报文头一起使用
404 Not Found:请求的资源不存在,例如输入了错误的 url
500 Internal Server Error: 表示服务器发生了不可预期的错误,导致无法完成客户端的请求
503 Service Unavailable:表示服务器当前不能处理客户端的请求,在一段时间后服务器可能恢复正常响应头
一般情况下,响应头会包含以下,甚至更多的信息。
Location:服务器返回给客户端,用于重定向到新的位置
Server: 包含服务器用来处理请求的软件信息及版本信息
Vary:标识不可缓存的请求头列表
Connection: 连接方式。
对于==请求端==来讲:close 是告诉服务端,断开连接,不用等待后续的求请了。keeplive 则是告诉服务端,在完成本次请求的响应后,保持连接,等待本次连接后的后续请求。
对于==响应端==来讲:close 表示连接已经关闭。keeplive 则表示连接保持中,可以继续处理后续请求。Keep-Alive 表示如果请求端保持连接,则该请求头部信息表明期望服务端保持连接多长时间
(秒),例如 300 秒,应该这样写 Keep-Alive: 300空行
最后一个响应头之后就是空行,用于告诉请求端以下内容不再是响应头的内容了。
响应内容
服务端返回给请求端的文本信息。
1.根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的。
这里的安全,是相对数据操作而言,因为它不会对数据进行修改。
幂等:抽象代数概念,多次请求,返回结果相同。
2.根据HTTP规范,POST表示可能修改变服务器上的资源的请求。
Get |
Post |
传输数据量相对小,1KB(1024字节)一下 |
传输数据量相对大本身是没有明确的限制,主要看接收服务器的控制 |
请求参数放URL,也有放Body里面的,但如果服务器不接收,等同于没传 |
请求参数放实体里面 |
等同于一个查询请求,对数据本身不会做修改 |
可以对数据做修改操作 |
一个TCP数据包 |
两个TCP数据包(先发送一个TCP数据包,消息头header,然后服务器响应100 continue,再发送data,服务器响应返回状态码 200 ) |
|
|
早期的Web MVC框架设计者们并没有有意识地将URL当作抽象的资源来看待和设计,所以导致一个比较严重的问题是传统的Web MVC框架基本上都只支持GET和POST两种HTTP方法,而不支持PUT和DELETE方法。
* 简单解释一下MVC:MVC本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器。使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。
参考资料:
http://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html
http://www.techweb.com.cn/network/system/2016-10-11/2407736.shtml
相关推荐
超文本传输协议(HTTP)的设计目的是保证客户机与服务器之间的...在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST。 GET - 从指定的资源请求数据。 POST - 向指定的资源提交要被处理的数据
在IT行业中,Visual C++(简称VC)是...通过分析和学习这个示例,你可以更好地理解如何在VC环境下实现HttpGet和HttpPost通信,以及如何解析Json数据。这个例子对于理解Web服务交互和Json处理在C++中的应用非常有帮助。
在这个实例中,我们将深入探讨如何在VS2010中使用C#进行HTTP通信,主要关注GET和POST方法。这两种方法是HTTP协议中最基础且广泛使用的请求类型,用于客户端(如浏览器或应用程序)与服务器之间的数据交换。 GET方法...
在Java编程中,HTTP POST和GET是两种基本的HTTP请求方法,用于客户端向服务器发送数据。为了在Java中实现这些功能,我们需要引入特定的库,这些库通常被打包成JAR(Java Archive)文件。本篇文章将详细讲解HTTP POST...
使用`HttpURLConnection`进行POST请求的流程与GET类似,但有几点不同: 1. 在设置请求方法为`POST`之后,需要使用`setDoOutput(true)`开启输出流。 2. 使用`getOutputStream()`获取输出流,然后写入要发送的数据。...
本文将深入探讨如何使用C#编程语言来实现HTTP GET和POST请求,以供学习者参考。 GET和POST是HTTP协议中最常见的两种请求方法。GET用于获取资源,而POST则常用于提交数据。 **HTTP GET方法** GET请求通常用于获取...
本资源是一个封装类,采用异步方式解决了Wininet不能设置超时的问题,当前异步采用C++...MFC程序中通过HttpGet和HttpPost方式向WebService发送请求,WebService以Json的方式返回数据,MFC程序解析Json,得到指定数据。
GET和POST作为HTTP协议中最常用的两种请求方式,各自有其适用的场景和局限性。GET适合用于查询数据,尤其是那些不改变服务器状态的操作;而POST适用于需要发送大量数据或修改服务器状态的操作。在实际应用中,应根据...
这个类简化了C#中执行HTTP GET和POST请求的流程,使得开发者可以更专注于业务逻辑,而不是网络通信的细节。通过这样的封装,你可以方便地在其他类和方法中调用`GetAsync`和`PostAsync`,以处理Web服务的交互。 在...
在QT框架中,进行HTTP通信通常使用QNetworkAccessManager类,它是QT提供的网络访问模块,可以处理HTTP和FTP协议的请求。本项目中,我们关注的是GET和POST两种请求方式,以及它们的同步和异步实现。下面将详细介绍这...
在Microsoft Foundation Class (MFC)库中,HttpClient是用于实现HTTP通信的重要工具,特别是对于发送GET和POST请求。本文将详细讲解如何在MFC中利用HttpClient进行GET和POST操作。 首先,我们需要理解HTTP协议的...
本主题聚焦于如何在DelphiXE10.3环境中,将HTTP GET和POST请求封装到DLL,并在独立的EXE程序中调用这些功能。以下是对这个过程的详细解释: 首先,我们需要理解`HTTP GET`和`HTTP POST`。GET是HTTP协议中最基础的...
在VC++编程环境中,HTTP(超文本传输协议)Get和Post请求是常见的网络通信方法,主要用于从或向Web服务器发送数据。MFC(Microsoft Foundation Classes)库为VC++提供了便捷的方式来实现这些功能。本文将详细讲解...
在C#编程中,HTTP(超文本传输协议)是用于客户端和服务器之间通信的主要协议,主要涉及GET和POST两种常见的请求方法。本文将详细介绍如何在C#中实现这两种请求,并结合给定的文件名,推测这是一个简单的C#桌面应用...
首先,让我们了解一下GET和POST的区别。GET方法是向服务器发送一个查询,通常用于获取资源,例如网页、图片等。它将参数附加到URL上,因此请求的数据量有限,且请求历史会被浏览器记录。POST方法则更适用于提交数据...
本文将详细介绍一个封装了HTTP GET和POST请求的工具类,以及如何使用此类进行网络请求。该工具类支持HTTPS,确保数据传输的安全性。 首先,我们来看`HttpUtils`类,这是核心的网络请求工具类。在`HttpUtils`中,...
在IT行业中,HTTP协议是网络通信的基础,而GET和POST是HTTP协议中最常见的两种请求方法。本文将深入探讨GET和POST的区别、应用场景以及VB(Visual Basic)中如何使用它们。 GET和POST是HTTP请求的核心方法,用于从...
HttpClient是Apache基金会开发的一个HTTP客户端库,广泛应用于Java编程中,用于执行HTTP请求,包括GET、POST以及文件下载等操作。本篇文章将深入探讨如何利用HttpClient实现这些功能,并提供实战代码示例。 首先,...