HTTP知识普及系列:HTTP首部

 

  1. HTTP协议的请求和响应报文中必定包含HTTP首部。首部内容为客户端和服务器分别处理请求和响应提供所需要的信息。在请求中,HTTP报文由方法、URI、HTTP版本、HTTP首部字段等部分构成。在响应中,HTTP报文由HTTP版本、状态码(数字和原因短语)、HTTP首部字段3部分构成。
  2. 客户端和服务器端以HTTP协议进行通信的过程中,无论是请求还是响应都会使用首部字段,它能起到传递额外重要信息的作用。首部字段是为了给浏览器和服务器提供报文主体大小、所使用的语言、认证信息等内容。
  3. 当HTTP报文首部中出现了两个或两个以上具有相同首部字段名时会怎么样?这种情况在规范内尚未明确,根据浏览器内部处理逻辑的不同,结果可能并不一致。有些浏览器会优先处理第一次出现的首部字段,而有的则会优先处理最后出现的首部字段。
  4. HTTP四种首部字段类型
    1. 通用首部字段:请求报文和响应报文两方都会使用的首部。
    2. 请求首部字段:从客户端向服务器端发送请求报文时使用的首部。
    3. 响应首部字段:从服务器端向客户端返回响应报文时使用的首部。
    4. 实体首部字段:针对请求报文和响应报文的实体部分使用的首部。
  5. 通用首部字段
    1. Cache-Control:通过指定首部字段Cache-Control的指令,就能操作缓存的工作机制。
    2. Connection:控制不在转发给代理的首部字段;管理持久连接。
    3. Data:表明创建HTTP报文的时间和日期。
    4. Pragma:只用在客户端发送的请求中,所有的中间服务器不返回缓存的资源。
    5. Trailer:事先说明报文主体后记录了哪些首部字段。同样可以用在分块传输编码时。
    6. Transfer-Encoding:规定了传输报文主体时采用的编码方式。
    7. Upgrade:用于检测HTTP协议及其他协议是否可以使用更高的版本进行通信。
    8. Via:为了追踪客户端与服务器之间的请求和响应报文的传输路径。
    9. Warning:通常会告知用户一些与缓存相关的问题的警告。
  6. 请求首部字段:请求首部字段是从客户端往服务器发送请求的报文中所使用的字段,用于补充请求的附加信息、客户端信息、对响应内容相关的优先级等内容。
    1. Accept:该字段可通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级。
    2. Accept-Charset:用来通知服务器用户代理支持的字符集及字符集的相对优先顺序,可一次性指定多种字符集。
    3. Accept-Encoding:用来告知服务器用户代理支持的内容编码及内容编码的优先级顺序。
    4. Accept-Language:用来告知服务器用户代理嫩巩固处理的自然语言集(中文或英文等),以及自然语言集的相对优先级。
    5. Authorization:用来告知服务器,用户代理的认证信息。
    6. Expect:客户端使用首部字段Except来告知服务器,期望出现的某种指定行为。
    7. From:用来告知服务器使用用户代理的用户的电子邮件地址。
    8. Host:告知服务器,请求的资源所处的互联网主机名和端口号。Host首部字段在HTTP/1.1规范内是唯一一个必须包含在请求内的首部字段。
    9. If-Match:类似于If-xxx这样的请求首部,可以称为条件请求。
    10. If-Modified-Since:告知服务器若该字段值早于资源的更新时间,则希望能处理该请求。
    11. If-None-Match:该字段值得实体标记值与请求资源的ETag不一致时,它就告知服务器处理该请求。
    12. If-Range:它告知服务器若指定的If-Range字段值和请求资源的ETag值或时间相一致时,则作为范围请求处理。反之则返回全体资源。
    13. If-Unmodified-Since:告知服务器,指定的请求资源只有在字段值内指定的日期时间之后,未发生更新的情况下,才能处理请求。
    14. Max-Forwards:通过TRACE方法或OPTIONS方法,发送包含首部字段Max-Forwards的请求时,该字段以十进制整数形式指定可经过的服务器最大数目。当服务器接收到Max-Forwards值为0的请求时,则不再进行转发,而是直接返回响应。
    15. Proxy-Authorization:客户端会发送包含首部字段Proxy-Authorization的请求,以告知服务器认证所需要的信息。
    16. Range:告知服务器资源的指定范围。
    17. TE:告知服务器客户端能够处理响应的传输编码方式及相对优先级。
    18. User-Agent:将创建请求的浏览器用户代理名称等信息传达给服务器。
  7. 响应首部字段:响应首部字段是由服务器端向客户端返回响应报文中所使用的字段,用于补充响应的附加信息、服务器信息、以及对客户端的附加要求等信息。
    1. Accept-Ranges:用来告知客户端服务器是否能够处理范围请求,以指定获取服务器端某个部分的资源。
    2. Age:告知客户端,源服务器在多久前创建了响应。单位秒。
    3. ETag:告知客户端实体标识,它是一种可将资源以字符串形式做唯一标识的方式。
    4. Location:可以将响应接收方引导至某个与请求URI位置不同的资源。
    5. Proxy-Authenticate:把由代理服务器所要求的认证信息发送给客户端。
    6. Retry-After:告知客户端应该在多久之后再次发送请求。
    7. Server:告知客户端当前服务器上安装的HTTP服务器应用程序的信息。
    8. Vary:可对缓存进行控制,源服务器回向代理服务器传达关于本地缓存使用方法的命令。
    9. WWW-Authenticate:用于HTTP访问认证。
  8. 实体首部字段:包含在请求报文和响应报文中的实体部分所使用的首部,用于补充内容的更新时间等与实体相关的信息。
    1. Allow:用于通知客户端能够支持Request-URI指定资源的所有HTTP方法。
    2. Content-Encoding:告知客户端服务器对实体的主体部分选用的内容编码方式。(gzip/compress/deflate/identity)
    3. Content-Language:告知客户端,实体主体使用的自然语言。(中文或英文等语言)
    4. Content-Length:表明了实体主体部分的大小。
    5. Content-Location:给出与报文主体返回资源对应的URI。
    6. Content-MD5:是一串由MD5算法生成的值,其目的在于检查报文主体在传输过程中是否保持完整,以及确认传输到达。
    7. Content-Range:针对范围请求,返回响应时使用的首部字段,能告知客户端作为相应返回的实体的哪个部分符合范围请求。
    8. Content-Type:说明了实体主体内对象的媒体类型,该字段用type/subtype形式赋值。
    9. Expires:会将资源失效的日期告知客户端。
    10. Last-Modified:指明资源最终修改的时间。
  9. 管理服务器与客户端之间状态的Cookie。其工作机制是用户识别以及状态管理。调用Cookie时,由于可校验Cookie的有效期,以及发送方的域、路径、协议等信息。
  10. Set-Cookie字段的几个属性:
    1. expires属性:指定浏览器可发送Cookie的有效期。
    2. path属性:可用于限制指定Cookie的发送范围的文件目录。
    3. domain属性:指定的域名。
    4. secure属性:用于限制Web页面仅在HTTPS安全连接时才可以发送Cookie。
    5. HTTPOnly:Cookie的扩展功能,它使JavaScript脚本无法获得Cookie。其主要目的是为了防止跨站脚本攻击对Cookie的信息窃取。

 

转载于:https://www.cnblogs.com/lizhengtan/p/5494089.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/573580.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

maya材质sheen_maya怎样做耐磨金属质感?

maya做出金属质感的方法:基本属里就调颜色跟漫反,colour任意Diffuse调低,滑杆三分之一到四分之一左右Specular Shading高光属Ecceicity、Specular Roll Off以及Specular Color控制高光点强度。面积颜色属一般金属的话第一个打到左边四分之一到…

swift 2.2 语法 (上)

前言&#xff1a; 1.此文中的语法会根据Swift的升级变动而更新。 2.如果需要请移步 -> swift2.2 语法&#xff08;中&#xff09;、swift 2.2语法&#xff08;下&#xff09; Swift与OC中常见的区别 导入框架 OC: #import <UIKit>#import "AFNetWorking.h"…

linux系统创建操作系统用户,linux系统中用户组创建管理linux操作系统 -电脑资料...

用户组管理包括对用户组创建&#xff0c;删除&#xff0c;修改及查看组操作命令&#xff0c;下面我们一起来看看希望本文章对各位同学会有所帮助哦&#xff0c;1&#xff0c;创建组groupadd test增加一个test组2&#xff0c;修改组groupmod -n test2 test将test组的名子改成tes…

android 半透明色值_Android 色值转换成透明度色值

在日常的android开发过程中&#xff0c;UI设计师一般都会或多或少的做一些不同透明度的背景&#xff0c;从而提高交互效果。 一般这个时候设计师们都会丢给我们一个色值&#xff0c;然后告诉我们&#xff0c;透明度30%&#xff0c;40% ......。 如果我们这个时候是给一个view添…

HTML中id、name、class 区别

HTML 中 id与name 区别 一个name可以同时对应多个控件&#xff0c;比如checkbox和radio 而id必须是全文档中唯一的 id的用途 1&#xff09; id是HTML元素的Identity&#xff0c;主要是在客户端脚本里用。 2&#xff09; label与form控件的关联&#xff0c;如 <label for&quo…

Linux系统查看系统硬件,linux怎么查看系统硬件信息

有时候想查看电脑中的系统硬件信息不知道怎么办下面是学习啦小编带来的关于linux怎么查看系统硬件信息的内容&#xff0c;欢迎阅读!linux怎么查看系统硬件信息?查看cpu&#xff1a;lscpu命令&#xff0c;查看的是cpu的统计信息.blueblue-pc:~$ lscpuArchitecture: i686 #cpu架…

manchi翻译中文 mi_求这一段意大利文歌词中文翻译(Mi Manchi)

机器翻译的实在太强大了^_^&#xff01;?你给的歌词不太准确啊&#xff0c;我帮你简单的翻译了一下。由于我是意语水平有限&#xff0c;可能会有小错误&#xff0c;还请高手多指教啊。你要的歌是Fausto Leali在1988年的流行曲&#xff0c;我是在找anna oxa的1988年Quando nasc…

图片的部分拉伸

- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight: (NSInteger)topCapHeight 这个函数是UIImage的一个实例函数&#xff0c;它的功能是创建一个内容可拉伸&#xff0c;而边角不拉伸的图片&#xff0c;需要两个参数&#xff0c;第一个是左边…

linux写一个ls命令,linux 下 如何自己写 ls 命令

有过linux 基础 都知道 ls 命令的作用下面给出实现代码#include #include #include #include #include #include #include #include #include #include int fun1(char *dir,char *filename){struct stat buf;char out[100];if(stat(dir,&buf)<0){perror("stat"…

java开发 时间类型的转换

1.String转date SimpleDateFormat format new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String time"2016-05-16 12:45:55"; Date date; try {   date format.parse(time);   System.out.print("Format To times:"date); } catch (Parse…

designer pyqt5 界面切换_PyQt5快速上手基础篇3-设置窗口标题和图标

前言本节我们为QT Designer生成的UI界面添加图标和窗口标题。一、实例运行1. QT Designer设计UI打开designer.exe,使用默认的Main Window创建&#xff0c;直接点击Create按钮即可设计UI图如下&#xff0c;并保存为test.ui2 将test.ui转换为ui_test.py进入ui_test.py目录&#x…

linux系统gpu test,轻量级显卡测试软件GpuTest 0.4.0版下载,支持windows Linux MAC-站长资讯中心...

说到显卡测试&#xff0c;我们一定会想到3D Mark&#xff0c;可是看着3D Mark那几百兆的大小和小水管的网速&#xff0c;有没有轻量级的测试软件呢&#xff1f;GpuTest就是一款十分小巧的软件&#xff0c;这是一款基于OpenGL的显卡压力测试软件&#xff0c;GpuTest还是一款跨平…

celery 可视化_Django中Celery的实现介绍(一)

Django中Celery的实现Celery介绍Celery是基于Python开发的一个分布式任务队列框架&#xff0c;支持使用任务队列的方式在分布的机器/进程/线程上执行任务调度。上图展示的是Celery的架构&#xff0c;它采用典型的生产者-消费者模式&#xff0c;主要由三部分组成&#xff1a;bro…

MySQL Router 测试使用 转

MySQL Router 测试使用1. 特性 MySQL Router 并没有包括一些特别新的特性, 总体上看中规中矩, 不过 first-available 和插件两个特性挺有意思, 后续会进行讲解, 特性包括: 对连接请求进行路由;和 Fabric 配套使用, 方便管理; 插件特性, 需要的功能以插件形式提供;2. 配置 MySQL…

linux脚本获取usb设备,Linux基于USB端口执行脚本

您应该弄清楚您的外部端口与哪个USB总线连接。在我的电脑上所有外部USB端口都连接到Bus 01要做这个检查lsusb -t的输出&#xff0c;然后附上一个usb设备并再次检查输出lsusb -t。那么你知道什么是 不会忽略 你的三个外部USB端口在你的设备内部USB结构树&#xff1a;内部USB端口…

pandas 合并所有列_Python学习:Pandas库

pandas包含数据结构和数据处理工具的设计使得在Python中进行数据清洗和分析非常快捷。pandas经常是和NumPy,Scipy以及数据可视化工具matplotlib一起使用的。pandas支持大部分NumPy语言风格的数组计算&#xff0c;但最大的不同在于pandas是用于处理表格型或异质型数据的。而NumP…

linux操作系统桌面应用与管理第2版,linux操作系统桌面应用与管理(62页)-原创力文档...

红旗Linux;任务在项目中的位置;任务描述;任务准备&#xff0d;明确学习目标;任务准备&#xff0d;任务1分解;任务1-1实施;任务1-1实施;任务1-1实施;最小化系统安装;最小化系统安装;任务1-2 通过yum定制系统实施;任务1-2 通过yum定制系统实施;1)yum了解;2)yum的安装;2)yum的安装…

python 请在微信客户端打开_完美解决 请在微信客户端打开链接

完美解决 请在微信客户端打开链接背景描述相信有模拟微信页面请求的测试都有看到过这个页面&#xff0c;简单点说就是爬虫爬微信页面&#xff0c;进行回放的时候会出现这个页面。大概在1年前&#xff0c;专门安排了一个人去解决这个技术问题&#xff0c;遗憾的是当时没有找到解…

进程和多线程

一、进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的&#xff0c;每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ、Xcode&#xff0c;系统就会分别启动2个进程 通过“活动监视器”可以查看Mac系统中所开启的进程 2.什么是线…

CUMT--Java复习--网络编程

目录 一、Java网络API 1、InetAddress类 2、URL类 3、URLConnection类 4、URLDecoder类和URLEncoder类 二、基于TCP的网络编程 1、Socket类 2、ServerSocket类 三、网络通信过程 一、Java网络API Java中有关网络方面的功能都定义在java.net中。 1、InetAddress类 Jav…