推荐一首歌

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

也就听了几十遍而已

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

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

一: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. 基于jQuery虾米音乐播放器样式代码

    分享一款基于jQuery虾米音乐播放器样式代码.这是一款基于jquery+html5实现的虾米音乐播放器源码下载.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div c ...

  2. 【九天教您南方cass 9.1】 05 打印出图

    同学们大家好,欢迎收看由老王测量上班记出品的cass9.1视频课程 我是本节课主讲老师九天. 我们讲课的教程附件也是共享的,请注意索取测量空间中. [点击索取cass教程]5元立得 (给客服说暗号:“ ...

  3. 【30集iCore3_ADP出厂源代码(ARM部分)讲解视频】30-5 底层驱动之旋转编码器

    源视频包下载地址:链接:http://pan.baidu.com/s/1mhENI9i密码:mf1x 银杏科技优酷视频发布区:http://i.youku.com/gingko8

  4. Android美丽的对话框项目sweet-alert-dialog

    美丽的对话框 sweet-alert-dialog 项目地址: https://github.com/pedant/sweet-alert-dialog android原生的dialog太生硬了,之前 ...

  5. winform 操作注册表提示没有权限解决办法

    1.打开VS2005.VS2008.VS2010.VS2012.VS2013.VS2015工程,查看工程文件夹中的Properties文件夹下是否有app.manifest这个文件:如没有,按如下方式 ...

  6. vue:过滤器

    一.过滤器 过滤器是vue中的一个特性,作用是用于对文本进行格式化的作用. 注意:在vue 1.0中有内置的过滤器,在2.0中去掉了内置过滤器,只有自定义过滤器 二.使用位置 过滤器只能应用在两个地方 ...

  7. .net core实现跨域

    什么是跨域在前面已经讲解过了,这里便不再讲解,直接上代码. 一.后台API接口 用.net core创建一个Web API项目负责给前端界面提供数据. 二.前端界面 建立两个MVC项目,模拟不同的ip ...

  8. opencv 无法使用 dll 动态链接库 UnsatisfiedLinkError java.library.path Can't find dependent libraries

    System.loadLibrary(Core.NATIVE_LIBRARY_NAME) 使用如上方法加载本地 dll文件. 一般会出现两种错误: 1. UnsatisfiedLinkError ja ...

  9. Go指南练习_Stringer

    源地址 https://tour.go-zh.org/methods/18 一.题目描述 通过让 IPAddr 类型实现 fmt.Stringer 来打印点号分隔的地址. 例如,IPAddr{1, 2 ...

  10. ORA-00001: unique constraint (...) violated并不一定是数据冲突

    原文链接:http://blog.163.com/jet_it_life/blog/static/205097083201301410303931/ 收到一位测试人员RAISE的JIRA,说在某张表上 ...