HTTP协议
Posted 尼农小道
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP协议相关的知识,希望对你有一定的参考价值。
HTTP协议
基础知识
协议就是互联网中的设备(交换机,路由器,防火墙)等,进行相互通讯的规则。规则规定了发送的数据格式,以及每格式所代表的意义。
HyperText Transformation Protocol超文件传输协议,主要用于web。
HTTP就互联网中客户端浏览器与web服务器进行相互通讯规则。
http协议的特点:
1、支持客户端与服务器模式。
2、简单快捷,客户端向服务器端发起请求时,只需要指定请求的方式与所请的文件即可。
3、方便灵活,服务器向客户端返回数据时,可以使用content-type来设置,即将传递数据的格式。
4、无连接,当服务器处理完一个请求后,就会断开连接。
5、无状态,服务器无法识别,当前的请求与上一次的请求是否同自同一个客户端。所以产生了cookie会话技术,来保存客户端的状态。
6、web服务器是被动的,客户端是主动的。
http协议的组成
http协议是客户端浏览器与web服务器进行相互通信的规则。http协议彩的是一种请求与响应的模式。首先由客户端发请起请求,服务器端处理完成请求后进行响应。
所以http协议由请求与响应组成:
HTTP之URL
URL(Uniform Resource Loacation统一资源定位)是URI(Uniform Resource Identifier统一资源标识)的子集
URL的形式如:
http://host【:port】/【path】
http 表示http协议,指示浏览器通过网络找到相应的主机
port 表示端口号,默认是80,可以不写
path 表示所请求的文件的路径,如果省略,必须以\'/\'结束,如果不写浏览会自动添加\'/\'
HTTP之请求
请求头:
请求方式 包含get 或post
URI 请求的文件(包含路径与文件名)
/20151219/code/01demo_http.php
协议及版本号 http/1.1
协议报头
协议头分三种:请求报头、响应报头、普通报头(即不属于请求报头也不属于响应报头)
协议报头的格式: 不区分大小写
报头名+":"+空格+值 例如 host: localhost
请求报头:
host:表示所请求的主机 localhost
user-agent:会将浏览器的相关信息传递给服务器
accept:接收的数据的类型,
text/html表示,text文本数据 html:超文本 application表示二进制数据
accept-language:表示所接收的语言 zh-cn表示简体中文zh表示中文
accept-encoding:表示所接收的压缩格式
connection:表示保持连接(请求发出之后,在没有得到响应时,告诉服务器不要关闭此连接)
last-modified-since:浏览器会缓存之前访问过的网站的资源文件,通过此报头来询问服务器此文件是否被修改过。
referer:表示本次请求来自哪个url。
content-length:表示请求的数据的长度,只有post请求方式才有
authorization:表示认证
空行
就表示请求的报头结束,其后是请求的数据,只有post方式空行才有数据。
HTTP之响应
状态行
协议及版本号 http/1.1
状态码及状态信息 200 ok
1xx 表示接收正在处理
2xx 处理的结果
200 处理成功
3xx 需重定向或读取缓存等
304 没有修改,读取自己的缓存
4xx 客户端的错误
404 找不到请求的文件
5xx 服务器的错误
响应报头
Date 时间
Server 服务器环境
Content-length 返回的数据的长度
Content-type 返回的数据的类型
Last-modified 最后修改时间
Content-language: 响应的数据的语言
Content-enconding: 响应的数据的压缩格式
content-charset: 响应的数据的字段编码
空行
响应报头结束,其后的是数据
Telnet模拟get请求
http协议是一种客户端服务器模式,所以只能够访问web服务器的软件都是http协议的客户端。
telnet的运行是cmd窗口,但是win7以上默认没有开启telnet软件。
开启:
控制面板==>程序==>启用或关闭window功能
第1步:连接服务器
telnet 主机名 端口号
回车
默认telnet没有开启回显功能(显示用户输入的内容)
开启回显
ctrl + ]
再回车
第2步:构造http协议
构造http请求头
get /URI http/1.1
示例:
构造http报头
构造http空行,并发送请求头
回车
示例:
PHP模拟get请求
第1步:连接web服务器
fsockopen(主机名,端口号,错误代码,错误信息,超时时间);
此函数会返回一个,资源类型的,指向web服务器的连接。
第2步:构造请求头
第3步:发送请求头
第4步:接收数据
完整示例:
PHP模拟POST请求
在使用Post方式提交数据时,在http协议中会以下两请求报头
content-type:application/x-www-form-urlencoded
content-length:长度
第1步:
第2步:
第3步:
第4步:
PHP模拟HTTP协议响应
header();用于向http协议的响应头部写信息
刷新并跳转:
header("refresh:秒数;url=网址");
示例:
header("location:url");
图片显示:
下载:
//告诉浏览器以下的数据不需显示
header(\'content-type: application/octet-stream\');
//告诉浏览器以下的数据作为附件下载
header(\'content-disposition: attachment;filename=horse.jpg \');
发送数据
echo file_get_contents(\'文件名\');
示例:
以上是关于HTTP协议的主要内容,如果未能解决你的问题,请参考以下文章
HTTP 之 HTTP协议(HTTP协议概述HTTP消息缓存控制相关头部Cookie相关头部)