首页 > 其他分享 >HTTP请求中,几种常见的Content-Type类型

HTTP请求中,几种常见的Content-Type类型

时间:2023-09-20 09:45:25浏览次数:41  
标签:HTTP form data Content application JSON Type

一、application/x-www-form-urlencoded

最常见的 POST 提交数据的方式,原生Form表单,如果不设置 enctype 属性,默认为application/x-www-form-urlencoded 方式提交数据。

首先,Content-Type被指定为 application/x-www-form-urlencoded;其次,提交的表单数据会转换为键值对并按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码。大部分服务端语言都对这种方式有很好的支持。
另外,如利用AJAX 提交数据时,也可使用这种方式。例如 jQuery,Content-Type 默认值都是”application/x-www-form-urlencoded;charset=utf-8”。

//【FromForm参数】
$.ajax({
    url: server + "/api/User/Login",
    type: "post",
    contentType: "application/x-www-form-urlencoded",
    data: { Account: Account, PassWord: PassWord },
    success: function (data) {
        if (data.state == "success") {
            $("#Token").val("Bearer " + data.data);
            message("登录成功!");
        } else {
            message(data.message, 3);
        }
    },
    error: function () {
        message("请求错误!", 3);
    }
});

 

二、multipart/form-data(带文件提交)

另一个常见的 POST 数据提交的方式, Form 表单的 enctype 设置为multipart/form-data,它会将表单的数据处理为一条消息,以标签为单元,用分隔符(这就是boundary的作用)分开,类似我们上面Content-Type中的例子。
 由于这种方式将数据有很多部分,它既可以上传键值对,也可以上传文件,甚至多个文件。当上传的字段是文件时,会有Content-Type来说明文件类型;Content-disposition,用来说明字段的一些信息。每部分都是以 –boundary 开始,紧接着是内容描述信息,然后是回车,最后是字段具体内容(字段、文本或二进制等)。如果传输的是文件,还要包含文件名和文件类型信息。消息主体最后以 –boundary– 标示结束。

var file = $("#file_upload")[0].files[0];//获取文件
var form = new FormData();
form.append("file_upload", file);//添加文件
form.append("key1","value1");
$.ajax({
    url: "/Cloud/Files/EditFile?keyValue=",
    type: "POST",
    contentType: "multipart/form-data",
    dataType: "json",
    data: form,
    async: false, //异步
    processData: false, //很重要,告诉jquery不要对form进行处理
    contentType: false, //很重要,指定为false才能形成正确的Content-Type
    success: function (data) {
       
    },
    error: function (XMLHttpRequest, textStatus, errorThrown) {
       
    },
});

  

三、application/json

Content-Type: application/json 作为响应头比较常见。实际上,现在越来越多的人把它作为请求头,用来告诉服务端消息主体是序列化后的 JSON 字符串,其中一个好处就是JSON 格式支持比键值对复杂得多的结构化数据。由于 JSON 规范的流行,除了低版本 IE 之外的各大浏览器都原生支持JSON.stringify,服务端语言也都有处理 JSON 的函数,使用起来没有困难。
Google 的 AngularJS 中的 Ajax 功能,默认就是提交 JSON 字符串。
四、text/xml

XML的作用不言而喻,用于传输和存储数据,它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据,在JSON出现之前是业界一大标准(当然现在也是),相比JSON的优缺点大家有兴趣可以上网search。因此,在POST提交数据时,xml类型也是不可缺少的一种,虽然一般场景上使用JSON可能更轻巧、灵活。
五、binary (application/octet-stream)

在Chrome浏览器的Postman工具中,还可以看到”binary“这一类型,指的就是一些二进制文件类型。如application/pdf,指定了特定二进制文件的MIME类型。就像对于text文件类型若没有特定的子类型(subtype),就使用 text/plain。类似的,二进制文件没有特定或已知的 subtype,即使用 application/octet-stream,这是应用程序文件的默认值,一般很少直接使用 。

对于application/octet-stream,只能提交二进制,而且只能提交一个二进制,如果提交文件的话,只能提交一个文件,后台接收参数只能有一个,而且只能是流(或者字节数组)。

很多web服务器使用默认的 application/octet-stream 来发送未知类型。出于一些安全原因,对于这些资源浏览器不允许设置一些自定义默认操作,导致用户必须存储到本地以使用。一般来说,设置正确的MIME类型很重要。

//【FromBody参数】
$.ajax({
    url: server + "/api/User/Login2",
    type: "post",
    contentType: "application/json",
    data: JSON.stringify({ Account: Account, PassWord: PassWord }),
    success: function (data) {
        if (data.state == "success") {
            $("#Token").val("Bearer " + data.data);
            message("登录成功!");
        } else {
            message(data.message, 3);
        }
    },
    error: function () {
        message("请求错误!", 3);
    }
});

  

标签:HTTP,form,data,Content,application,JSON,Type
From: https://www.cnblogs.com/liufengs/p/17716481.html

相关文章

  • IIS 部署的应用禁用HTTP TRACE / TRACK方法【原理扫描】
     TRACE和TRACK是用于调试Web服务器连接的HTTP方法。直接在网站Web.config文件中进行如下操作:在Web.config中的<system.webServer>节点内添加以下配置即可:<security><requestFiltering><verbs><addverb="OPTIONS"allowed="false"/><addverb="Trace"......
  • HTTP安全响应头配置之X-Frame-Options
    目的这个header主要用来配置哪些网站可以通过frame来加载资源。它主要是用来防止UIredressing补偿样式攻-击。IE8和firefox18以后的版本都开始支持ALLOW-FROM。chrome和safari都不支持ALLOW-FROM,但是WebKit已经在研究这个了。正确的设置DENY–禁止所有的资源(本地或远程)试图通......
  • How to get a variable data type in Python 3 All In One
    HowtogetavariabledatatypeinPython3AllInOnetypeofinjstype(var)&isinstance(var,type)#!/usr/bin/envpython3#mixlistlt=[1,2,{'k':'v'},{1,'str'}]dt=dict()for[i,item]inenumerate(lt):......
  • How to enable HTTPS on a localhost Node.js Server All In One
    HowtoenableHTTPSonalocalhostNode.jsServerAllInOnelocahostHTTPSerrors❌clientError=[Error:4056C15DF87F0000:error:0A000416:SSLroutines:ssl3_read_bytes:sslv3alertcertificateunknown:../deps/openssl/openssl/ssl/record/rec_layer_s3.c:15......
  • nginx 之 https 证书配置
    HTTPS原理和作用为什么需要HTTPS原因:HTTP不安全传输数据被中间人盗用、信息泄露数据内容劫持、篡改HTTPS协议的实现对传输内容进行加密以及身份验证对称加密:加密秘钥和解密秘钥是对等的,一样的非对称加密: HTTPS加密协议原理: 中间人伪造客户端和服务端:(中间人可以......
  • 8-更大并、可混合接口模式压测的FastHttpUser
    FastHttpUser和HttpUser相比,这个类的运行占用更少压测机的CPU并且可以支撑更大的并发数,并且可以配合gevent类来实现接口混合模式压测(一个user在几乎同一时间并发多个api请求),直接上例子importtimefromgevent.poolimportPoolfromlocustimportFastHttpUser,taskdefa......
  • httpclient
         昨天在写完java下载的文章后就在今天发现了一个问题。通过这个问题也反应出对HttpURLConnection这个类还不了解。趁此机会再添加一些对这个类的了解吧。首先看看前面那断代码在我的程序中出现了什么问题:        在我的程序中有这么一个模块,通过给定的url......
  • 2.HTTP、HTTPS
    (1)HTTP协议介绍HTTP协议,全称超文本传输协议(HypertextTransferProtocol)。顾名思义,HTTP协议就是用来规范超文本的传输,超文本,也就是网络上的包括文本在内的各式各样的消息,具体来说,主要是来规范浏览器和服务器端的行为的。并且,HTTP是一个无状态(stateless)协议,也就是说服务器......
  • SpringBoot 后端配置 Https 教程
    以阿里云为例子1.申请SSL证书1.注册域名打开阿里云官网,搜索域名点击域名注册,输入域名,点击搜索选择心仪的域名,点击购买,打钱进入域名控制台,进行实名认证2.申请SSL证书打开阿里云官网,搜索SSL证书点击免费证书,领取20张券(一年可以领20张,可以创建20张免......
  • [BCB]E2089 Identifier 'ReadPragram' cannot have a type qualifier
    这些天一直在改程序,今天突然冒出来如下错误:[C++Error]Unit1.cpp(4114):E2089Identifier'ReadPragram'cannothaveatypequalifier[C++Error]Unit1.cpp(6751):E2089Identifier'Button1Click'cannothaveatypequalifier[C++Error]Unit1.cpp(8593):E2139D......