微信小程序自学 随笔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,这时服务器就不知道怎么解析数据了,所以才只能通过获取原始数据流的方式来进行解析请求数据。

你可能感兴趣的:(微信小程序自学 随笔3 Failed to load resource: the server responded with a status of 400 (Bad Request))