篇首语:本文由小编为大家整理,主要介绍了http头部字段accept和content相关的知识,希望对你有一定的参考价值。
参考:https://developer.mozilla.org/zh-CN/docs/Web/HTTP
1、Accept和Content-Type
(1)Accept
Accept字段用于在请求中向服务器告知浏览器期待接受的mime响应类型。
对于没有文件后缀名的接口请求来说,浏览器默认是设置为*。而对于有文件后缀名,浏览器会根据后缀名自动设置。在ajax中,也可以自行设置该请求头部。
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
(2)请求Content-Type
用于向服务器告知请求体部中的mime类型。
//get请求,没有体部数据时,没有content-type字段//ajax设置之一Content-Type: application/json; charset=UTF-8//form表单Content-Type: application/x-www-form-urlencodedContent-Type:multipart/form-data; boundary=----WebKitFormBoundaryjtIySeZn1jkJKe97Content-Type: text/plain
(3)响应Content-Type
用于向浏览器告知响应体部中的mime类型。
Content-Type: text/html; charset=utf-8Content-Type: image/pngcontent-type: image/gifcontent-type: text/csscontent-type: text/javascript; charset=utf-8
2、Content-Length
用于向服务端或者浏览器告知体部的长度。用十进制数字表示的八位字节的数目。
只有当浏览器使用持久HTTP连接时才需要这个数据。
3、Accept-Charset
用于向服务端表示浏览器接受的字符集。如果服务端不支持,可能返回406,但是为了友好更常见的是忽略。
Accept-Charset: utf-8, iso-8859-1;q=0.5
4、Accept-Encoding和Content-Encoding
用于向服务器告知浏览器端接受的压缩方式
Accept-Encoding: gzipAccept-Encoding: compressAccept-Encoding: deflateAccept-Encoding: brAccept-Encoding: identityAccept-Encoding: *// Multiple algorithms, weighted with the quality value syntax:Accept-Encoding: deflate, gzip;q=1.0, *;q=0.5
(2)Content-Encoding
用于告知浏览器响应内容实际采用的压缩方式,如果没有压缩则没有该字段。
Content-Encoding: br
具体是否选择进行压缩:
5、Accept-Language和Content-Language
(1)Accept-Language
向服务器告知浏览器可以理解的自然语言
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
(2)Content-Language
向浏览器告知实际使用的自然语言。如果服务端不支持,可能返回406,但是为了友好更常见的是忽略,直接返回内容。
每个HTTP请求和响应都会带有相应的头部信息,其中有的对开发人员有用。XHR对象提供了操作头部信息的方法。本文将详细介绍HTTP的头部信息
默认情况下,在发送XHR请求的同时,还会发送下列头部信息
Accept: 浏览器能够处理的内容类型Accept-Charset: 浏览器能够显示的字符集Accept-Encoding: 浏览器能够处理的压缩编码Accept-Language: 浏览器当前设置的语言Connection: 浏览器与服务器之间连接的类型Cookie: 当前页面设置的任何CookieHost: 发出请求的页面所在的域User-Agent: 浏览器的用户代理字符串Referer: 发出请求的页面的URI
[注意]HTTP规范将这个头部字段拼错了,而为保证与规范一致,也只能将错就错(正确拼写应该是referrer)
使用 setRequestHeader() 方法可以设置自定义的请求头部信息。这个方法接受两个参数:头部字段的名称和头部字段的值。要成功发送请求头部信息,必须在调用open()方法之后且调用send()方法之前调用setRequestHeader()方法
setRequestHeader()方法的一个常用用途是使用POST请求时,将 Content-Type 的头部信息设置为表单提交的内容类型
xhr.open("post","service.php",true);xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");xhr.send("data=test123");
[注意]尽量使用自定义头部字段名称,不要使用浏览器正常发送的字段名称,否则可能会影响服务器的响应
xhr.open("get","test.php",true);xhr.setRequestHeader("myHeader","myValue");xhr.send();
经测试,浏览器无法将自定义的头部字段添加到报文中
调用XHR对象的getResponseHeader()方法并传入头部字段名称,可以取得相应的响应头部信息。而调用 getAllResponseHeaders()方法 则可以取得一个包含所有头部信息的长字符串
var xhr;if(window.XMLHttpRequest){ xhr = new XMLHttpRequest();}else{ xhr = new ActiveXObject("Microsoft.XMLHTTP");}//异步接受响应xhr.onreadystatechange = function(){ if(xhr.readyState == 4){ if(xhr.status == 200){ /* Date: Wed, 01 Mar 2017 14:00:21 GMT Server: Apache/2.4.9 (Win32) PHP/5.5.12 Connection: Keep-Alive X-Powered-By: PHP/5.5.12 Content-Length: 1134 Keep-Alive: timeout=5, max=99 Content-Type: text/html */ console.log(xhr.getAllResponseHeaders()); console.log(xhr.getResponseHeader("keep-alive"));//timeout=5, max=99 }else{ alert("发生错误:" + xhr.status); } }}//发送请求xhr.open("get","test.php",true);xhr.send();
在PHP中,可以调用apache_request_headers()方法来获取请求报文的头部信息
/*array (size=8) "Host" => string "127.0.0.1" (length=9) "Connection" => string "keep-alive" (length=10) "Upgrade-Insecure-Requests" => string "1" (length=1) "User-Agent" => string "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36" (length=109) "Accept" => string "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" (length=74) "Referer" => string "http://127.0.0.1/box.html" (length=25) "Accept-Encoding" => string "gzip, deflate, sdch, br" (length=23) "Accept-Language" => string "zh-CN,zh;q=0.8,en;q=0.6" (length=23) */var_dump(apache_request_headers(
以上是关于http头部字段accept和content的主要内容,如果未能解决你的问题,请参考以下文章