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 - 向指定的资源提交要被处理的数据
本资源是一个封装类,采用异步方式解决了Wininet不能设置超时的问题,当前异步采用C++...MFC程序中通过HttpGet和HttpPost方式向WebService发送请求,WebService以Json的方式返回数据,MFC程序解析Json,得到指定数据。
基于VS2010利用C#实现HTTP在 GET和POST方法的样例代码,提供大家学习参考。欢迎下载学习
_网络通信之通过GET和POST方式提交参数给web应用
MFC程序中通过HttpGet和HttpPost方式向WebService发送请求,WebService以Json的方式返回数据,MFC程序解析Json,得到指定数据。
VC通过Http协议Get或Post方式与WebService通信,解析返回的Json.zip
1.网页打不开的post不了,不存在的属性post不了,属性不区分大小写 2.post模式下内容格式要对,=赋值不能少 3.get模式下url=不能少 4.header 200表示响应成功,post 的内容要用web services readpostdata,两个VI...
get和post实现
java简单实现get,post通信
C#-HTTP请求接收(Post数据流,GET,表单)
C语言源码:http get/post 下载文件,里面包括了ip解析,端口号解析,文件读写等。
labview HTTP POST 通信程序
labview创建webservice,客户端,C#创建客户端 最终实现C#和labview使用http进行互相通信
博客:【安卓学习之工具学习】网络通信测试工具-socket/post/get 的附件,博客连接为:http://blog.csdn.net/ljb568838953/article/details/52493675 附件里面含: fiddlersetup_v4.6.2.0.32002.exe NetAssist_v4.2....
C# 编写 post get 底层 C# 编写 post get 底层 C# 编写 post get 底层
Android中通过GET和POST方式以及使用HttpClient框架通过网络通信提交参数给web应用案例!
涉及范围,delphi6基本控件界面控件,线程,wininet api库文件为7z格式,号称宇宙中最强大的压缩格式,请自行去www.7-zip.org下载解压软件
本资源涉及服务器的搭建(利用node.js)与vue-axios中get与post网络请求的使用方法,同时,讲述了vue中如何实现跨域(配置转发的域),组件间通信等等,代码的分析较为详细,适合初学者。
网络通信类。post,get 信息到服务器VB技术很实用的源码
andriod Volley的HTTP网络通信,包含get、post请求,获取String/JsonObject/JsonArray数据(android客户端+java服务器端)