边锋游戏向post服务js 发送post请求协失败什么意思

HTTP协议-POST方法详解 - 推酷
HTTP协议-POST方法详解
一、HTTP协议
HTTP/1.1协议(http://www.faqs.org/rfcs/rfc2616.html)规定的HTTP请求方法有:OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT这几种。其中POST方法一般用来向服务端提交数据,接下来我们主要讨论POST提交数据的几种方式。
二、POST方法
通常HTTP协议是以ASCII编码进行传输,建立在TCP/IP协议之上的应用层协议。HTTP协议报文将请求分为三个部分:状态行、请求头、消息主体。协议格式如下:
&method& &request-url& &version&
&entity-body&
HTTP协议规定POST提交的数据必须放在消息主体(entity-body)中,但协议并没有规定数据必须使用什么编码方式。实际上,开发者完全可以自己决定消息主体的格式,只要最后发送的HTTP请求满足上面的格式就可以。
当客户端数据发送出去,解析由服务端来完成。一般服务端语言如:php、python等,以及它们的framework、WSGI等,都内置了自动解析常见数据格式的功能。服务端通常是根据请求头(headers)中的Content-Type字段来获知请求中的消息主体是用何种方式编码,再对主体进行解析。
1. application/x-www-form-urlencoded编码方式
这是最常见的POST提交数据的方式了。浏览器的原生form表单,如果不设置enctype的属性,那么最终就会以此方式提交数据。请求类似于下面这样:
POST http://www.qmailer.net HTTP/1.1
Content-Type: application/x-www-form- charset=utf-8
name=qmailer&domain=net
首先,Content-Type被指定为application/x-www-form-urlencoded;
其次,提交的数据按照 key1=val1&key2=val2的方式进行编码,key和val都进行了URL转码。
大部分服务端语言都对这种方式有很好的支持。例如PHP中,$_POST[‘name]可以获取到name的值,$_POST[‘domain’] 可以得到domain的值。
很多时候,我们用Ajax提交数据时,也是使用这种方式。例如JQuery,Content-Type默认值都是application/x-www-form-charset=utf-8。
2. multipart/form-data编码方式
这也是很常见的POST数据提交的方式。我们使用表单上传文件时,必须让form的enctyped等于这个值。例如:
Content-Type:multipart/form- boundary=${bound}
--${bound}
Content-Disposition: form- name=&text&
--${bound}
Content-Disposition: form- name=&file&; filename=&chrome.png&
Content-Type: image/png
PNG ... content of chrome.png ...
--${bound}--
首先,${bound} 是一个占位符,代表我们规定的分割符,可以自己任意规定,但为了避免和正常文本重复了,尽量要使用复杂一点的内容。
然后,Content-Type里指明了数据是以mutipart/form-data来编码,本次请求的boundary是什么内容。消息主体里按照字段个数又分为多个结构类似的部分,每部分都是以–boundary开始,紧接着内容描述信息,然后是回车,最后是字段具体内容(文本或二进制)。如果传输的是文件,还要包含文件名和文件类型信息。消息主体最后以–boundary–标示结束。
关于mutipart/form-data的详细定义,请前往rfc1867查看。
3. application/json编码方式
上面提到的这两种POST数据的方式,都是浏览器原生支持的,而且现阶段原生form表单也只支持这两种方式。但是随着越来越多的Web站点,尤其是WebApp,全部使用Ajax进行数据交互之后,我们完全可以定义新的数据提交方式,给开发带来更多便利。
application/json 这个Content-Type作为响应头大家肯定不陌生。实际上,现在越来越多的人把它作为请求头,用来告诉服务端消息主体是序列化后的JSON字符串。由于JSON规范的流行,除了低版本IE之外的各大浏览器都原生支持JSON.stringify,服务端语言也都有处理JSON的函数,使用JSON不会遇上什么麻烦。
Google的AngularJS中的Ajax功能,默认就是提交JSON字符串。例如下面这段代码:
var data = {'title':'test', 'sub' : [1,2,3]};
$http.post(url, data).success(function(result) {
最终发送的请求是:
Content-Type: application/ charset=utf-8
{&title&:&test&,&sub&:[1,2,3]}
这种方案,可以方便的提交复杂的结构化数据,特别适合RESTful的接口。各大抓包工具如Chrome自带的开发者工具、Firebug、Fiddler,都会以树形结构展示JSON数据,非常友好。但也有些服务端语言还没有支持这种方式。
4. text/xml编码方式
XML-RPC(XML Remote Procedure Call)是一种使用HTTP作为传输协议,以XML作为编码方式的远程调用规范。典型的 XML-RPC 请求是这样的:
Content-Type: text/xml
&!--?xml version=&1.0&?--&
&methodcall&
&methodname&examples.getStateName&/methodname&
&value&&i4&41&/i4&
&/methodcall&
XML-RPC协议简单、功能够用,各种语言的实现都有。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致网络协议(3)
请求方法是请求一定的Web页面的程序或用于特定的URL。可选用下列几种:
GET: 请求指定的页面信息,并返回实体主体。
HEAD: 只请求页面的首部。
POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。
PUT: 从客户端向服务器传送的数据取代指定的文档的内容。
DELETE: 请求服务器删除指定的页面。
OPTIONS: 允许客户端查看服务器的性能。
TRACE: 请求服务器在响应中的实体主体部分返回所得到的内容。
PATCH: 实体中包含一个表,表中说明与该URI所表示的原内容的区别。
MOVE: 请求服务器将指定的页面移至另一个网络地址。
COPY: 请求服务器将指定的页面拷贝至另一个网络地址。
LINK: 请求服务器建立链接关系。
UNLINK: 断开链接关系。
WRAPPED: 允许客户端发送经过封装的请求。
Extension-mothed:在不改动协议的前提下,可增加另外的方法。
当服务器响应时,其状态行的信息为HTTP的版本号,状态码,及解释状态码的简单说明。现将5类状态码详细列出:
① 客户方错误
非认证信息
未修改(Not Modified)
④ 客户方错误
错误请求(Bad Request)
禁止(Forbidden)
未找到(Not Found)
方法不允许
需要代理认证
请求实体太大
请求URI太长
不支持媒体类型
⑤ 服务器错误
服务器内部错误
未实现(Not Implemented)
505 HTTP版本不支持
关于实体头部的内容还可以有:
Last Modified :请求文档的最近修改时间。
Expires :请求文档的过期时间。
Connect-length:文档数据的长度。
WWW-authenricate:通知客户端需要的认证信息。
Connect-encoding :说明有无使用压缩技术。
Transfer-encoding :说明采用的编码变换类型。
标准Http协议支持六种请求方法,即:
5,OPTIONS
但其实我们大部分情况下只用到了GET和POST。如果想设计一个符合RESTful规范的web应用程序,则这六种方法都会用到。不过即使暂时不想涉及REST,了解这六种方法的本质仍然是很有作用的。大家将会发现,原来web也是很简洁明了的。下面依次说明这六种方法。
0,GET:GET可以说是最常见的了,它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。
1,HEAD:HEAD和GET本质是一样的,区别在于HEAD不含有呈现数据,而仅仅是HTTP头信息。有的人可能觉得这个方法没什么用,其实不是这样的。想象一个业务情景:欲判断某个资源是否存在,我们通常使用GET,但这里用HEAD则意义更加明确。
2,PUT:这个方法比较少见。HTML表单也不支持这个。本质上来讲, PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。举个例子:如一个用于提交博文的URL,/addBlog。如果用PUT,则提交的URL会是像这样的”/addBlog/abc123”,其中abc123就是这个博文的地址。而如果用POST,则这个地址会在提交后由服务器告知客户端。目前大部分博客都是这样的。显然,PUT和POST用途是不一样的。具体用哪个还取决于当前的业务场景。
3,DELETE:删除某一个资源。基本上这个也很少见,不过还是有一些地方比如amazon的S3云服务里面就用的这个方法来删除资源。
4,POST:向服务器提交数据。这个方法用途广泛,几乎目前所有的提交操作都是靠这个完成。
5,OPTIONS:这个方法很有趣,但极少使用。它用于获取当前URL所支持的方法。若请求成功,则它会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。
其实还有一个TRACE方法,不过这个基本上不会用到,这里就不介绍了。以上的六种方法,我们可以跟数据库的CRUD增删改查操作对应起来:
CREATE :PUT
UPDATE:POST
DELETE:DELETE
这样一来就实现了HTTP和数据库操作(其实不光是数据库,任何数据如文件图表都是这样)的完美统一,这也是REST的精髓之一。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:4694次
排名:千里之外
原创:71篇
转载:21篇
(1)(1)(1)(89)查看: 1165|回复: 10
post 登录成功,post论坛私信无论如何发送不成功!求各位前辈帮助
阅读权限30
在线时间 小时
签到天数:2 天结帖率: (2/10)
论坛私信无论如何发送不成功!求各位前辈大神帮助,附上源码
(138.63 KB, 下载次数: 24)
15:26 上传
点击文件名下载附件
补充内容 ( 09:01):
登录我也不知道是什么原因,一般要试个5~6次才能登录成功。
我试了很多次,返回的是& &
alert('两次发送短消息太快,请稍候再发送');
我知道网上发消息应该在15秒左右,但是我点发送,无论隔多久都是这个返回消息。
补充内容 ( 10:05):
还有就是返回&&页面被偷走了,这个好像是 404错误
实在是没办法了
回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至
可获得加分喔。友情提醒:本版被采纳的主题可在
帖子申请荣誉值,获得 1点 荣誉值,荣誉值可兑换终身vip用户组哦。快捷通道: →
阅读权限90
在线时间 小时
签到天数: 12 天结帖率: (1/1)
您可以选择打赏方式支持他
阅读权限120
在线时间 小时
签到天数: 18 天结帖率: (22/26)
cookie有带上吗
您可以选择打赏方式支持他
阅读权限70
在线时间 小时
签到天数: 3 天结帖率: (1/5)
带cookies吗
您可以选择打赏方式支持他
阅读权限50
在线时间 小时
签到天数: 7 天结帖率: (13/13)
我以前做这种发送信息的post的也碰到了这样的问题
多检查下 , 把协yi头和cookies带上
您可以选择打赏方式支持他
阅读权限90
在线时间 小时
签到天数: 1 天结帖率: (1/7)
你都没有说失败返回什么
您可以选择打赏方式支持他
阅读权限70
在线时间 小时
签到天数: 18 天结帖率: (5/5)
大体看了下还是cookice问题,另外你判断成功失败的编码转换也不对!
您可以选择打赏方式支持他
阅读权限70
在线时间 小时
结帖率: (1/5)
QQ截图33.png (25.85 KB, 下载次数: 0)
23:25 上传
= =&&验证码一直错误啊
您可以选择打赏方式支持他
阅读权限30
在线时间 小时
签到天数: 2 天结帖率: (2/10)
= =&&验证码一直错误啊
这个也不知道是什么原因,多试几次才能登录成功~
您可以选择打赏方式支持他
阅读权限30
在线时间 小时
签到天数: 2 天结帖率: (2/10)
你都没有说失败返回什么
我试了很多次,返回的是& &
alert('两次发送短消息太快,请稍候再发送');
我知道网上发消息应该在15秒左右,但是我点发送,无论隔多久都是这个返回消息。
您可以选择打赏方式支持他
精易论坛 - 有你更精彩 /1
2016年安卓在手机市场已经超过80%,此次培训主讲安卓apk文件的代码剖析与封包解密,消息封包解密后可以通过易语言或其它开发工具编写软件模拟手机端app的操作,从而实现在电脑端运行软件就批量、自动化、高效率操作手机app应用上面的功能!
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
揭阳精易科技有限公司申明:我公司所有的培训课程版权归精易所有,任何人以任何方式翻录、盗版、破解本站培训课程,我们必将通过法律途径解决!
公司简介:揭阳市揭东区精易科技有限公司致力于易语言教学培训/易语言学习交流社区的建设与软件开发,多年来为中小企业编写过许许多多各式软件,并把多年积累的开发经验逐步录制成视频课程供学员学习,让学员全面系统化学习易语言编程,少走弯路,减少对相关技术的研究与摸索时间,从而加快了学习进度!
Powered by

我要回帖

更多关于 c 发送post请求 的文章

 

随机推荐