php HTTP协议
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 换行
方式 资源地址(没有域名) 协议版本 \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, print,var_dump,PHP标签之外的所有HTML代码)
控制器浏览器缓存
Expires:有效期,时间点,GMT时间,格林威治平时。
Gmdate() 将时间戳格式化为格林威治平时。
D,星期
M,月(三个英文月)
HTTP下载
下载:文件从服务器端传输到浏览器端。发生于服务器响应时。
PHP仅仅需要将需要下载的内容作为响应主体输出即可。
通过响应头:Content-Disposition:告知浏览器,接受到响应主体后的处理方式。
值:attachment 表示以附件的方式处理响应主体。
如果是文件的下载:
将文件内容作为响应主体输出即可!
控制下载的文件名(默认为请求的脚本名)
控制主体类型:
细致控制:
主体大小。
php HTTP协议的更多相关文章
- HTTP协议系列(1)
一.为什么学习Http协议 首先明白我们为什么学习HTTP协议,也就是说明白HTTP协议的作用.HTTP协议是用于客户端与服务器之间的通讯.明白了HTTP协议的作用也就知道了为什么要学习H ...
- 重温Http协议--请求报文和响应报文
http协议是位于应用层的协议,我们在日常浏览网页比如在导航网站请求百度首页的时候,会先通过http协议把请求做一个类似于编码的工作,发送给百度的服务器,然后在百度服务器响应请求时把相应的内容再通过h ...
- 协议森林17 我和你的悄悄话 (SSL/TLS协议)
作者:Vamei 出处:http://www.cnblogs.com/vamei 转载请先与我联系. TLS名为传输层安全协议(Transport Layer Protocol),这个协议是一套加密的 ...
- 协议森林16 小美的桌号(DHCP协议)
作者:Vamei 出处:http://www.cnblogs.com/vamei 转载请先与我联系. DHCP协议用于动态的配置电脑的网络相关参数,如主机的IP地址,路由器出口地址.DNS域名服务器地 ...
- 简约之美Jodd-http--深入源码理解http协议
Jodd 是一个开源的 Java 工具集, 包含一些实用的工具类和小型框架.简单,却很强大! jodd-http是一个轻巧的HTTP客户端.现在我们以一个简单的示例从源码层看看是如何实现的? Http ...
- 【JavaScript】javascript中伪协议(javascript:)使用探讨
javascript:这个特殊的协议类型声明了URL的主体是任意的javascript代码,它由javascript的解释器运行. 比如下面这个死链接: <a href="javasc ...
- SNMP简单网络管理协议
声明:以下内容是学习谌玺老师视频整理出来(http://edu.51cto.com/course/course_id-861.html) SNMP(Simple Network Management ...
- 海鑫智圣:物联网漫谈之MQTT协议
什么是MQTT协议 MQTT(消息队列遥测传输协议)是IBM在1999年专门针对物联网等应用场景来制订的轻量级双向消息传输协议,它主要是为了解决物联网上使用到的设备的互相通信的问题,以及这些设备与后端 ...
- linux-图形化远程管理协议
远程管理控制方式: RDP(remote desktop protocol)协议: telnet: SSH(Secure Shell): RFB(Remote FrameBuffer)协议(图形化远程 ...
- RTP与RTCP协议介绍(转载)
RTSP发起/终结流媒体.RTP传输流媒体数据 .RTCP对RTP进行控制,同步.RTP中没有连接的概念,本身并不能为按序传输数据包提供可靠的保证,也不提供流量控制和拥塞控制,这些都由RTCP来负责完 ...
随机推荐
- JAVA项目部署(1)
之前小菜觉得项目发布啊部署可难了,今个儿小菜接有幸触了一下java项目的打包和部署,没上手前觉得可高大上了,可难了,小菜这人就是做没做过的事前特别喜欢自己吓唬自己,这个习惯不好,得改!其实自己真正动手 ...
- Dubbo源码分析:Exchanger
实现此接口获取Server服务. 实现的类只有HeaderExchanger类. 方法 时序图
- java接口的成员变量的修饰符
前言:c++学的java都忘记了不少 interface(接口)可将其想象为一个"纯"抽象类.它允许创建者规定一个类的基本形式:方法名.自变量列表以及返回类型,但不实现方法主体 接 ...
- *arg和**kwarg作用
*args:可以理解为只有一列的表格,长度不固定. **kwargs:可以理解为字典,长度也不固定. 1.函数调用里的*arg和**kwarg: (1) *arg:元组或列表 ...
- 不用VS调试.Net
将来,任何开发人员都将需要调试应用程序,并且将无法访问Visual Studio,在某些情况下甚至无法访问源代码.例如,在生产web或应用服务器上调试问题时,我真的不想安装Visual Studio并 ...
- WinDbg常用命令系列---显示局部变量dv
dv (Display Local Variables) dv命令显示当前作用域中所有局部变量的名称和值. dv [Flags] [Pattern] 参数: Flags显示其他信息.可以包括以下任何区 ...
- JavaScript高级程序编程(四)
2017.7.12 北京 数伏第一天 本日总结: 1.线上服务器时常显示.woff文件丢失解决办法 (IIS服务器) 添加MIME类型 添加三条: 文件扩展名 MIME类型 .svg ...
- SP19997 MOON2 - Moon Safari (Hard) 【数论,多项式】
题目描述:求 \[ \sum_{i=1}^ni^kr^i \] 对某个质数取模.\(T\)组数据. 数据范围:\(n,r\le 10^{18},\sum k\le 2.56\times 10^6\) ...
- 【00NOIP普及组】税收与补贴问题(信息学奥赛一本通 1911)( 洛谷 1023)
[题目描述] 每样商品的价格越低,其销量就会相应增大.现已知某种商品的成本及其在若干价位上的销量(产品不会低于成本销售),并假设相邻价位间销量的变化是线性的且在价格高于给 定的最高价位后,销量以某固定 ...
- 深度讨论i++问题
例题1:下列程序的输出结果是多少? public class Test { static { int x = 5; } static int x, y; public static void main ...