HTTP协议

Http(HyperText Transfer Protocol),叫做超文本传输协议,它属于应用层协议,是基于Tcp连接的。它是一种基于请求/响应模式的,无状态的协议。
http1.0的特点:一次连接一次响应后就断开;
http1.1的特点:持续连接,在一次连接中可发送多个请求,不必等待每次请求的响应是否到来。

一般用浏览器来发送http协议,但是也可用别的工具来发送http协议。如telnet。
telnet的连接方式:
1.打开windows的cmd.exe,然后输入:

telnet [IP地址或域名] [port端口]

2.按下 CTRL+]后回车打开回显功能(能看见你输入的内容)

接着尝试访问tel.php的内容

<?php
    echo "hello";
?>

在回显界面输入

GET /phpTest/tel.php HTTP/1.1
Host:localhost

结果如下
图

详细解析:
头信息:
1.GET是请求方法method
2./phpTest/tel.php 是请求资源
3.HTTP/1.1 是请求所用的协议版本
头信息结束后有一个空行
空行后回车会显示响应信息
响应行:协议版本 状态码 状态文字
响应头信息的格式 key:value

用telnet模拟发送POST请求来访问tel2.php

<?php
    var_dump($_POST);
?>

这里写图片描述
带信息请求需要在头信息附加Content-type和Content-length
头信息在空行后,需要填写附带的主体信息,该信息的长度需与Content-length一致

HTTP请求
由三部分组成:请求行,消息报头,请求正文,请求格式为:Method Request-URI HTTP-Version CRLF 除了作为结尾的CRLF外,不允许出现单独的CR或LF字符,CRLF表示回车换行。

请求方法说明
get请求获取由Request-URI所标识的资源,(查询)
post在Request-URI所标识的资源后附加新的资源,(查询+更新)
put请求服务器存储一个资源,并用Request-URI作为其标识,(增加)
delete请求服务器删除由Request-URI所标识的资源,(删除)
head请求获取由Request-URI所标识的资源的响应消息报头,常用于测试超链接的有效性,是否可以访问,以及最近是否更新等
trace请求服务器回送受到的请求信息,主要用于测试或诊断
connect保留将来使用
options请求查询服务器的性能,或者查询与资源相关的选项和需求

当我们通过浏览器地址栏中直接输入网址的方式去访问网页时,浏览器采用的就是GET方法向服务器获取资源
Tips:在HTML中书写get和post不区分大小写,但在HTTP协议中的GET和POST只能是大写形式

HEAD只确认一个内容(如图片)是否还正常存在,而不返回该内容,这时用HEAD
如下,访问tel.php并没有输出hello的内容信息,而是返回响应信息而已
这里写图片描述

TRACE用代理上网,比如代理访问news.163.com,你想看看代理有没有修改你的HTTP请求,就可以用TRACE测试一下

OPTIONS返回服务器可用的请求方法

状态码

状态码定义说明
1xx指示信息-表示请求已接收,继续处理
2xx表示请求已经被成功接收,理解,接受
3xx重定向-要完成请求必须进行更进一步的操作
4xx客户端错误-请求有语法错误或请求无法实现
5xx服务器端错误-服务器未能实现合法的请求


304 not modify
浏览器用缓存技术,使得再次请求时,不从服务器获取,而是从浏览器缓存获取。
如第一次请求某一资源时,它的响应信息有一个ETag和Last-Modified来标志该资源是否在缓存里和是否被修改过
这里写图片描述
当第二次请求时,浏览器带着ETag信息和Last-Modified分别包装成If-None-Match和If-Modified-Since去请求资源,如果服务器没有修改过该资源,则服务器不必传送该资源,浏览器直接从缓存里获取
这里写图片描述

用telnet来模拟304 not modify
第一次请求(用HEAD方法,不返回内容,但可以看到Content-length是有内容的):
这里写图片描述

第二次请求(携带If-None-Match和If-Modified-Since信息):
可以看到状态码304,并且服务器的响应信息并没有返回内容
这里写图片描述

重定向
302临时重定向

header(‘Location: http://www.baidu.com‘);

301永久重定向

header(‘Location: http://www.baidu.com‘,true,301);

307重定向中保持原有的数据保持
1.如test.html做一个表单,将数据post到tel.php

<form action="tel.php" method="post">
    <input type="text" name="username" />
    <input type="submit" name="submit" />
</form>

2.tel.php将页面重定向到tel2.php

<?php
    header('Location: tel2.php');
?>

3.tel2.php输出post数据

<?php
    var_dump($_POST);
?>

根据上面的流程,运行一下test.html表单页面
可以看到tel.php临时重定向到tel2.php后,tel2.php并无法获取到POST的数据

这里写图片描述

解决方法,用307重定向
修改tel.php内容为:

<?php
    header('Location: tel2.php',true,307);
?>

然后再运行一个test.html表单页面
307重定向后原数据也得到保持

这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值