PHP核心编程——了解HTTP协议与模拟HTTP请求

HTTP协议

目录

HTTP协议

HTTP协议概念

HTTP协议特点

HTTP协议分类

HTTP请求

请求行

请求头

请求体

HTTP响应

响应行

响应头

响应体

常见的HTTP状态码

HTTP响应

常见的HTTP响应设置及使用

PHP模拟HTTP请求

原理

Curl扩展库使用


HTTP协议概念

HTTP协议即超文本传输协议(Hypertext Transfer Protocol)。是一种详细规定了了浏览器与万维网服务器之间互相通信的规则。

 

HTTP协议特点

1)客户/服务器模式

2)简单快速:客户向服务器请求服务时,只需传送请求方法和路径

3)灵活:HTTP协议允许传输任意类型的数据对象

4)无连接:无连接的含义是限制每次连接只处理一个请求。

5)无状态:HTTP协议是无状态协议。无状态是指对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传。另一方面,在服务器不需要先前信息时它的应答就比较快。

 

HTTP协议分类

HTTP请求协议:浏览器向服务器发起请求的时候需要遵循的协议

HTTP响应协议:服务器向浏览器发起响应的时候需要遵循的协议。

 

HTTP请求

请求行

1)形式:请求方式 资源路径  协议版本号

2)GET/index.php HTTP/1.1

 

最早的时候HTTP协议有过1.0,请求行独占一行(第一行)

请求头

请求头就是各项协议内容,具体的协议内容不会每次都使用全部

1)Host:请求的主机地址(必须)

2)Accept:当前请求能够接受服务器返回的类型(MIME类型)

3)Accept-Language:接收的语言

4)User-Agent:客户浏览器电脑的一些信息

 

请求头不固定,每个请求协议也是独占一行,最后会有一行空行(用来区分请求头和请求体)

请求体

请求数据:POST请求才会有请求体。GET请求所有的数据都是跟在URL之后,会在请求行中的资源路径上体现。

 

基本格式:资源名字=资源值&资源名字=资源值…

 

HTTP响应

响应行

1)形式:协议版本号 状态码 状态信息

2)200 ok:成功

3)403 Forbidden:没权限访问

4)404 Not Found:未找到页面

5)500 Server Interval Error:服务器内部错误

响应头

具体协议内容

1)时间:Wed 16 Sep 2018 11:43:33 GMT

2)服务器 Server:Apache/2.4(win64)  PHP/7

3)内容长度 Content-Length:1571,数据具体的字节数(响应体)

4)内容类型 Conetent-Type:告诉浏览器对应的数据格式

 

列举了几个常见的响应头,并不是全部:响应头一个占一行,最后一行空行(区分响应头和响应体)

响应体

实际服务器响应给浏览器的内容

 

 

常见的HTTP状态码

状态码 200:成功

状态码 403:forbidden,拒绝访问(没有权限)

状态码 404:not found,找不到页面

状态码 500:服务器问题

W3C里面的HTML下面的HTTP消息,查看状态码

1XX:信息    2XX:成功  3XX:重定向  4XX:客户端错误  5XX:服务器错误

 

HTTP响应

常见的HTTP响应设置及使用

PHP中针对HTTP协议(响应)进行了底层设计,可以通过函数header来实现修改HTTP响应(响应头)

 

注意事项:

1、Header可以设计HTTP响应,因为HTTP协议特点是:响应行、响应头(空行结尾),响应体。认为通过header设计响应头的时候,不应该有任何内容输出,所以一旦产生内容输出(哪怕是一个空格),系统都回认为响应头已经结束而响应体开始了,所以如果先输出内容后设置响应头(header使用),理论设置无效。

2、在PHP5以后,增加程序缓存内容:允许服务器脚本在输出内容的时候,不直接返回给浏览器而是现在服务器端使用程序缓存保留(php.ini中使用output_buffering),有了该内容之后,在程序缓存内会自动调整响应头和响应体(允许响应头在已经输出的内容之后再设置),但是此时会报错(警告)。

 

总结:header设置响应体之前不要有任何输出。

 

Location:重定向,立即跳转(响应体不用解析)

浏览器在解析服务器响应的时候:先判定响应行,继续响应头,最后响应体:location是在响应头中,所以浏览器一旦见到该协议项,不再向下解析。

 

Refersh:重定向,定时跳转(响应体会解析)

延时重定向:浏览器会根据具体时间延迟后在访问指定跳转链接:浏览器在准备跳转访问之前,会继续解析HTTP协议(响应头和响应体)

 

Conetent-type:内容类型,MIME类型

通过内容告知(MIME类型),浏览器正确解析内容

 

Content-disposition:内容类型,MIMIE类型扩展,激活浏览器文件下载对话框。

浏览器在解析内容的时候,默认是直接解析:那么有时候需要浏览器不解析,当做内容下载成文件

 

 

PHP模拟HTTP请求

原理

PHP可以通过模拟HTTP协议发起HTTP请求

CURL是一个非常强大的开源库,支持很多协议,包括HTTP、FTP、Telnet等,我们使用它来发送HTTP请求。它给我们带来的好处是可以通过灵活的选项设置不同的HTTP协议参数,并且支持HTTPS。CURL可以根据URL前缀是“HTTP”还是“HTTPS”自动选择是否加密发送内容

 

前提条件:HTTP协议是客户端/服务端模式,HTTP协议不局限于一定要浏览器访问。

 

Curl扩展库使用

1、开启CURL扩展

2、有的时候,PHP版本会出现即使开启了扩展也无法使用扩展的可能:因为CURL找不到对应的dll文件,需要将相关DLL文件放在C:\windows

3、重启Apache应用

1)建立连接:curl_init():激活一个CURL连接功能

2)设置请求选项:curl_setopt():设定选项

CURLOPT_URL:需要获取的 URL 地址,也可以在curl_init() 初始化会话的时候。

CURLOPT_RETURNTRANSFER:将服务器执行的结果(响应)以文件流的形式返回给请求界面(PHP脚本)

CURLOPT_POST :是否采用POST方式发起请求(默认请求是GET)

CURLOPT_POSTFIELDS:用来传递POST提交的数据。分为两种方式:字符串(name =abc&password=123)以及数组形式(array(‘name’=>’abc’,…))

CURLOPT_HEADER:是否得到相应的header信息(响应头),默认不获取。 启用时会将头文件的信息作为数据流输出。

 

3)执行请求:curl_exec():执行选项(与服务器发起请求),得到服务器返回的内容

如有乱码,加一个header('Content-type:text/html;charset=utf-8');

4)关闭连接:curl_close():关闭资源

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值