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协议的更多相关文章

  1. HTTP协议系列(1)

    一.为什么学习Http协议       首先明白我们为什么学习HTTP协议,也就是说明白HTTP协议的作用.HTTP协议是用于客户端与服务器之间的通讯.明白了HTTP协议的作用也就知道了为什么要学习H ...

  2. 重温Http协议--请求报文和响应报文

    http协议是位于应用层的协议,我们在日常浏览网页比如在导航网站请求百度首页的时候,会先通过http协议把请求做一个类似于编码的工作,发送给百度的服务器,然后在百度服务器响应请求时把相应的内容再通过h ...

  3. 协议森林17 我和你的悄悄话 (SSL/TLS协议)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 转载请先与我联系. TLS名为传输层安全协议(Transport Layer Protocol),这个协议是一套加密的 ...

  4. 协议森林16 小美的桌号(DHCP协议)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 转载请先与我联系. DHCP协议用于动态的配置电脑的网络相关参数,如主机的IP地址,路由器出口地址.DNS域名服务器地 ...

  5. 简约之美Jodd-http--深入源码理解http协议

    Jodd 是一个开源的 Java 工具集, 包含一些实用的工具类和小型框架.简单,却很强大! jodd-http是一个轻巧的HTTP客户端.现在我们以一个简单的示例从源码层看看是如何实现的? Http ...

  6. 【JavaScript】javascript中伪协议(javascript:)使用探讨

    javascript:这个特殊的协议类型声明了URL的主体是任意的javascript代码,它由javascript的解释器运行. 比如下面这个死链接: <a href="javasc ...

  7. SNMP简单网络管理协议

    声明:以下内容是学习谌玺老师视频整理出来(http://edu.51cto.com/course/course_id-861.html) SNMP(Simple Network Management ...

  8. 海鑫智圣:物联网漫谈之MQTT协议

    什么是MQTT协议 MQTT(消息队列遥测传输协议)是IBM在1999年专门针对物联网等应用场景来制订的轻量级双向消息传输协议,它主要是为了解决物联网上使用到的设备的互相通信的问题,以及这些设备与后端 ...

  9. linux-图形化远程管理协议

    远程管理控制方式: RDP(remote desktop protocol)协议: telnet: SSH(Secure Shell): RFB(Remote FrameBuffer)协议(图形化远程 ...

  10. RTP与RTCP协议介绍(转载)

    RTSP发起/终结流媒体.RTP传输流媒体数据 .RTCP对RTP进行控制,同步.RTP中没有连接的概念,本身并不能为按序传输数据包提供可靠的保证,也不提供流量控制和拥塞控制,这些都由RTCP来负责完 ...

随机推荐

  1. Python编写的ssh客户端[类似putty]

    转载请注明出处:http://blog.csdn.net/jmppok/article/details/17588381 windows下可以通过putty以ssh方式连接linux主机.但putty ...

  2. [SPOJ] DIVCNT2 - Counting Divisors (square) (平方的约数个数前缀和 容斥 卡常)

    题目 vjudge URL:Counting Divisors (square) Let σ0(n)\sigma_0(n)σ0​(n) be the number of positive diviso ...

  3. Comet OJ - Contest #14 转转的数据结构题 珂朵莉树+树状数组

    题目链接: 题意:有两个操作 操作1:给出n个操作,将区间为l到r的数字改为x 操作2:给出q个操作,输出进行了操作1中的第x到x+y-1操作后的结果 解法: 把询问离线,按照r从小到大排序 每次询问 ...

  4. 机器学习---朴素贝叶斯与逻辑回归的区别(Machine Learning Naive Bayes Logistic Regression Difference)

    朴素贝叶斯与逻辑回归的区别: 朴素贝叶斯 逻辑回归 生成模型(Generative model) 判别模型(Discriminative model) 对特征x和目标y的联合分布P(x,y)建模,使用 ...

  5. Python 企业面试题集锦之Python基础

    △字符串.列表.元组.字典每个常用的5个方法? 字符串: 字符串用单引号(')或双引号(")括起来,不可变. s.strip(c):去除空格或指定的字符c:lstrip/rstrip: s. ...

  6. Alapha冲刺(3/6)

    队名:無駄無駄 组长博客 作业博客 组员情况 张越洋 过去两天完成了哪些任务 摸鱼 提交记录(全组共用) 接下来的计划 沟通前后端成员,监督.提醒他们尽快完成各自的进度 学习如何评估代码质量 准备Al ...

  7. 数据结构---公交线路提示系统(Java后台+excel表格+web前端)

     系统大致流程: index.jsp输入站名(点击“出示站点信息”,跳转list.jsp读取表格):后台通过站名获得id:getIdbyname(String name)将id反馈至dijkstra( ...

  8. 【洛谷】P5024 保卫王国 (倍增)

    前言 传送门 很多人写了题解了,我就懒得写了,推荐一篇博客 那就分享一下我的理解吧(说得好像有人看一样 对于每个点都只有选与不选两种情况,所以直接用倍增预处理出来两种情况的子树之内,子树之外的最值,最 ...

  9. 关于 Javascript 学习,有哪些好的博客或者网站推荐?

    知乎社区:http://www.zhihu.com/question/19651401 Mozilla开发者网络社区:https://developer.mozilla.org/zh-CN/ moze ...

  10. 如何在IDEA上配置Maven

    IDEA 全称 IntelliJ IDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的Java开发工具之一, IDEA是JetBrains公司的产品,现在有逐步取代老牌Java ...