-
Content-Type
2019-04-11 16:41:09Content-Type 存在于请求和响应的头部,用于标识数据的类型。(通俗地说就是 , 你想要后台返回给你什么数据类型, 后台需要你发送什么样的数据类型给他) 1. Response Headers 在响应中,Content-Type 告诉客户端...Content-Type 存在于请求和响应的头部,用于标识数据的类型。(通俗地说就是 , 你想要后台返回给你什么数据类型, 后台需要你发送什么样的数据类型给他)
1. Response Headers
在响应中,Content-Type 告诉客户端实际返回的内容的类型。比如要通常接口会返回 JSON 格式的数据,那么需要将 Content-Type 设置为
application/json
,当然这是接口的事,很多后端框架都会自动处理,不用手动去加这个 Header。2. Request Headers
在请求中,客户端告诉服务器实际发送的数据类型。这里指的是除 GET 方式以外的请求。常见的取值有:
x-www-form-urlencoded
multipart/form-data
application/json
下面我们就来看看不同的 Content-Type 会有什么区别
x-www-form-urlencoded
这应该是目前最常见的方式。提交的数据按照键值对
key1=val1&key2=val2
的方式进行编码。比如我们要发送数据
{ "name": "tom", "age": 20 }
会被编码为
name=tom&age=20
常用的
<form>
表单默认就是用的这种方式<form method="post"> </form>
multipart/form-data
这是另一个常见的数据提交方式,一般用于文件上传。
上面的
<form>
表单提交中其实有一个属性叫enctype
,用来指定编码格式,默认值为application/x-www-form-urlencoded
,还可以选择multipart/form-data
(不对字符编码)<form enctype="multipart/form-data" method="post"> </form>
application/json
支持比键值对复杂得多的结构化数据。由于 JSON 规范的流行,越来越多的人采用了这种方式,常用的第三方请求库
Axios
默认就是用的 application/json。前面提到的问题就出现在这里,前端一般用了第三方的请求库,很可能请求头 Content-Type 就直接用的默认值 application/json。然而,服务器端对这种格式的数据默认支持并没有 x-www-form-urlencoded 好。比如 PHP 的很多框架就是不直接支持的,需要手动处理。
所以就导致了前端发送
application/json
编码的数据,而后端却只能解析x-www-form-urlencoded
。 -
Request header field Content-Type is not allowed by Access-Control-Allow-Headers跨域
2016-12-23 10:46:19XMLHttpRequest cannot load http://xxx.com. Request header field Content-Type is not allowed by Access-Control-Allow-Headers. 解决方案: 例如php服务端程序设置头: header('Access-Control-Allow-...作为技术人,如何突破自己的技术瓶颈,从而提高自己的核心竞争力(年度深度好文)
跨域错误提示:
XMLHttpRequest cannot load http://xxx.com. Request header field Content-Type is not allowed by Access-Control-Allow-Headers.
解决方案:
例如php服务端程序设置头:
header('Access-Control-Allow-Origin: *'); header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept"); header('Access-Control-Allow-Methods: GET, POST, PUT,DELETE');
主要是这三个:
-
Content-Type 详解
2019-01-11 18:08:50Content-Type 详解Content-Type常见Content-Typeapplication/x-www-form-urlencodedmultipart/form-dataapplication/jsonapplication/xml 和 text/xmlContent-Type的使用request 的Content-Typeresponse的Content-...Content-Type 详解
Content-Type
Content-Type(MediaType),即是Internet Media Type,互联网媒体类型,也叫做MIME类型。在互联网中有成百上千中不同的数据类型,HTTP在传输数据对象时会为他们打上称为MIME的数据格式标签,用于区分数据类型。最初MIME是用于电子邮件系统的,后来HTTP也采用了这一方案。
在HTTP协议消息头中,使用Content-Type来表示请求和响应中的媒体类型信息。它用来告诉服务端如何处理请求的数据,以及告诉客户端(一般是浏览器)如何解析响应的数据,比如显示图片,解析并展示html等等。
Content-Type的格式:
Content-Type:type/subtype ;parameter- type:主类型,任意的字符串,如text,如果是*号代表所有;
- subtype:子类型,任意的字符串,如html,如果是*号代表所有,用“/”与主类型隔开;
- parameter:可选参数,如charset,boundary等。
例如:
Content-Type: text/html;
Content-Type: application/json;charset:utf-8;常见Content-Type
常见的Content-Type有数百个,下面例举了一些
- HTML文档标记:text/html;
- 普通ASCII文档标记:text/html;
- JPEG图片标记:image/jpeg;
- GIF图片标记:image/gif;
- js文档标记:application/javascript;
- xml文件标记:application/xml;
更多具体内容可参考《图解HTTP》- 附录D
上面的Content-Type,我们只认得就好,但是下面有4种是需要我们清楚他们的区别及牢记在心的。
application/x-www-form-urlencoded
HTTP会将请求参数用key1=val1&key2=val2的方式进行组织,并放到请求实体里面,注意如果是中文或特殊字符如"/"、","、“:" 等会自动进行URL转码。不支持文件,一般用于表单提交。
下面是一个例子:- 请求参数
- http 请求报文
multipart/form-data
与application/x-www-form-urlencoded不同,这是一个多部分多媒体类型。首先生成了一个 boundary 用于分割不同的字段,在请求实体里每个参数以------boundary开始,然后是附加信息和参数名,然后是空行,最后是参数内容。多个参数将会有多个boundary块。如果参数是文件会有特别的文件域。最后以------boundary–为结束标识。multipart/form-data支持文件上传的格式,一般需要上传文件的表单则用该类型。
下面是一个例子:- 请求参数
- http 请求报文
application/json
JSON 是一种轻量级的数据格式,以“键-值”对的方式组织的数据。这个使用这个类型,需要参数本身就是json格式的数据,参数会被直接放到请求实体里,不进行任何处理。服务端/客户端会按json格式解析数据(约定好的情况下)。
- 请求参数
- http 请求报文
application/xml 和 text/xml
与application/json类似,这里用的是xml格式的数据,text/xml的话,将忽略xml数据里的编码格式,参考。
Content-Type的使用
request 的Content-Type
一般我们在开发的过程中需要注意客户端发送请求(Request)时的Content-Type设置,特别是使用ajax的时候,如果设置得不准确,很有可能导致请求失败。比如在spring中,如果接口使用了@RequestBody,spring强大的自动解析功能,会将请求实体的内容自动转换为Bean,但前提是请求的Content-Type必须设置为application/json,否正就会返回415错误。
注:415 错误是 Unsupported media type,即不支持的媒体类型。
建议:- 如果是一个restful接口(json格式),一般将Content-Type设置为application/json; charset=UTF-8;
- 如果是文件上传,一般Content-Type设置为multipart/form-data
- 如果普通表单提交,一般Content-Type设置为application/x-www-form-urlencoded
response的Content-Type
服务端响应(Response)的Content-Type最好也保持准确,虽然一般web开发中,前端解析响应的数据不会根据Content-Type,并且服务端一般能自动设置准确的Content-Type,但是如果乱设置某些情况下可能会有问题,比如导出文件,打开图片等。如果在spring项目里使用@ResponseBody,spring会将响应的Content-Type设置为application/json;charset=UTF-8;,可能会导致文件无法导出,需要注意下。
response的Content-Type设置建议:
- 一般情况下不需要显示设置;
- 如果是文件导出,Content-Type 设置为 multipart/form-data,并且添加一个Content-Disposition设置为attachment;fileName=文件.后缀。
注:Content-Disposition是Content-Type的扩展,告诉浏览器弹窗下载框,而不是直接在浏览器里展示文件。因为一般浏览器对于它能够处理的文件类型,如txt,pdf 等,它都是直接打开展示,而不是弹窗下载框。
下面的一个设置response的Content-Type的例子:
-
未准确设置response的Content-type的情况,客户端将json数据当成普通文本
content-type →text/html;charset=UTF-8
-
准确设置response的Content-type的情况,客户端将json数据自动解析
content-type →application/json;charset=UTF-8
参考
《HTTP 权威指南》
什么是json
常见的Content-Type
application/xml 和 text/xml的区别
postman里的Content-Type -
php中利用header设置content-type和常见文件类型的content-type
2015-06-23 07:44:11php中利用header设置content-type和常见文件类型的content-type 在PHP中可以通过header函数来发送头信息,还可以设置文件的content-type,下面整理了一些常见文件类型对于的content-type值。 部分header...php中利用header设置content-type和常见文件类型的content-type
在PHP中可以通过header函数来发送头信息,还可以设置文件的content-type,下面整理了一些常见文件类型对于的content-type值。
部分header头参考:http://www.lai18.com/content/433566.html//author http://www.lai18.com //date 2015-06-22 //定义编码 header( 'Content-Type:text/html;charset=utf-8 '); //Atom header('Content-type: application/atom+xml'); //CSS header('Content-type: text/css'); //Javascript header('Content-type: text/javascript'); //JPEG Image header('Content-type: image/jpeg'); //JSON header('Content-type: application/json'); //PDF header('Content-type: application/pdf'); //RSS header('Content-Type: application/rss+xml; charset=ISO-8859-1'); //Text (Plain) header('Content-type: text/plain'); //XML header('Content-type: text/xml'); // ok header('HTTP/1.1 200 OK'); //设置一个404头: header('HTTP/1.1 404 Not Found'); //设置地址被永久的重定向 header('HTTP/1.1 301 Moved Permanently'); //转到一个新地址 header('Location: http://www.example.org/'); //文件延迟转向: header('Refresh: 10; url=http://www.example.org/'); print 'You will be redirected in 10 seconds'; //当然,也可以使用html语法实现 // <meta http-equiv="refresh" content="10;http://www.example.org/ /> // override X-Powered-By: PHP: header('X-Powered-By: PHP/4.4.0'); header('X-Powered-By: Brain/0.6b'); //文档语言 header('Content-language: en'); //告诉浏览器最后一次修改时间 $time = time() - 60; // or filemtime($fn), etc header('Last-Modified: '.gmdate('D, d M Y H:i:s', $time).' GMT'); //告诉浏览器文档内容没有发生改变 header('HTTP/1.1 304 Not Modified'); //设置内容长度 header('Content-Length: 1234'); //设置为一个下载类型 header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="example.zip"'); header('Content-Transfer-Encoding: binary'); // load the file to send: readfile('example.zip'); // 对当前文档禁用缓存 header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate'); header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past header('Pragma: no-cache'); //设置内容类型: header('Content-Type: text/html; charset=iso-8859-1'); header('Content-Type: text/html; charset=utf-8'); header('Content-Type: text/plain'); //纯文本格式 header('Content-Type: image/jpeg'); //JPG*** header('Content-Type: application/zip'); // ZIP文件 header('Content-Type: application/pdf'); // PDF文件 header('Content-Type: audio/mpeg'); // 音频文件 header('Content-Type: application/x-shockw**e-flash'); //Flash动画 //显示登陆对话框 header('HTTP/1.1 401 Unauthorized'); header('WWW-Authenticate: Basic realm="Top Secret"'); print 'Text that will be displayed if the user hits cancel or '; print 'enters wrong login data';
-
iOS- "unacceptable content-type: text/plain"等content-type bug解决方案
2016-03-03 11:26:12经常在使用AFN的时候会出现content-type错误,缺少请求类型,比如”unacceptable content-type: text/plain” 解决方法: 1.在网络请求代码处修改AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager]; mgr.... -
响应头Content-Type与Content-Disposition的区别
2020-02-10 17:40:54Content-Type 实体头部用于指示资源的MIME类型,在响应中,Content-Type标头告诉客户端实际返回的内容的类型,指示客户端如何显示附加的文件。 Content-Disposition 是 MIME 协议的扩展,指示回复的内容该以... -
关于 Content-Type:application/x-www-form-urlencoded 和 Content-Type:multipart/related
2016-08-14 10:31:19最近项目中用到的一个是用一个页面接收c程序post过来的一断字符串.....区别只是Content-Type:application/x-www-form-urlencoded 和 Content-Type:multipart/related 查资料得: application/x-www-form- -
漏洞扫描,解决缺少“X-XSS-Protection”,“X-Content-Type-Options”, “Content-Security-Policy”头问题
2020-07-22 14:36:35缺少“X-XSS-Protection”,“X-Content-Type-Options”, “Content-Security-Policy”头解决方法 用AppScan扫描网站,高危问题:缺少“X-XSS-Protection”,“X-Content-Type-Options”, “Content-Security-Policy”... -
springmvc+jsp中关于JQuery ajax提交的Content-Type参数设置application/json和application/x-...
2018-06-26 16:32:07使用JQ的ajax需要设置Content-Type,Content-Type的设置有以下几种常用的 "Content-Type": "application/x-www-form-urlencoded" // 适用于大部分情况 "Content-Type... -
Jmeter---------http请求—content-type与参数
2018-09-19 16:57:27本文讲三种content-type以及在Jmeter中对应的参数输入方式 第一部分:目前工作中涉及到的content-type 有三种: content-type:在Request Headers里,告诉服务器我们发送的请求信息是哪种格式的。 1 ... -
Nginx配置“Content-Security-Policy”头 、“X-XSS-Protection”头 和“X-Content-Type-Options”头
2020-07-24 13:33:54如上图配置 add_header X-Content-Type-Options: nosniff; add_header X-XSS-Protection "1; mode=block"; add_header Content-Security-Policy "default-src 'self'"; 如上图即成功 -
HTTP中content-type和MIME媒体类型
2020-04-22 16:03:23Content-Type(内容类型),一般是指网页中存在的 Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些 PHP 网页点击的结果却是下载一个文件或... -
nginx 或者tomcat 下 X-Content-Type-Options、X-XSS-Protection、Content-Security-Pol安全配置
2020-08-31 13:55:17nginx下配置: ...add_header X-Content-Type-Options "nosniff"; X-Frame-Options:响应头表示是否允许浏览器加载frame等属性,有三个配置DENY禁止任何网页被嵌入,SAMEORIGIN只允许本网站的嵌套,ALL. -
HTTP content-type
2018-03-08 10:53:39HTTP content-typeContent-Type,内容类型,一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些Asp网页点击的结果却是下载... -
Elasticsearch-head 请求头 Content-Type header 设置
2019-12-20 10:30:15ElasticSearch搭建完成后准备使用es-head建立索引时发现Content-Type错误了 看一下网络流可知报406 错误 { "error" : "Content-Type header [application/x-www-form-urlencoded] is not supported", "status" : ... -
python 实现Content-Type为multipart/form-data类型的方式上传文件到服务端
2020-11-24 20:23:16上传文件到服务器的方式种类有很多,今天我们这里讲一讲Content-Type为multipart/form-data类型的方式上传文件时要注意的地方,我们以上传.xlsx表格为例。 直接上代码,不啰嗦 import requests from requests_... -
Http中Content-Type的详解
2017-06-04 20:27:12这里讲解Content-Type的可用值,以及在spring MVC中如何使用它们来映射请求信息。 1. Content-Type MediaType,即是Internet Media Type,互联网媒体类型;也叫做MIME类型,在Http协议消息头中,使用Content-... -
HTTP Content-Type
2019-02-03 15:26:42Content-Type(Mime-Type) 文件扩展名 Content-Type(Mime-Type) .*( 二进制流,不知道下载文件类型) application/octet-stream .tif image/tiff .001 application/x-001 .301 ... -
http之content-type与content-language区别
2017-01-20 15:55:17content-type中首部用来指定报文体的类型,譬如是文本还是多媒体,其中可以通过charset来指定内容所使用的字符集。 content-language用来表示报文体使用的语言,譬如ch,fr,en,ja等等。 随之我的疑问也来了,既然... -
Android HTTP Content-type( Mime-Type)对照表
2015-09-28 11:15:32HTTP Content-type 对照表...Content-Type(Mime-Type) 文件扩展名 Content-Type(Mime-Type) .*( 二进制流, 不知道下载文件类型) application/octet-stream .tif image/tiff .001 app -
header content-type
2019-02-21 16:48:51content-type 是http实体的首部字段,用户说明请求或返回的...content-type的几种方式: 1.content-type:application/x-www-form-urlencoded 浏览器的原生form表单 提交的数据按照key1=val1&key2=val2 ... -
AFNetworking 如何更改请求头中的Content-Type,如何更改响应中可以接受的Content-Type
2017-07-19 16:58:56[manager.requestSerializer setValue:@"multipart/..." forHTTPHeaderField:@"Content-Type"]; // 比如@"text/html"就是后加的 manager.responseSerializer.acceptableContentTypes = [NSSet -
Content-Type详解
2020-01-19 11:13:17Content-Type是什么? 在HTTP协议消息头中,使用Content-Type来表示媒体类型信息。它被用来告诉服务端如何处理请求的数据,以及告诉客户端(一般是浏览器)如何解析响应的数据,比如显示图片,解析html或仅仅展示一... -
我的Android进阶之旅------>HTTP Content-type 对照表
2015-08-10 20:56:39HTTP Content-type 对照表 ...Content-Type(Mime-Type) 文件扩展名 Content-Type(Mime-Type) .*( 二进制流, 不知道下载文件类型) application/octet-stream .tif image/tiff -
X-Content-Type-Options: nosniff
2017-03-05 17:31:40如果服务器发送响应头 "X-Content-Type-Options: nosniff",则script和styleSheet元素会拒绝包含错误的 MIME 类型的响应。这是一种安全功能,有助于防止基于 MIME 类型混淆的***。简单理解为:通过设置"X-Content-... -
http的Content-Encoding和Content-Type及服务器和客户端处理流程
2019-01-28 17:07:38比如,A 给 B发送了一条信息:hello,首先,A要告诉B,我给你发的这条数据的类型,不同类型的数据,接收方的处理方式不一样,hello属于文本类型,所以Content-Type就要设置成 text-plain; 但是计算机只知道0和1,... -
HTTP Content-Type(MIME-Type) 与扩展名 Extension 对照表
2017-12-27 15:18:49Content-Type,内容类型,一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定文件接收方将以什么形式、什么编码读取这个文件,这就是经常看到一些Asp网页点击的结果却是下载到的一个文件... -
Content-Type讲解
2018-01-12 15:49:051. Content-Type MediaType,即是Internet Media Type,互联网媒体类型;也叫做MIME类型,在Http协议消息头中,使用Content-Type来表示具体请求中的媒体类型信息。 [html] view plain copy ...