PHP 手册
后退 | 附录 L. 支持的协议／封装协议列表 | 前进

# HTTP 和 HTTPS

PHP 3, PHP 4, PHP 5。自 PHP 4.3.0 起支持 `https://`

- `http://example.com`

- `http://example.com/file.php?var1=val1&var2=val2`

- `http://user:password@example.com`

- `https://example.com`

- `https://example.com/file.php?var1=val1&var2=val2`

- `https://user:password@example.com`

允许通过 HTTP 1.0 使用 HTTP GET 方法对文件／资源进行只读访问。Host: 报头也会通过请求发送出去以支持基于域名的虚拟主机。如果在 ini 文件或者流上下文配置了 user_agent 字符串，也会被包括在请求报头中。

警告
当使用 SSL 时，Microsoft IIS 将违反协议不发送 close_notify 标记就关闭连接。PHP 将在到达数据尾端时报告 "SSL: Fatal Protocol Error"。要绕过此问题，应将 error_reporting 级别降低为不包括警告。PHP 4.3.7 及更高版本可以在当使用 https:// 封装协议打开流的时候检测出有此问题的 IIS 服务器并抑制警告。如果使用 fsockopen() 来创建一个 ssl:// 套接字，则需要自己检测并抑制警告信息。

自 PHP 4.0.5 起支持重定向。如果使用较早版本的 PHP 则需要在 URL 末尾包括一个斜线。如果一定要知道文档所在的资源的 url（在所有重定向被处理过之后），则需要处理从流返回的一系列响应报头信息。

`<?php $url = 'http://www.example.com/redirecting_page.php'; $fp = fopen($url, 'r'); /* 在 PHP 4.3.0 之前使用 $http_response_header 而不是 stream_get_meta_data() */ $meta_data = stream_get_meta_data($fp); foreach($meta_data['wrapper_data'] as $response) { /* 重定向到何处? */ if (substr(strtolower($response), 0, 18) == 'content-location: ') { /* 把要重定向的链接赋值给 $url */ $url = substr($response, 18); } } ?>`

流允许访问资源的正文，报头部分保存在 $http_response_header 变量中。自 PHP 4.3.0 起，可以用 stream_get_meta_data() 得到报头。

HTTP 连接是只读的，不能将数据写入或者拷贝文件到 HTTP 资源。

> 注: 自 PHP 4.3.0 起开始支持 HTTPS，需要在编译时加入 OpenSSL 的支持。

表格 L-2. Wrapper Summary

属性 | 支持
--- | ---
受限于 allow_url_fopen | 是
允许读取 | 是
允许写入 | 否
允许附加 | 否
允许同时读写 | 无效
支持 stat() | 否
支持 unlink() | 否
支持 rename() | 否
支持 mkdir() | 否
支持 rmdir() | 否

表格 L-3. 上下文选项

名称 | 用法 | 默认值
--- | --- | ---
method | `GET`、`POST` 或任何其它被远程服务器支持的 HTTP 方式。 | `GET`
header | 请求中要发送的附加的头信息。此选项中的值将覆盖其它值（例如 User-agent:，Host: 和 Authentication:）。 |
user_agent | 在 User-Agent: 头信息中要发送的值。此值仅用于没有在上面 header 的上下文选项中指定 user-agent 时。 | `php.ini` 设置：user_agent
content | 头信息之后要发送的附加数据。典型用于 POST 或 PUT 请求。 |
proxy | 以 URI 格式指定的代理服务器（例如 tcp://proxy.example.com:5100）。 |
request_fulluri | 设置为 `TRUE` 时，建立请求时整个 URI 将被使用。(即 GET http://www.example.com/path/to/file.html HTTP/1.0)。 而这是一个非标准请求格式，某些代理服务器需要它。 | `FALSE`
max_redirects | 连续重定向的最大值。从 PHP 5.1.0 开始存在。 | 20

> 底层的套接字流（socket stream）上下文选项: 有可能通过底层传输（underlying transport）支持附加的上下文选项。对于 http:// 流，参考 tcp:// 传输的上下文选项。对于 https:// 流，参考 ssl:// 传输的上下文选项。

后退 | 起点 | 前进
Socket | 上一级 | FTP 和 FTPS