推荐一首歌

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

也就听了几十遍而已

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

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

一: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. (转载)完成端口(Completion Port, I/OCP)详解

    http://www.cnblogs.com/lancidie/archive/2011/12/19/2293773.html 手把手叫你玩转网络编程系列之三    完成端口(Completion P ...

  2. 聊聊Python中的闭包和装饰器

    1. 闭包 首先我们明确一下函数的引用,如下所示: def test1(): print("--- in test1 func----") # 调用函数 test1() # 引用函 ...

  3. 聊聊动态语言那些事(Python)

    动态编程语言是高级程序设计语言的一个类别,在计算机科学领域已被广泛应用.它是一类在运行时可以改变其结构的语言:例如新的函数.对象.甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化.动态语言 ...

  4. Sass的安装(windows 10)

    1.下载ruby 下载地址:https://rubyinstaller.org/downloads/ 如果觉得下载速度过慢,可以在我的百度去下载: 链接:https://pan.baidu.com/s ...

  5. [工具类] 读取解析json文件

    读取json文件并转换为字符串 /** * 通过本地文件访问json并读取 * * @param path:json文件路径 * @return:json文件的内容 */ public static ...

  6. Zookeeper系列二:分布式架构详解、分布式技术详解、分布式事务

    一.分布式架构详解 1.分布式发展历程 1.1 单点集中式 特点:App.DB.FileServer都部署在一台机器上.并且访问请求量较少 1.2  应用服务和数据服务拆分  特点:App.DB.Fi ...

  7. Java如何清除空格?

    在Java编程中,如何清除/删除空格? 以下示例演示如何使用Util.regex.Pattern类的matcher.replaceAll(stringname)方法来删除空格. package com ...

  8. IDEA VS 常用高效 黄金 快捷键

    [参考] VS 常用高效 快捷键 身为一个编程人员,掌握IDE的快键是提高开发效率最简单直接的方法,也是必备技能.和网上的大篇罗列不同,下面只讲精髓,根据实践不断调整.本人C#转Java,曾经试过Ec ...

  9. [Localization] YOLO: Real-Time Object Detection

    Ref: https://pjreddie.com/darknet/yolo/ 关注点在于,为何变得更快? 论文笔记:You Only Look Once: Unified, Real-Time Ob ...

  10. [Node.js] 04 - Event and Callback

    回调函数 回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都支持回调函数. 异步读取文件的回调函数: var fs = require("fs&quo ...