http头部字段access

Posted wd404

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了http头部字段access相关的知识,希望对你有一定的参考价值。

1、介绍

access系列字段是用于解决ajax跨域问题的一种方案,也称为CORS机制。

ajax是严格遵循同源策略的,既不能从另一个域读取数据,也不能发送数据到另一个域。当然,对于同源的来说,是可以请求和处理响应的,并携带登录凭证cookie。

注意:html元素对于浏览器不存在跨域问题。

而cors机制,并不能影响服务端是否处理跨域,只是用于解决浏览器对跨域请求的响应的处理。

2、Access-Control-Allow-Origin

响应标头指定了该响应的资源是否被允许与给定的来源(origin)共享。

Access-Control-Allow-Origin: *
Access-Control-Allow-Origin: <origin>
Access-Control-Allow-Origin: null

(1)*

对于不包含登录凭据的请求,即不要求cookie,服务器会以“*”作为通配符,从而允许任意来源的请求代码都具有访问资源的权限。尝试使用通配符来响应包含凭据的请求会导致错误

(2)指定

指定一个来源(只能指定一个)。如果服务器支持多个来源的客户端,其必须以与指定客户端匹配的来源来响应请求。如果浏览器没有接收到Access-Control-Allow-Origin字段,则会报错

注意:即使设置不允许跨域,但请求过程中已经携带数据,服务端接收,可能会进行处理

3、Access-Control-Allow-Credentials

用于告知浏览器是否允许资格证书,实际就是请求是否携带cookie的登录凭证。其值区分大小写,为true时,表示允许。

  • 这时一般浏览器的ajax会设置请求头部字段withCredentials为true,浏览器会携带跨域的cookie
  • 而且Access-Control-Allow-Origin不能设置为*,必须是指定的某个url
Access-Control-Allow-Credentials: true

4、withCredentials

这是一个请求头部字段,ajax进行设置

  • true:在跨域请求时,浏览器会携带用户凭证
  • false:默认值,在跨域请求时,不会携带用户凭证;返回的 response 里也会忽略 cookie

5、简单请求和复杂请求

简单请求:

  • 请求方式只能是:GET、POST、HEAD
  • HTTP请求头限制这几种字段(不得人为设置该集合之外的其他首部字段):
    Accept、Accept-Language、Content-Language、Content-Type(需要注意额外的限制)、DPR、Downlink、Save-Data、Viewport-Width、Width
  • Content-type只能取:application/x-www-form-urlencoded、multipart/form-data、text/plain
  • 请求中的任意XMLHttpRequestUpload 对象均没有注册任何事件监听器;XMLHttpRequestUpload 对象可以使用 XMLHttpRequest.upload 属性访问。
  • 请求中没有使用 ReadableStream 对象。

复杂请求:除了简单请求之外的

6、预检

浏览器对复杂跨域请求在真正发送请求之前,会先进行一次预请求,就是参数为OPTIONS的第一次请求,他的作用是用于试探性的服务器响应是否正确,即是否能接受真正的请求,如果在options请求之后获取到的响应是拒绝性质的,例如500等http状态,那么它就会停止第二次的真正请求的访问。

7、Access-Control-Request-Method

在预检请求中,用于告知服务器在真正的请求中会采用哪种http方法,预检本身的请求总是OPTIONS方法。

Access-Control-Request-Method: POST

8、Access-Control-Request-Headers

在预检请求中,用于通知服务器在真正的请求中会采用哪些请求头。

Access-Control-Request-Headers: X-PINGOTHER, Content-Type

9、Access-Control-Allow-Methods

在预检中,服务器明确了客户端所要访问的资源允许使用的方法或方法列表。

Access-Control-Allow-Methods: POST, GET, OPTIONS

10、Access-Control-Allow-Headers

在预检请求中,用于告知浏览器将会在正式请求中允许的头部字段,对于简单头部字段不会列举,始终被支持

如果请求中含有 Access-Control-Request-Headers 字段,那么这个首部是必要的。

Access-Control-Allow-Headers: X-Custom-Header, Upgrade-Insecure-Requests
Access-Control-Allow-Headers: *

11、Access-Control-Expos-Headers

用于通知浏览器,列出了哪些首部可以作为响应的一部分暴露给外部。

默认情况下,只有七种 simple response headers(简单响应首部)可以暴露给外部:

  • Cache-Control
  • Content-Language
  • Content-Length
  • Content-Type
  • Expires
  • Last-Modified
  • Pragma

如果想要让客户端可以访问到其他的首部信息,可以将它们在 Access-Control-Expose-Headers 里面列出来。

Access-Control-Expose-Headers: Content-Length, X-Kuma-Revision

12、Access-Control-Max-Age

在预检请求中,用于通知浏览器返回结果(即 Access-Control-Allow-Methods 和Access-Control-Allow-Headers 提供的信息)可以被缓存多久

//单位为秒,值为-1表示禁用缓存,每次请求前都需要使用 OPTIONS 预检请求。而不同浏览器的最长允许缓存也有所差异
Access-Control-Max-Age: 600

HTTP的头部字段大全

   一、常用标准请求头字段
    Accept             设置接受的内容类型
 
    Accept-Charset         设置接受的字符编码
 
    Accept-Encoding        设置接受的编码格式
 
    Accept-Datetime        设置接受的版本时间
 
    Accept-Language        设置接受的语言
 
    Authorization          设置HTTP身份验证的凭证
 
    Cache-Control          设置请求响应链上所有的缓存机制必须遵守的指令
 
    Connection           设置当前连接和hop-by-hop协议请求字段列表的控制选项
 
    Content-Length         设置请求体的字节长度
 
    Content-MD5          设置基于MD5算法对请求体内容进行Base64二进制编码
 
    Content-Type           设置请求体的MIME类型(适用POST和PUT请求)
 
    Cookie             设置服务器使用Set-Cookie发送的http cookie
 
    Date               设置消息发送的日期和时间
 
    Expect             标识客户端需要的特殊浏览器行为
 
    Forwarded            披露客户端通过http代理连接web服务的源信息
 
    From               设置发送请求的用户的email地址
 
    Host               设置服务器域名和TCP端口号,如果使用的是服务请求标准端口号,端口号可以省略
 
    If-Match             设置客户端的ETag,当时客户端ETag和服务器生成的ETag一致才执行,适用于更新自从上次更新之后没有改变的资源
 
    If-Modified-Since      设置更新时间,从更新时间到服务端接受请求这段时间内如果资源没有改变,允许服务端返回304 Not Modified
 
    If-None-Match          设置客户端ETag,如果和服务端接受请求生成的ETage相同,允许服务端返回304 Not Modified
 
    If-Range             设置客户端ETag,如果和服务端接受请求生成的ETage相同,返回缺失的实体部分;否则返回整个新的实体
 
    If-Unmodified-Since      设置更新时间,只有从更新时间到服务端接受请求这段时间内实体没有改变,服务端才会发送响应
 
    Max-Forwards          限制代理或网关转发消息的次数
 
    Origin              标识跨域资源请求(请求服务端设置Access-Control-Allow-Origin响应字段)
 
    Pragma             设置特殊实现字段,可能会对请求响应链有多种影响
 
    Proxy-Authorization      为连接代理授权认证信息
 
    Range              请求部分实体,设置请求实体的字节数范围,具体可以参见HTTP/1.1中的Byte serving
 
    Referer             设置前一个页面的地址,并且前一个页面中的连接指向当前请求,意思就是如果当前请求是在A页面中发送的,那么referer就是A
 
                     页面的url地址(轶事:这个单词正确的拼法应该是"referrer",但是在很多规范中都拼成了"referer",所以这个单词也就成为标准用法)
 
    TE                设置用户代理期望接受的传输编码格式,和响应头中的Transfer-Encoding字段一样
 
    Upgrade             请求服务端升级协议
 
    User-Agent           用户代理的字符串值
 
    Via               通知服务器代理请求
 
    Warning             实体可能会发生的问题的通用警告
 
 
 
 二、常用非标准请求头字段
 
    X-Requested-With           标识Ajax请求,大部分js框架发送请求时都会设置它为XMLHttpRequest
 
    DNT                请求web应用禁用用户追踪
 
    X-Forwarded-For         一个事实标准,用来标识客户端通过HTTP代理或者负载均衡器连接的web服务器的原始IP地址
 
    X-Forwarded-Host           一个事实标准,用来标识客户端在HTTP请求头中请求的原始host,因为主机名或者反向代理的端口可能与处理请求的原始服务器不同
 
    X-Forwarded-Proto        一个事实标准,用来标识HTTP原始协议,因为反向代理或者负载均衡器和web服务器可能使用http,但是请求到反向代理使用的是https
 
    Front-End-Https         微软应用程序和负载均衡器使用的非标准header字段 Front-End-Https: on
    X-Http-Method-Override     请求web应用时,使用header字段中给定的方法(通常是put或者delete)覆盖请求中指定的方法(通常是post),如果用户代理或者防火
 
                      墙不支持直接使用put或者delete方法发送请求时,可以使用这个字段
 
    X-ATT-DeviceId             允许更简单的解析用户代理在AT&T设备上的MakeModel/Firmware
 
    X-Wap-Profile              设置描述当前连接设备的详细信息的xml文件在网络中的位置
 
    Proxy-Connection         早起HTTP版本中的一个误称,现在使用标准的connection字段
 
    X-UIDH               服务端深度包检测插入的一个唯一ID标识Verizon Wireless的客户
 
    X-Csrf-Token,X-CSRFToken,X-XSRF-TOKEN 防止跨站请求伪造
 
    X-Request-ID,X-Correlation-ID 标识客户端和服务端的HTTP请求
 
 
 
  三、常用标准响应头
 
    Access-Control-Allow-Origin 指定哪些站点可以参与跨站资源共享
 
    Accept-Patch                指定服务器支持的补丁文档格式,适用于http的patch方法
 
    Accept-Ranges               服务器通过byte serving支持的部分内容范围类型
 
    Age                         对象在代理缓存中暂存的秒数
 
    Allow                       设置特定资源的有效行为,适用方法不被允许的http 405错误
 
    Alt-Svc                     服务器使用"Alt-Svc"(Alternative Servicesde的缩写)头标识资源可以通过不同的网络位置或者不同的网络协议获取
 
    Cache-Control               告诉服务端到客户端所有的缓存机制是否可以缓存这个对象,单位是秒
 
    Connection                  设置当前连接和hop-by-hop协议请求字段列表的控制选项
 
    Content-Disposition         告诉客户端弹出一个文件下载框,并且可以指定下载文件名
 
    Content-Encoding            设置数据使用的编码类型
 
    Content-Language            为封闭内容设置自然语言或者目标用户语言
 
    Content-Length              响应体的字节长度
 
    Content-Location            设置返回数据的另一个位置
 
    Content-MD5                 设置基于MD5算法对响应体内容进行Base64二进制编码
 
    Content-Range               标识响应体内容属于完整消息体中的那一部分
 
    Content-Type                设置响应体的MIME类型
 
    Date                        设置消息发送的日期和时间
 
    ETag                        特定版本资源的标识符,通常是消息摘要
 
    Expires                     设置响应体的过期时间
 
    Last-Modified               设置请求对象最后一次的修改日期
 
    Link                        设置与其他资源的类型关系
 
    Location                    在重定向中或者创建新资源时使用
 
    P3P                         以P3P:CP="your_compact_policy"的格式设置支持P3P(Platform for Privacy Preferences Project)策略,
 
                        大部分浏览器没有完全支持P3P策略,许多站点设置假的策略内容欺骗支持P3P策略的浏览器以获取第三方cookie的授权
 
    Pragma                      设置特殊实现字段,可能会对请求响应链有多种影响
 
    Proxy-Authenticate          设置访问代理的请求权限
 
    Public-Key-Pins             设置站点的授权TLS证书
 
    Refresh                     "重定向或者新资源创建时使用,在页面的头部有个扩展可以实现相似的功能,并且大部分浏览器都支持
 
    Retry-After                 如果实体暂时不可用,可以设置这个值让客户端重试,可以使用时间段(单位是秒)或者HTTP时间
 
    Server                      服务器名称
 
    Set-Cookie                  设置HTTP Cookie
 
    Status                      设置HTTP响应状态
 
    Strict-Transport-Security   一种HSTS策略通知HTTP客户端缓存HTTPS策略多长时间以及是否应用到子域
 
    Trailer                     标识给定的header字段将展示在后续的chunked编码的消息中
 
    Transfer-Encoding           设置传输实体的编码格式,目前支持的格式: chunked, compress, deflate, gzip, identity
 
    TSV Tracking Status Value, 在响应中设置给DNT(do-not-track),可能的取值
 
       "!" — under construction
 
       "?" — dynamic
 
       "G" — gateway to multiple parties
 
       "N" — not tracking
 
       "T" — tracking
 
       "C" — tracking with consent
 
       "P" — tracking only if consented
 
       "D" — disregarding DNT
 
       "U" — updated
 
    Upgrade                      请求客户端升级协议
 
    Vary                         通知下级代理如何匹配未来的请求头已让其决定缓存的响应是否可用而不是重新从源主机请求新的
 
    Via                          通知客户端代理,通过其要发送什么响应
 
    Warning                      实体可能会发生的问题的通用警告
 
    WWW-Authenticate             标识访问请求实体的身份验证方案
 
    X-Frame-Options              点击劫持保护:
 
       deny frame  中不渲染
 
       sameorigin  如果源不匹配不渲染
 
       allow-from  允许指定位置访问
 
       allowall    不标准,允许任意位置访问
 
 
 
 四、常用的非标准响应头 
 
    X-XSS-Protection              过滤跨站脚本
 
    Content-Security-Policy, X-Content-Security-Policy,X-WebKit-CSP 定义内容安全策略
 
    X-Content-Type-Options        唯一的取值是"",阻止IE在响应中嗅探定义的内容格式以外的其他MIME格式
 
    X-Powered-By                  指定支持web应用的技术
 
    X-UA-Compatible               推荐首选的渲染引擎来展示内容,通常向后兼容,也用于激活IE中内嵌chrome框架插件
 
    X-Content-Duration            提供音视频的持续时间,单位是秒,只有Gecko内核浏览器支持
 
    Upgrade-Insecure-Requests     标识服务器是否可以处理HTTPS协议
 
    X-Request-ID,X-Correlation-ID 标识一个客户端和服务端的请求

不是很全啦,嘿嘿

以上是关于http头部字段access的主要内容,如果未能解决你的问题,请参考以下文章

HTTP的头部字段大全

HTTP的头部字段大全

http头部字段accept和content

HTTP X-Forwarded-For 头部字段的应用

Spring XML配置文件头部字段的解析

如何在Android应用里对HTTP请求头部添加适当的User-Agent字段