微信小程序自学 随笔3 Failed to load resource: the server responded with a status of 400 (Bad Request)

  • ajax
    AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。
    通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
    传统的网页(不使用 AJAX)如果需要更新内容,必须重载整个网页页面。

  • HTTP Header
    HTTP(HyperTextTransferProtocol) 即超文本传输协议,目前网页传输的的通用协议。HTTP协议采用了请求/响应模 型,浏览器或其他客户端发出请求,服务器给与响应。就整个网络资源传输而言,包括message-header和message-body两部分。首先传 递message-header,即http header消息 。http header 消息通常被分为4个部分:general header, request header, response header, entity header。但是这种分法就理解而言,感觉界限不太明确。根据维基百科对http header内容的组织形式,大体分为Request和Response两部分。

  • 微信小程序设置了合法请求域名,小程序一直提示不在合法域名列别中
    解决办法:https://my.oschina.net/u/3066247/blog/796057


关于wx.request产生 “Failed to load resource: the server responded with a status of 400 (Bad Request)” 的解决办法

    //xxxx.js
    var request_URL='https://xxx';
    Page({
        data:{},
        onLoad:function(){
          wx.request({
            url:request_URL,
            data:{},
            header:{
              'content-type': 'application/json'
            },
            success: function(res) {
              console.log(res.data)
            }
          })
        }
    })

解决办法:将ContentType改为 "application/x-www-form-urlencoded" ;

  • application/x-www-form-urlencoded: 窗体数据被编码为名称/值对,这是标准的编码格式;
    当action为get时候,浏览器用x-www-form-urlencoded的编码方式把form数据转换成一个字串(name1=value1&name2=value2...),然后把这个字串append到url后面,用?分割,加载这个新的url。

  • multipart/form-data: 窗体数据被编码为一条消息,页上的每个控件对应消息中的一个部分;
    当action为post时候,浏览器把form数据封装到http body中,然后发送到server。 如果没有type=file的控件,用默认的application/x-www-form-urlencoded就可以了。 但是如果有type=file的话,就要用到multipart/form-data了。浏览器会把整个表单以控件为单位分割,并为每个部分加上Content-Disposition(form-data或者file),Content-Type(默认为text/plain),name(控件name)等信息,并加上分割符(boundary);

  • text/plain: 窗体数据以纯文本形式进行编码,其中不含任何控件或格式字符;

http://blog.csdn.net/mhmyqn/article/details/25561535
最近在看书时才真正搞明白,服务器为什么会对表单提交和文件上传做特殊处理,因为表单提交数据是名值对的方式,且Content-Type为application/x-www-form-urlencoded,而文件上传服务器需要特殊处理,普通的post请求(Content-Type不是application/x-www-form-urlencoded)数据格式不固定,不一定是名值对的方式,所以服务器无法知道具体的处理方式,所以只能通过获取原始数据流的方式来进行解析。

jquery在执行post请求时,会设置Content-Type为application/x-www-form-urlencoded,所以服务器能够正确解析,而使用原生ajax请求时,如果不显示的设置Content-Type,那么默认是text/plain,这时服务器就不知道怎么解析数据了,所以才只能通过获取原始数据流的方式来进行解析请求数据。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,115评论 19 139
  • 一、概念(载录于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434阅读 8,528评论 6 152
  • Http协议详解 标签(空格分隔): Linux 声明:本片文章非原创,内容来源于博客园作者MIN飞翔的HTTP协...
    Sivin阅读 5,261评论 3 82
  • 作为一个刚毕业的iOS开发者,接触苹果官方文档真的是晦涩难懂,只是咱也是一个英语六级的孩子,被苹果文档弄得很心累,...
    只为此心无垠阅读 14,014评论 2 36
  • 弘丹参考的是傅佩荣老师的《人能弘道-傅佩荣谈论语》,绿窗幽梦参考的是朱熹的《四书章句集注》,由弘丹整理。 小编会每...
    弘丹阅读 1,747评论 0 9