AutoJs6

- Overview - 综述
- About - 关于文档
- Progress - 文档部署进度
- Changelog - 文档更新日志

- Manual - AutoJs6 使用手册
- Q & A - 疑难解答

- Global - 全局对象
- Automator - 自动化
- AutoJs6 - 本体应用
- App - 通用应用
- Color - 颜色
- Image - 图像
- OCR - 光学字符识别
- Keys - 按键
- Device - 设备
- Storage - 储存
- File - 文件
- Engine - 引擎
- Task - 任务
- Module - 模块
- Plugins - 插件
- Toast - 消息浮动框
- Notice - 消息通知
- Console - 控制台
- Shell
- Media - 多媒体
- Sensor - 传感器
- Recorder - 记录器
- Timer - 定时器
- Thread - 线程
- Continuation - 协程
- Event - 事件监听
- Dialog - 对话框
- Floaty - 悬浮窗
- Canvas - 画布
- UI - 用户界面
- Web - 万维网
- HTTP
- Base64
- Crypto - 密文
- Internationalization - 国际化
- Standardization - 标准化
- E4X

- UiSelector - 选择器
- UiObject - 控件节点
- UiObjectCollection - 控件集合
- UiObjectActions - 控件节点行为
- ImageWrapper - 包装图像类
- App - 应用枚举类
- Color - 颜色类
- Version - 版本工具类
- Polyfill - 代码填泥
- Arrayx - Array 扩展
- Numberx - Number 扩展
- Mathx - Math 扩展

- Exceptions - 异常
- Intent - 意图
- Runtime - 运行时
- Context - 上下文
- Activity - 活动

- Scripting Java - 脚本化 Java
- Android API Level - 安卓 API 级别
- Color Table - 颜色列表

- Glossaries - 术语
- HttpHeader - HTTP 标头
- HttpRequestMethods - HTTP 请求方法
- MimeType - MIME 类型
- NotificationChannel - 通知渠道

- Data Types - 数据类型
- Omnipotent Types - 全能类型
- Storage - 存储类
- AndroidBundle
- AndroidRect
- CryptoCipherOptions
- CryptoKey
- CryptoKeyPair
- ConsoleBuildOptions
- HttpRequestBuilderOptions
- HttpRequestHeaders
- HttpResponseBody
- HttpResponseHeaders
- HttpResponse
- InjectableWebClient
- InjectableWebView
- NoticeOptions
- NoticeChannelOptions
- NoticePresetConfiguration
- NoticeBuilder
- Okhttp3HttpUrl
- OcrOptions
- Okhttp3Request
- OpencvPoint
- OpencvRect
- OpencvSize

- GitHub - 应用项目地址
- GitHub - 文档项目地址

# HttpRequestHeaders#

HttpRequestHeaders 是一个代表 HTTP 请求头 信息的接口.

HTTP 标头字段是大小写 不敏感 的 (根据 RFC 2616), 本章节采用 全部小写 的形式表示标头字段 (如 content-type).

> 注: 本章节仅列出部分请求头字段信息, 更多信息可参阅 HTTP 标头 术语章节.

HttpRequestHeaders

## [I] HttpRequestHeaders#

HttpRequestHeaders 接口类型的变量, 实际是将 JavaScript 对象 (通常作为 `options.headers` 的值) 进行遍历, 将每一个 header 依次传入 okhttp3.Request.Builder 实例.

大致过程如下:

    /**
     * @param {okhttp3.Request.Builder} request
     */
    function setHeaders(request) {
        Object.entries(this.options.headers || {}).forEach((entries) => {
            let [ key, value ] = entries;
            if (Array.isArray(value)) {
                value.forEach(v => request.header(key, v));
            } else {
                request.header(key, value);
            }
        });
    }

## [p?] accept#

- { string | string[] }

accept 请求头用来表明客户端可处理的内容类型.

    # 语法 (合并)
    accept: (<MIME_type>/<MIME_subtype>|<MIME_type>/*|*/*)[;q=<quality-value>]

    # 语法 (展开)
    accept: <MIME_type>/<MIME_subtype>
    accept: <MIME_type>/<MIME_subtype>;q=<quality-value>
    accept: <MIME_type>/*
    accept: <MIME_type>/*;q=<quality-value>
    accept: */*
    accept: */*;q=<quality-value>

    # 示例
    accept: text/html
    accept: image/*
    accept: text/html, application/xhtml+xml, application/xml;q=0.9, */*;q=0.8

指令 | 含义
--- | ---
<MIME_type>/<MIME_subtype> | 单一精确的 MIME 类型, 如text/html
<MIME_type>/* | 未指明子类的一类 MIME 类型. 如 image/* 可用于指代 image/png, image/svg, image/gif 等任何图片类型
/ | 任意类型的 MIME 类型
<quality-value> | 相对质量价值, 又称作权重, 表示优先顺序, 范围 [0..1], 默认为 1

> 参阅: MDN

## [p?] accept-encoding#

- { string | string[] }

请求头 accept-encoding 将客户端能够理解的内容编码方式 (通常为压缩算法) 通知给服务端.

    # 语法 (合并)
    accept-encoding: (gzip|compress|deflate|br|identity|*)[;q=<quality-value>]

    # 语法 (展开)
    accept-encoding: gzip
    accept-encoding: gzip;q=<quality-value>
    accept-encoding: compress
    accept-encoding: compress;q=<quality-value>
    accept-encoding: deflate
    accept-encoding: deflate;q=<quality-value>
    accept-encoding: br
    accept-encoding: br;q=<quality-value>
    accept-encoding: identity
    accept-encoding: identity;q=<quality-value>
    accept-encoding: *
    accept-encoding: *;q=<quality-value>

    # 示例
    accept-encoding: gzip
    accept-encoding: gzip, compress, br
    accept-encoding: br;q=1.0, gzip;q=0.8, *;q=0.1

指令 | 含义
--- | ---
gzip | 采用 Lempel-Ziv coding (LZ77) 压缩算法, 以及 32 位 CRC 校验的编码方式
compress | 采用 Lempel-Ziv-Welch (LZW) 压缩算法
deflate | 采用 zlib 结构 (RFC 1950) 和 deflate 压缩算法 (RFC 1951)
br | 采用 Brotli 算法的编码方式
identity | 用于指代自身 (如: 未经过压缩和修改). 除非特别指明, 这个标记始终可被接受
<quality-value> | 相对质量价值, 又称作权重, 表示优先顺序, 范围 [0..1], 默认为 1

> 参阅: MDN

## [p?] accept-language#

- { string | string[] }

accept-language 请求头允许客户端声明它可以理解的自然语言, 及优先选择的区域方言.

    # 语法 (合并)
    accept-language: (<language>|*)[;q=<quality-value>]

    # 语法 (展开)
    accept-language: <language>
    accept-language: <language>;q=<quality-value>
    accept-language: *
    accept-language: *;q=<quality-value>

    # 示例
    accept-language: de
    accept-language: de-CH
    accept-language: en-US,en;q=0.5
    accept-language: zh-CN, zh;q=0.8, zh-TW;q=0.7, zh-HK;q=0.5, en-US;q=0.3, en;q=0.2

指令 | 含义
--- | ---
<language> | 语言代码或语言区域代码
* | 任意语言
<quality-value> | 相对质量价值, 又称作权重, 表示优先顺序, 范围 [0..1], 默认为 1

> 参阅: MDN

## [p?] connection#

- { string | string[] }

connection 通用标头控制网络连接在当前会话完成后是否仍然保持打开状态.

    # 示例
    connection: keep-alive
    connection: close

指令 | 含义
--- | ---
close | 表明客户端或服务器想要关闭该网络连接. 这是 HTTP/1.0 请求的默认值
keep-alive | 表明客户端想要保持该网络连接打开. HTTP/1.1 的请求默认使用一个持久连接
... ... | ... ...

> 参阅: MDN

## [p?] host#

- { string | string[] }

host 头表示请求发送的目标服务器主机名和端口号.

如无端口号, 将使用服务默认端口 (如 HTTPS: 443, HTTP: 80 等)

所有 HTTP/1.1 请求报文中 必须包含 一个 host 头字段, 缺少或超过一个 host 头的 HTTP/1.1 请求可能会收到 400 (Bad Request) 状态码.

    # 语法
    host: <host>
    host: <host>:<port>

    # 示例
    host: developer.mozilla.org

指令 | 含义
--- | ---
<host> | 服务器域名
<port> | 服务器监听的 TCP 端口号

> 参阅: MDN

## [p?] referer#

- { string | string[] }

referer 请求头包含了当前请求来源页面的地址.

服务端一般使用 referer 头识别访问来源, 以此进行统计分析, 日志记录及缓存优化等.

    # 语法
    referer: <url>

    # 示例
    referer: https://developer.mozilla.org/en-US/docs/Web/JavaScript

指令 | 含义
--- | ---
<url> | 当前页面被链接而至的前一页面的绝对路径或者相对路径

> 参阅: MDN

## [p?] user-agent#

- { string | string[] }

user-agent 首部包含了一个特征字符串, 用于让网络协议的对端识别发起请求的用户代理软件的应用类型, 操作系统, 软件开发商以及版本号.

    # 语法
    User-Agent: <product> / <product-version> <comment>

    # 浏览器常用格式
    User-Agent: Mozilla/<version> (<system-information>) <platform> (<platform-details>) <extensions>

    # 示例
    Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0
    Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/42.0
    Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36
    Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36 OPR/38.0.2220.41
    Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1
    Googlebot/2.1 (+http://www.google.com/bot.html)

指令 | 含义
--- | ---
<product> | 产品识别码
<product-version> | 产品版本号
<comment> | 零个或多个关于组成产品信息的注释

> 参阅: MDN

## [p?] cache-control#

- { string | string[] }

标头字段 cache-control 被用于在 HTTP 请求和响应中, 通过指定指令来实现缓存机制.

    # 语法
    cache-control: max-age=<seconds>
    cache-control: max-stale[=<seconds>]
    cache-control: min-fresh=<seconds>
    cache-control: no-cache
    cache-control: no-store
    cache-control: no-transform
    cache-control: only-if-cached
    ... ...

指令 | 含义
--- | ---
max-age=<seconds> | 设置缓存存储最大周期, 单位为秒, 超过这个时间缓存被认为过期
max-state[=<seconds>] | 表明客户端愿意接收一个已经过期的资源. 秒数可选, 表示响应过时后不能超过该给定的时间
min-fresh=<seconds> | 表示客户端希望获取一个能在指定的秒数内保持其最新状态的响应
no-cache | 发布缓存副本前, 强制要求原始服务器进行验证缓存中的请求
no-store | 不使用任何缓存
no-transform | 不得对资源进行转换或转变
only-if-cached | 表明客户端只接受已缓存的响应, 且不要向原始服务器检查是否有更新的拷贝
... ... | ... ...

> 参阅: MDN

## [p?] cookie#

- { string | string[] }

cookie 请求标头包含先前由服务器通过 set-cookie 标头投放或通过 JavaScript 的 `Document.cookie` 方法设置, 然后存储到客户端的 HTTP cookie.

这个标头是可选的, 且可能会被忽略, 例如在浏览器隐私设置里禁用了 cookie 等.

    # 语法
    cookie: <cookie-list>
    cookie: name=value
    cookie: name=value; name2=value2; name3=value3 ...

    # 示例
    cookie: PHPSESSID=298zf09hf012fh2; csrftoken=u32t4o3tb3gg43; _gat=1

指令 | 含义
--- | ---
<cookie-list> | 一系列的名值对, 形式为 =, 以分号和空格分隔

> 参阅: MDN

## [p?] range#

- { string | string[] }

Range 请求首部告知服务器返回文件的哪一部分.

在一个 Range 首部中可以一次性请求多个部分, 服务器会以 multipart 文件的形式将其返回.

    # 语法
    range: <unit>=<range-start>-
    range: <unit>=<range-start>-<range-end>
    range: <unit>=<range-start>-<range-end>, <range-start>-<range-end>
    range: <unit>=<range-start>-<range-end>, <range-start>-<range-end>, <range-start>-<range-end>

    # 示例
    range: bytes=200-1000, 2000-6576, 19000-

指令 | 含义
--- | ---
<unit> | 数据区间所采用的单位, 通常是字节 (bytes)
<range-start> | 一个整数, 表示在特定单位下范围的起始值
<range-end> | 一个整数, 表示在特定单位下范围的结束值. 可选, 默认表示范围一直到文档结束

> 参阅: MDN