美文网首页
HTTP协议

HTTP协议

作者: 小胖熊威廉 | 来源:发表于2018-07-30 16:17 被阅读8次
  • 网络通讯协议

    指服务器和客户端浏览器间进行通信时的约束和规范,客户端与服务端的数据交互并不是杂乱无章的,需要遵照(基于)一定的规范进行。w3c 去指定的,这个格式叫做http协议。

    常见协议

    1. HTTP、HTTPS 超文本传输协议

    2. FTP 文件传输协议

    3. SMTP 简单邮件传输协议 ,邮件收发协议.

    4. 即时通讯协议XMPP

    http 协议

    即超文本传输协议,网站是基于HTTP协议的,例如网站的图片、CSS、JS等都是基于HTTP协议进行传输的。

    HTTP协议是由从客户机到服务器的请求(Request)和从服务器到客户机的响应(Response)进行了约束和规范。

    即HTTP协议主要由请求和响应构成。

    http 协议它是基于请求、响应的,请求响应-- 连接也就断开。

    http 协议的数据分为两部分:

    ​ 客户端发送到服务器的,称为请求的数据格式。

    ​ 服务器响应到客户端,称为响应的数据格式。

    对请求的数据格式进行分析,我要对数据格式进行分析,必须要得到这个数据格式。

    得到数据格式,必须客户端与服务器进行通讯的时候的,我们可以抓取数据包。

    常见的请求方式有两种,一种是get ,一种是post,这两种请求方式的区别。


请求的数据格式分为四部分:

  • 请求首行

  • 请求头

  • 请求空行

  • 请求体


响应的数据格式:

  • 响应首行

  • 响应头

  • 响应空行

  • 响应体


常用请求方法 POST、GET、PUT、DELETE

请求/请求报文

请求由客户端发起,其规范格式为:请求行、请求头、请求主体。

1. 请求行

由请求方式、请求URL和协议版本构成

2. 请求头
  • Host:localhost请求的主机

  • Cache-Control:max-age=0控制缓存

  • Accept:/ 接受的文档MIME类型

  • User-Agent:很重要

  • Referer:从哪个URL跳转过来的

  • Accept-Encoding:可接受的编码格式

3. 请求主体

即传递给服务端的数据

注:当以post形式提交表单的时候,请求头里会设置

Content-Type: application/x-www-form-urlencoded,以get形式当不需要

响应/响应报文

响应由服务器发出,其规范格式为:状态行、响应头、响应主体。

1. 状态行

由协议版本号、状态码和状态信息构成

2. 响应头
  • Date:响应时间

  • Server:服务器信息

  • Content-Length:响应主体长度

  • Content-Type:响应资源的MIME类型,告诉客户端浏览器的响应的数据类型 Content-Type:text/html;charset=utf-8

MIME是标识文件类型的,文件后缀并不能正确无误的标识文件的类型。

客户端与服务器在进行数据传输的时候都是以字节形式进行的,咱们可以理解成是以“文本形式”传输,这时浏览器就需要明确知道该怎么样来解析这些文本形式的数据,MIME就是明确告知浏览器该如何来处理。

3. 响应主体

即服务端返回给客户端的内容;

状态码

常见的有200代表成功、304文档未修改、403没有权限、404未找到、500服务器错误,302 代表的是请求重定向。

调试工具

利用HTTP抓包工具在开发中可以帮我们进行调试,常用抓包工具HttpWatch、Fiddler、Charles、FireBug等

浏览器插件

Firebug、HttpWatch、chrome dev tools

代理软件

Charles、Fiddler

特殊的请求头以及响应头介绍

请求头
User-Agent: 告诉服务器,客户端的浏览器的版本
Content-Type:application/x-www-form-urlencoded post 提交独有的请求头,如果发送到服务器的数据是中文,会对数据进行编码.
Referer:http://localhost/index.html 告诉服务器,客户端的请求来自于哪个页面。破解安全验证,这个referer都会做处理。
响应头:
告诉客户端浏览器
Content-Type:text/html;charset=utf-8;
Refresh:告诉客户端浏览器过几秒之后重新刷新
常见的请求状态吗:
200  ok
403  没有权限访问
404  请求的资源没有找到 
304  后端的文件的没有任何的改变 
302  重定向 会发送两次请求。
500  服务器内部错误.

get 请求与post 请求介绍

1. get 发送的数据都在地址栏当中,不安全
2. get 发送的数据对数据大小由限制。
3. get 没有请求体
4. post 发送的数据在请求体当中,相对安全
5. post 对请求的数据的大小没有限制
6. post 有一个特殊的请求头 Content-Type:application/x-www-form-urlencoded
7. get 的请求头相对较少,性能稍微要高一些.
//案例1
        //解决乱码,给客户端一个响应头
        header("Content-Type:text/html;charset=utf-8");
        //1:获取请求头 获取所有的请求头.
          $arrHeader=getallheaders();
        //2:我获取的是User-Agent 请求头对应的值
          $headeValue=$arrHeader["User-Agent"];
        // echo $headeValue;
        //3:php 里面有一个函数 strstr() 判断字符串是否包含指定的字符串.
        if(strstr($headeValue,"Chrome")){
             echo "您当前使用的google 浏览器,棒棒哒!";
        }else if(strstr($headeValue," Firefox")){
             echo "您当前使用的火狐 浏览器,双击666";
        }else if(strstr($headeValue,"MSIE")){
             echo "您当前使用的浏览器版本较低,请<a href='http://www.360.com'>升级</a>";
        }
<!-- 案例2 -->
<?php
        header("Content-Type:text/html;charset=utf-8");
        //1:给一个响应头
        header("Refresh:5;url=http://www.baidu.com");
        //2:给文字提示.
        echo " <span>5</span> 秒钟之后会自动跳转页面,如果没有跳转,请点击<a href='http://www.baidu.com'>这里</a>";
?>
<script>
        var i=5;
        var ids=window.setInterval(function(){
            i--;
            if(i==0){
                window.clearInterval(ids);
                return;
            }
            document.querySelector("span").innerHTML=i;
        },1000);
</script>

相关文章

网友评论

      本文标题:HTTP协议

      本文链接:https://www.haomeiwen.com/subject/jtbxvftx.html