http头部字段accept和content

Posted wd404

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
  • 设置多个允许的接收类型,以逗号,间隔,还可以为每个类型在其后使用分号;定义q属性,表示优先程度

(2)请求Content-Type

用于向服务器告知请求体部中的mime类型。

  • get请求没有体部数据时,默认无该字段
  • form表单可以基于enctype属性设置,会影响该字段
  • ajax可以在请求时直接设置该字段值
//get请求,没有体部数据时,没有content-type字段
//ajax设置之一
Content-Type: application/json; charset=UTF-8
//form表单
Content-Type: application/x-www-form-urlencoded
Content-Type:
multipart/form-data; boundary=----WebKitFormBoundaryjtIySeZn1jkJKe97
Content-Type: text/plain

(3)响应Content-Type

用于向浏览器告知响应体部中的mime类型。

Content-Type: text/html; charset=utf-8
Content-Type: image/png
content-type: image/gif
content-type: text/css
content-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: gzip
Accept-Encoding: compress
Accept-Encoding: deflate
Accept-Encoding: br
Accept-Encoding: identity
Accept-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

具体是否选择进行压缩:

  • 双方是否支持同一方案
  • 要发送的数据已经经过压缩,再次进行压缩不会导致被传输的数据量更小。一些图像格式的文件会存在这种情况;
  • 服务器超载,无法承受压缩需求导致的计算开销。通常,如果服务器使用超过 80% 的计算能力,微软建议不要压缩。

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,但是为了友好更常见的是忽略,直接返回内容。

 

 

[转]深入理解ajax系列——头部消息

  每个HTTP请求和响应都会带有相应的头部信息,其中有的对开发人员有用。XHR对象提供了操作头部信息的方法。本文将详细介绍HTTP的头部信息

默认信息

  默认情况下,在发送XHR请求的同时,还会发送下列头部信息

技术分享图片
Accept: 浏览器能够处理的内容类型
Accept-Charset: 浏览器能够显示的字符集
Accept-Encoding: 浏览器能够处理的压缩编码
Accept-Language: 浏览器当前设置的语言
Connection: 浏览器与服务器之间连接的类型
Cookie: 当前页面设置的任何Cookie
Host: 发出请求的页面所在的域
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的主要内容,如果未能解决你的问题,请参考以下文章

HTTP的头部字段大全

HTTP -- 请求/响应 结构

HTTP报文头解析

AJAX:HTTP头部信息

HTTP请求头和响应头部包括的信息有哪些?

[转]深入理解ajax系列——头部消息