推荐一首歌

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

也就听了几十遍而已

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

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

一: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. 在Pandas中更改列的数据类型【方法总结】

    先看一个非常简单的例子: a = [['a', '1.2', '4.2'], ['b', '70', '0.03'], ['x', '5', '0']] df = pd.DataFrame(a) 有什 ...

  2. MXNET:权重衰减-gluon实现

    构建数据集 # -*- coding: utf-8 -*- from mxnet import init from mxnet import ndarray as nd from mxnet.gluo ...

  3. Thrift源码学习二——Server层

    Thrift 提供了如图五种模式:TSimpleServer.TNonblockingServer.THsHaServer.TThreadPoolServer.TThreadSelectorServe ...

  4. 重新入坑-IntelliJ Maven

    写Restful的服务,使用IntelliJ+maven,发现有几个依赖总是没法配置好.通过检查POM.xml,发现犯了错误,<dependency>写到了<dependencies ...

  5. phpstrom 激活

    最新(2017年5月)PhpStorm 2017.1.2 .WebStorm 2017.1.PyCharm  2016.3激活方式 打开网址 http://idea.lanyus.com/ 选择获取注 ...

  6. 奇淫怪巧之在Delphi中调用不申明函数

    前一阵子,研究了一段时间的Win32Asm,研究到后来发现Win32的ASM实际上还是和C版的介绍的一样.甚至还封装了一个简版的类似VCL库结构框架的32ASM结构库,不过搞着搞着就没兴趣了,也没继续 ...

  7. plsql常用方法-转

    在SQLPLUS下,实现中-英字符集转换alter session set nls_language='AMERICAN';alter session set nls_language='SIMPLI ...

  8. Spark学习笔记——读写MySQL

    1.使用Spark读取MySQL中某个表中的信息 build.sbt文件 name := "spark-hbase" version := "1.0" scal ...

  9. Java面试题考点全面总结

    我通过两个月的复习拿到了阿里巴巴的 offer,有一些运气,也有一些心得,借着跳槽季来临特此分享出来. 简单梳理一下我的复习思路,同时也希望和大家一起交流讨论,一起学习,如果不对之处欢迎指正一起学习. ...

  10. 仿迅雷播放器教程 -- 基于ffmpeg的C++播放器 (1)

    2011年12月份的时候发了这篇博客 http://blog.csdn.net/qq316293804/article/details/7107049 ,博文最后说会开源一个播放器,没想到快两年了,才 ...