HTTP POST如何在Polymer中工作?

RAG*_*MAN 3 post http put polymer

我想知道POST调用在Polymer中是如何工作的.我知道我必须使用POST调用来发送敏感信息,例如用户密码和访问令牌.我试过这样做:

<iron-ajax
        id="AjaxPost"
        url="/api/login"
        method="POST"
        content-type="application/x-www-form-urlencoded"
        handle-as="json"
        on-response="_handleAjaxPostResponse"
        on-error="_handleAjaxPostError"
        ></iron-ajax>


this.$.AjaxPost.params = { email: "abc@gmail.com", password: "password" };
this.$.AjaxPost.generateRequest();
Run Code Online (Sandbox Code Playgroud)

但是,这将在URL中设置参数,可以在浏览器控制台中查看,如:

POST http://localhost:8080/api/login?email=abc%40mgail.com&password=password 400 (Bad Request)
Run Code Online (Sandbox Code Playgroud)

PUT方法允许您设置正文中的数据,我认为这更安全.现在我有两个问题:

  1. 我们也可以设置POST方法的主体吗?或者设置参数与设置体相同?
  2. 如果可以,我应该如何在服务器端提取数据?

PS:我们没有使用SSL HTTPS连接.话虽如此,可以合并哪种方法以提高安全性?

Sri*_*rik 5

iron-ajax的api文件定义了body属性如下:

body
对象默认值:
随请求一起发送的正文内容,通常与"POST"请求一起使用.
如果body是一个字符串,它将被不加修改地发送.
如果Content-Type设置为下面列出的值,那么将对主体进行相应编码.

content-type="application/json"
    body is encoded like {"foo":"bar baz","x":1}
content-type="application/x-www-form-urlencoded"
    body is encoded like foo=bar+baz&x=1
Run Code Online (Sandbox Code Playgroud)

否则,主体将被未经修改地传递给浏览器,并且它将处理任何编码(例如,对于FormData,Blob,ArrayBuffer).

要将数据作为正文发送,您应该修改您的请求,如下所示

<iron-ajax
        id="AjaxPost"
        url="/api/login"
        method="POST"
        content-type="application/json"
        handle-as="json"
        on-response="_handleAjaxPostResponse"
        on-error="_handleAjaxPostError"
        ></iron-ajax>


this.$.AjaxPost.body = { "email": "abc@gmail.com", "password": "password" };
this.$.AjaxPost.generateRequest();
Run Code Online (Sandbox Code Playgroud)