推荐一首歌

  - 僕が死のうと思ったのは (曾经我也想过一了百了)

也就听了几十遍而已

经历一番波折,终于正式到了北京。

刚开始是很艰难的,多走两步就好了,不是么。

一:HTTP 基本报文组成

  -  

二:请求报文(组成及实例)

  -      

  -      

三:响应报文(组成及实例)

  -     

  -    

四:HTTP 通用首部字段 (请求/响应 都会使用的首部)

   1:首部字段 Cache-Control 控制缓存行为 

     - public 和 private 的区别?

        - 设置Cache-Control:public 明确表明其他用户也可以利用缓存。

      - 设置Cache-Control:private (默认选项) 响应指以特定用户作对象。

      - 他们的区别更应该从用途上考虑

        - 公共内容[如icon,图片等] 更因该使用 public 公共区域缓存,减少宽带

        - 但是相反的,私有内容[如用户名]等,更因该使用私有缓存,否则所有人都可能通过代理服务器拿到你的信息。

        - 详细:Private vs Public in Cache-Control

     - Cache-Control:no-cache 不缓存过期的资源(会向服务端确认有效期)

     - Cache-Control:no-store  不缓存(表示请求中有机密信息)

     - Cache-Control:max-age=XXXXX(单位/秒)  设置缓存时间

     - PHP 简单实例

      • <?php
        header("Content-type:text/html;charset=utf-8"); //用Cache-Control告诉浏览器有效期 60秒
        header("Cache-Control:max-age=60");//等同于Cache-Control:public, max-age=60
        $curr_time = date('Y-m-d H:i:s');
        echo '服务器时间:'.$curr_time;
        ?>
        <!DOCTYPE html>
        <html>
        <head>
        <meta charset="utf-8">
        <title>Cache</title>
        </head>
        <body>
        <br>
        Time:<?php echo $curr_time; ?>
        <br>
        <a href='cache_sample.php'>刷新时间</a>
        </body>
        </html>

  2:Connection 管理持久连接

    - Connection:close 明确表示断开持久连接

    - Connection:keep-alive 持久连接

  3:Data 表明创建 HTTP 报文的日期和时间

    - HTTP/1.1 中 使用 RFC1123规定的标准时间

  4:Pragma 向后兼容 HTTP/1.0 字段设立 (了解)

  5:upgrade 用于检测版本是否有更高效的通信方式

    - 比如升级为 websocket

  6:via 代理服务器的相关信息

    - 如果经过了代理服务器,会在 首部字段 Via 中加入代理服务器的信息

四:HTTP 请求首部字段 (客户端 -> 服务端)

  1:Accept (表示用户可以处理的流媒体类型)

    - 通知服务器,用户(浏览器可以处理的媒体类型及其优先级)

    - 如果想要给显示的媒体类型增加优先级(也叫品质因子),则使用 q= 表示权重,用(;)分割,最大值是 1 ,默认 q=1

    - 例如

      - Accept:text/xml; q=0.3, text/html; q=1

      - 这句话的意思是:我请求的资源最好是 q = 1 的 html 资源,如果不行的话,发给我 xml 格式也可以。

  2:Accept-Charset 表示用户可以处理的字符集

    - 支持 q= 的优先级

    - 例如:

      - Accept-Charset:iso-8859-5, unicode-1-1;q=0.8

  3:Accept-Encoding  表示用户支持的 编码类型

    - 同样支持 q= 的优先级。同样也可以使用(*)代表支持同样的优先级

    - 例如:

      - Accept-Encoding : gzip, deflate

  4:Accept-Language 指定用户可以处理的语言类型

    - 支持 q= 的优先级

    - 例如

      - Accept-Language : zn-ch , zh ; q=0.7 , en-us , en , q=0.3

      - 意思为:如果服务器有中文版资源时候,最好优先返回给我中文资源(高优先级),如果没有中文,返给我英文版也可以(低优先级)

  

  5:Host 请求资源所处的主机与端口号

  6:Range 部分资源范围的请求

  7:Referfer 告知服务器请求的原始资源 URI 

 

  8:User-Agent 用于传达浏览器种类

  9:Authorization  HTTP基本认证

    - 包含了账户密码的 base64 编码

     - WWW-Authenticate HTTP访问认证-发起认证

    - 使用 PHP 实现简单的 HTTP 基本认证

    • <?php
      
      header("Content-type: text/html; charset=utf-8");
      
      function validate($user, $pass) {
      if ($user == 'admin' && $pass == 'admin') {
      return true;
      }
      else {
      return false;
      }
      } if(!validate(@$_SERVER['PHP_AUTH_USER'], @$_SERVER['PHP_AUTH_PW'])) {
      http_response_code();
      header('WWW-Authenticate:basic '); //对话框显示 http://127.0.0.1:80
      echo '需要用户名和密码才能继续访问'; //取消时浏览器输出
      exit;
      } else {
      var_dump($_SERVER['PHP_AUTH_USER']);
      var_dump($_SERVER['PHP_AUTH_PW']);
      }

五:HTTP 响应首部字段 (客户端 <- 服务端)

  1:location 引导接收方至摸个 URI 常配合 3XX,提供重定向

  2:Server 服务器上HTTP应用的处理者。

六:HTTP 实体首部字段 (请求报文和响应报文共同使用,补充内容实体部分)

  1:Content-Encode     客户端/服务端 对内容的编码方式。

  2:Content-Language 服务端告知客户端,实体所使用的语言。

  3:Content-Lngth       服务端表明了实体数据的大小

  4:Content-Location   报文主体资源的URI

  5:Content-MD5        服务端表名了实体数据的MD5值

  6:Content-Type        表明实体部分的媒体类型

七:其他首部信息

  1:httpOnly 防止XSS跨站脚本攻击对于Cookie的窃取

《HTTP - http首部信息》的更多相关文章

  1. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  4. 外网访问内网SpringBoot

    外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...

  5. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  6. 怎样从外网访问内网Rails

    外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...

  7. 怎样从外网访问内网Memcached数据库

    外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...

  8. 怎样从外网访问内网CouchDB数据库

    外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

  10. 怎样从外网访问内网OpenLDAP数据库

    外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...

随机推荐

  1. redis竞汰数据同步问题解决

    Redis 面试的时候遇到过问Redis是如何解决“竞态条件”的,相关知识点总结一下. 乐观锁 所谓竞态条件,举个例子,一个代表点击数的数值hitcount,每个客户点击一次则+1. 没有事务的时候, ...

  2. 用panels 制作drupal首页

    1.下载zen主题 路径:https://www.drupal.org/project/zen2.“启用并设为默认”3.基于zen制作子主题 把zen目录下STARTERKIT文件夹,复制到sites ...

  3. Java知多少(65)线程的挂起、恢复和终止

    有时,线程的挂起是很有用的.例如,一个独立的线程可以用来显示当日的时间.如果用户不希望用时钟,线程被挂起.在任何情形下,挂起线程是很简单的,一旦挂起,重新启动线程也是一件简单的事. 挂起,终止和恢复线 ...

  4. Java8使用@sun.misc.Contended避免伪共享(False Sharing)

    伪共享(False Sharing) Java8中用sun.misc.Contended避免伪共享(false sharing) Java8使用@sun.misc.Contended避免伪共享

  5. nohup 和 &的含义

    https://www.cnblogs.com/jinxiao-pu/p/9131057.html

  6. TP5分页类

    <?php class Page { public $page; //当前页 public $total; //总记录数 public $listRows; //每页显示记录数 private ...

  7. ActiveMQ JMS 项目 基于 Maven 搭建 部署

    JAVA版本: IntellJ IDEA 版本: IntelliJ IDEA 2017.2Build #IU-172.3317.76, built on July 15, 2017Licensed t ...

  8. Diffuse Shading——漫反射光照改善技巧

    转:http://www.narkii.com/club/thread-355113-1.html 我们会列出两种方法:使用Half Lambert lighting model(半兰伯特光照模型)和 ...

  9. js中的try/catch

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. linux中free命令内存分析

    Mem(物理内存分配情况)行 total:表示物理 内存总量 used:表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用 free:未被分配的内存 s ...