HTTP协议
超文本传输协议(HTTP,HyperText Transfer Protocol)
最常见B/s架构中,使用,浏览器端与服务器端数据交互协议。
协议:约定好的一套语法规则。
规定:请求数据格式,与响应数据格式。
是应用层协议
请求协议
规范,浏览器向服务器发送数据格式
以上内容,就是浏览器在向服务器的http://shop.kang.com/index.php?p=back&c=Admin&a=login请求时,所发送的数据。
请求数据分成三部分(列子中其实2个部分):
请求行:request_line
请求数据的第一行,用来说明当前请求的最基本信息。
由三块组成:
GET /index.php?p=back&c=Admin&a=login HTTP/1.1 换行
方式 资源地址(没有域名) 协议版本 (回车换行CRLF)
请求头:request_header
请求头信息,请求标头
浏览器需要传输给服务器的属性数据。
# 主机,请求的主机。用于标识一台web服务器上的其中一个虚拟主机的。
Host: shop.kang.com
# 用户代理UA,什么发出的请求。
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0
# 可以接受的内容类型
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
# 可以接受的语言
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
# 可以接受的数据编码类型(压缩编码)
Accept-Encoding: gzip, deflate
# 携带的cookie数据
Cookie: PHPSESSID=i76sa2297sp1adlfk3e4eja612
# tcp连接类型 keep-alive保持激活
Connection: keep-alive
# Keep-Alive: 30 保持连接的时间段秒
# 缓存控制选项
Pragma: no-cache
Cache-Control: no-cache
注意语法格式:
头,由标识与内容组成,使用冒号分隔(标识与冒号间不能存在空格)
每个头占用一行,行结尾,使用CRLF(回车换行 )
可以存在多个头。
头信息结束使用空行标志
请求主体:request_content
请求的主要用户数据。
就是POST数据。
如果方式为POST,则需要请求主体部分,(GET没有请求主体)
操作请求
通过浏览器所携带属性,完成特定功能。
多语言程序(I18n,国际化程序)
项目:提供多套语言版本。
浏览器:请求时,携带属性,告知服务器,需要那种语言。
通过请求头:Accept-Language 告知服务器,希望使用的语言。
项目:可以获取浏览器需要的语言,载入相应的语言包,做展示。
获取:
找到最佳匹配:
项目存在默认的语言。(浏览器需要的,项目都没有提供)
确定浏览器可以接受的语言列表,找到服务器中,最匹配(权重依次匹配)
PHP发出请求(模拟请求)
采集程序。
公共平台开发。
发出请求:
连接目标服务器,发送符合请求协议格式的数据。
服务器就会将其视为请求,发出响应!
连接:
Fsockopen();建立一个internet连接
处理请求数据:
向服务器发送,发出请求。
通过函数 fwrite即可完成。(fwrite可以向文件和网络资源位置发送数据)
获取服务器的响应数据
使用 fgetS()完成:
Feof,(end of file)用于检测是否到到数据流末尾。
断开连接
POST请求
存在请求主体数据。
请求行:POST
请求头:存在对请求主体的描述
请求主体:post数据
CURL-Client URL
PHP扩展。
可以用来模拟URL客户端(浏览器,请求代理)的工具扩展。
开启扩展
Apacherestart
Tip:
依赖类库:
Php目录:
将以上文件拷贝到系统目录(windows中),将php目录设置为path环境变量。
模拟GET
Curl资源 = curl_init()初始化curl
curl_setopt(curl资源,选项标志,选项值)
curl_exec(资源)发出请求
curl_close()关闭资源
POST请求
处理响应数据
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);//
请求执行时,不是将响应直接输出,而是以返回值的形式处理。
POST文件上传
Post数据使用文件地址,前使用@标志为文件而不是字符串。
处理响应头
CURLOPT_HEADER:是否获取响应头数据
处理会话COOKIE
(模拟登录)
接收服务器设置的cookie,并存储于请求代理端:
CURLOPT_COOKIEJAR 指定存储服务器所设置的cookie变量存储位置。
发出请求时携带拥有的cookie:
CURLOPT_COOKIEFILE
请求时携带的cookie数据所在的位置。
响应协议
也是三部分:
1响应行2响应头3响应主体
响应行
响应数据的第一行,响应结果的概述
http/1.1 302 FoundCRLF
版本 响应状态码 响应消息
响应状态码,和响应消息,一一对应。
302 Found:重定向,配合响应头Location使用。
404 Not Found:请求资源不存在。
403 Forbidden:没有权限访问该地址
200 ok: 请求成功
500 Server Internal Error: 服务器内部错误
响应头
服务器告知浏览器属性信息。
响应主体
主体数据(通过浏览器的查看源代码所看到的内容)
操作响应
操作响应头,header()可以
操作响应主体,任何的输出,都是响应主体。(echo, print,var_dump,PHP标签之外的所有HTML代码)
控制器浏览器缓存
Expires:有效期,时间点,GMT时间,格林威治平时。
Gmdate() 将时间戳格式化为格林威治平时。
D,星期
M,月(三个英文月)
HTTP下载
下载:文件从服务器端传输到浏览器端。发生于服务器响应时。
PHP仅仅需要将需要下载的内容作为响应主体输出即可。
通过响应头:Content-Disposition:告知浏览器,接受到响应主体后的处理方式。
值:attachment 表示以附件的方式处理响应主体。
如果是文件的下载:
将文件内容作为响应主体输出即可!
控制下载的文件名(默认为请求的脚本名)
控制主体类型:
细致控制:
主体大小。