美文网首页我爱编程
http头部content-type与后台解析数据方式

http头部content-type与后台解析数据方式

作者: MrOldK | 来源:发表于2018-04-08 21:32 被阅读102次

    http 头部中的 content-type 和我们传递的数据以及后台处理数据的方式是息息相关的,不同的取值,服务器解析处理方式不同。
    协议规定 POST 提交的数据必须放在消息主体(entity-body)中,但协议并没有规定数据必须使用什么编码方式。实际上,开发者完全可以自己决定消息主体的格式,只要最后发送的 HTTP 请求满足上面的格式就可以。

    但是,数据发送出去,还要服务端解析成功才有意义。一般服务端语言如 php、python 等,以及它们的 framework,都内置了自动解析常见数据格式的功能。服务端通常是根据请求头(headers)中的 Content-Type 字段来获知请求中的消息主体是用何种方式编码,再对主体进行解析。
    text/plain:ajax
    默认方式,将文件设置为纯文本的形式,浏览器在获取到这种文件时并不会对其进行处理(最原始的流)

    20161102184458315.png
    application/x-www-form-urlencoded
    form表单默认的方式,在$.ajax中如果未设置contentType默认也会以这种方式, 在servlet中的把对应的key、value进行相应的处理添加到Map中,所有才能通过request.getParameter()获取,在servlet中的request.getParameter()只能取到 在url 后面的参数与 这种方式提交的数据。
    [图片上传失败...(image-efdf46-1536411721990)]

    注意: 这种方式传递的数据千万不能乱用JSON.Stringify()格式化,只能传入原始对象(LZ开始就犯了这样的错,导致取不到值)

    var  info={  
          "name":"yhy",  
           age:22  
    }  
       $.ajax({    
          url: 'ddds' ,    
          type: 'post',    
          data: info,    
          async: true,    
          dataType:'json',  
          success: function (data,state) {    
          },    
          error: function (data,state) {    
          } ,  
     }); 
    

    multipart/form-data
    多用于文件上传,html5伴随出现的formdata 也正用于此(支持普通表单、文件上传,若是传文件则服务器采用特有formdata的解析方式),传递的时候通过流的形式,数据包的格式也有所不同。

    20161102172731364.png

    注意:这里 传入的数据必须格式化JSON.stringify(),不能直接传入原始对象,servlet中解析的时候通过读流的方式(不包含formdata格式)

    StringBuffer json = new StringBuffer();  
          String line = null;  
          try{  
              BufferedReader reader = request.getReader();  
              while((line=reader.readLine())!=null){  
                  json.append(line);  
              }  
          }  
          catch(Exception e){  
              System.out.println(e.toString());  
                
          }  
          System.out.println(json.toString());  
    

    application/json
    这是现在比较常用的方式,在发送数据之前需格式化数据JSON.stringify(),确保格式的正确性,服务器解析方式和上面第二种一样,先获取json字符串在转为JSON对象。

    20161102173719069.png
    数据传输通过chrom开发工具可获取到的数据

    1、get方式,会在url后面添加参数,并在包含在 Query String parameters


    20161102184946023.png

    2、post方式
    a、form-data, 这种设置conten-type为application/x-www-form-urlencoded ,servlet 中可通过request.getParameter()获取

    b、Request-Payload,通过输入流来获取,在上面已介绍。

    相关文章

      网友评论

        本文标题:http头部content-type与后台解析数据方式

        本文链接:https://www.haomeiwen.com/subject/tuomhftx.html