《HTTP - http首部信息》
推荐一首歌
也就听了几十遍而已
经历一番波折,终于正式到了北京。
刚开始是很艰难的,多走两步就好了,不是么。
一: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首部信息》的更多相关文章
- 简单物联网:外网访问内网路由器下树莓派Flask服务器
最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...
- 利用ssh反向代理以及autossh实现从外网连接内网服务器
前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...
- 外网访问内网Docker容器
外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...
- 外网访问内网SpringBoot
外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...
- 外网访问内网Elasticsearch WEB
外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...
- 怎样从外网访问内网Rails
外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...
- 怎样从外网访问内网Memcached数据库
外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...
- 怎样从外网访问内网CouchDB数据库
外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...
- 怎样从外网访问内网DB2数据库
外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...
- 怎样从外网访问内网OpenLDAP数据库
外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...
随机推荐
- 《Essential C++》读书笔记 之 C++编程基础
<Essential C++>读书笔记 之 C++编程基础 2014-07-03 1.1 如何撰写C++程序 头文件 命名空间 1.2 对象的定义与初始化 1.3 撰写表达式 运算符的优先 ...
- C++ 重载(overload)、重写(overrride)、重定义(redefine)总结
引自:http://www.189works.com/article-42111-1.html 先来看几个概念: 重载(overload),重写(override,也称覆盖), 重定义(redefin ...
- 重定向如何携带cookie
起因 最近在做微信开放平台,需要给第三方入住,而且入住方都有自己的二级域名.做过微信开发的人都知道,坑爹的是微信并不支持这种二级域名的方式,所以用一个域名专门来处理. 问题 然后由于采用了一个专门的域 ...
- hdoj:2047
#include <iostream> using namespace std; ] = { , , }; // O,E 组成长度为n的数量 long long fib(int n) { ...
- opencv 无法使用 dll 动态链接库 UnsatisfiedLinkError java.library.path Can't find dependent libraries
System.loadLibrary(Core.NATIVE_LIBRARY_NAME) 使用如上方法加载本地 dll文件. 一般会出现两种错误: 1. UnsatisfiedLinkError ja ...
- Java知多少(1) 语言概述
Java语言是SUN(Stanford University Network,斯坦福大学网络公司)公司1995年推出的一门高级编程语言,起初主要应用在小型消费电子产品上,后来随着互联网的兴起,Java ...
- 随笔:JS对象无new构造原理
var myFun = function(words) { if (!(this instanceof myFun)) { return new myFun(words); } this.name = ...
- Photo Sphere Viewer 全景图
Photo Sphere Viewer 一款基于 three.js 的简易3D插件,方便,实用,友好,看到网上有些API有错误,所以自己写一个修正版的 该js插件可以360度旋转查看全景图,也可以上 ...
- 【03月04日】A股滚动市盈率PE历史新低排名
2010年01月01日 到 2018年12月05日 之间,滚动市盈率历史新低排名. 上市三年以上的公司,2018年12月05日市盈率在300以下的公司. 1 - 青松股份(SZ300132) - 历史 ...
- Ubuntu Linux 解决 bash ./ 没有那个文件或目录 的方法
Ubuntu Linux 解决 bash ./ 没有那个文件或目录 的方法 经常在ubuntu 64位下运行 ./xxx 会跳出来说没有这个文件或者目录,但是ls看又有这个文件,很是奇怪. 其实原因很 ...