HTTP协议

HTTP协议

超文本传输协议(HTTPHyperText 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 换行

方式 资源地址没有域名) 协议版本 \r\n(回车换行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(回车换行\r\n

可以存在多个头

信息结束使用空行标志

 

 

 

请求主体: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 printvar_dumpPHP标签之外的所有HTML代码)

 

控制器浏览器缓存

 

Expires有效期,时间GMT时间,格林威治平时。

Gmdate() 时间戳格式化为格林威治平时。

D,星期

M,月(三个英文月)

 

 

 

HTTP下载

下载:文件从服务器端传输到浏览器端。发生于服务器响应时。

PHP仅仅需要将需要下载的内容作为响应主体输出即可。

 

通过响应头Content-Disposition告知浏览器,接受到响应主体后的处理方式。

attachment 表示以附件的方式处理响应主体。

 

如果是文件的下载:

文件内容作为响应主体输出即可!

 

 

控制下载的文件名(默认为请脚本名)

 

 

控制主体类型:

 

 

细致控制:

主体大小。

 

posted @ 2018-10-08 09:17  Strif  阅读(204)  评论(0编辑  收藏  举报