前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HTTP协议整理

HTTP协议整理

作者头像
算法之名
发布2019-11-18 21:53:52
5420
发布2019-11-18 21:53:52
举报
文章被收录于专栏:算法之名算法之名

URI与URL

  • URI可以分为URL,URN或同时具备locators和names特性的一个东西
  • URN作用就好像一个人的名字,URL就像一个人的地址。
  • URN确定了东西的身份,URL提供了找到它的方式

HTTP报文头

  • HTTP的报文头大体可以分为四类,分别是:通用报文头、请求报文头、响应报文头和实体报文头。
  • 在HTTP/1.1里一共规范了47种报文头字段。

通用报文头

首部字段名

说明

Cache-Control

控制缓存的行为

Connection

逐跳首部、连接的管理

Date

创建报文的日期时间

Pragma

报文指令

Trailer

报文末端的首部一览

Transfer-Encoding

指定报文主体的传输编码方式

Upgrade

升级为其他协议

Via

代理服务器的相关信息

Warning

错误通知

请求报文头

首部字段名

说明

Accept

用户代理可处理的媒体类型

Accept-Charset

优先的字符集

Accept-Encoding

优先的内容编码

Accept-Language

优先的语言(自然语言)

Authorization

Web认证信息

Expect

期待服务器的特定行为

From

用户的电子邮箱地址

Host

请求资源所在服务器

If-Match

比较实体标记(ETag)

If-Modified-Since

比较资源的更新时间

If-None-Match

比较实体标记(与If-Match相反)

If-Range

资源未更新时发送实体Byte的范围请求

If-Unmodified-Since

比较资源的更新时间(与If-Modified-Since相反)

Max-Forwoards

最大传输逐跳数

Proxy-Authorization

代理服务器要求客户端的认证信息

Range

实体的字节范围请求

Referer

对请求中URI的原始获取方

TE

传输编码的优先级

User-Agent

HTTP客户端程序的信息

响应报文头

首部字段名

说明

Accept-Ranges

是否接受字节范围请求

Age

推算资源创建经过时间

ETag

资源的匹配信息

Location

令客户端重定向至指定URI

Proxy-Authenticate

代理服务器对客户端的认证信息

Retry-After

对再次发起请求的时机要求

Server

HTTP服务器的安装信息

Vary

代理服务器缓存的管理信息

WWW-Authenticate

服务器对客户端的认证信息

实体报文头

首部字段名

说明

Allow

资源可支持的HTTP方法

Content-Encoding

实体主体适用的编码方式

Content-Language

实体主体的自然语言

Content-Length

实体主体的大小(单位:字节)

Content-MD5

实体主体的报文摘要

Content-Range

实体主体的位置范围

Content-Type

实体主体的媒体类型

Content-Location

替代对应资源的URI

Expires

实体主体过期的日期时间

Last-Modified

资源的最后修改日期时间

请求头ACCEPT作用:浏览器端可以接受的媒体类型

Accept: text/html 代表浏览器可以接受服务器回发的类型为 text/html,也就是我们常说的html文档,如果服务器无法返回text/html类型数据,服务器应该返回一个406错误(Non Acceptable)

Accept: */* 代表浏览器可以处理所有类型。

如果想要给显示的媒体类型增加优先级,则适用q=来额外表示权重值,权重值q的范围是0~1(可精确到小数点后3位),且1为最大值。不指定权重值时,默认权重为q=1.0。当服务器提供多种内容时,将会首先返回权重值最高的类型。

请求头Accept-Encoding作用:浏览器申请自己接收的编码方法,通常制定压缩方法,是否支持压缩,支持什么压缩方法(gzip,deflate)

请求头Accept-Language作用:浏览器声明自己接收的语言

Accept-Language: zh-cn,zh;q=0.7,en-us,en;q=0.3

客户端在服务器有中文版资源的情况下,会请求其返回中文版对应的响应,没有中文版时,则请求返回英文版响应。

通用头Connection

Connection: keep-alive 当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。

Connection: close 代表一个Request完成后,客户端和服务器之间用于传输HTTP数据的TCP连接会关闭,当客户端再次发送Request,需要重新建立TCP连接。

请求头Host作用:请求报头域主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来。

我们在浏览器中输入: http://www.abab.com:8080

浏览器发送的请求消息中,就会包含Host请求报头域,如下:

Host: www.abab.com:8080

请求头Referer作用:当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。

请求头User-Agent作用:告诉HTTP服务器,客户端使用的操作系统和浏览器的名称和版本。很多情况下,我们会通过User-Agent来判断浏览器类型,从而进行不同兼容设计。

实体头Content-Type作用:说明报文体内对象的媒体类型

text/html: HTML格式

text/plain: 纯文本格式

text/xml: XML格式

image/gif: gif图片格式

image/jpeg: jpg图片格式

image/png: png图片格式

application/xhtml+xml: XHTML格式

application/xml: XML数据格式

application/atom+xml: Atom XML聚合格式

application/json: JSON数据格式

application/pdf: pdf格式

application/msword: Word文档格式

application/octet-stream: 二进制数据流

application/x-www-form-urlencoded: 表单提交

HTTP 1.1常用方法

  1. GET 用来请求访问已被URI识别的资源,指定的资源经服务器解析后返回响应内容。各个浏览器提交的长度有限制,ie:2803,firefox:65536,chrome:8182
  2. POST 与GET功能类似,一般用来传输实体的主体。主要目的不是获取响应主体内容,克服了GET方法的一些缺点,不是作为URL请求的一部分,而是作为标准数据传送给WEB服务。克服传输数据无法保密,数据太小的缺点。数据不是放在URL中,而是放在BODY中。从安全角度讲,无论GET还是POST都会被抓包,但是POST不会在浏览器中留下痕迹,而GET则会直接泄漏浏览痕迹。
  3. PUT 从客户端向服务器传送的数据取代指定的文档(可能是各种资源,比如说数据库资源)的内容,与POST方法最大的不同,PUT是幂等的,而POST是不幂等的。因此,我们更多时候将PUT方法用做传输资源。一般来说,我们创建资源的时候用POST,更新资源的时候用PUT,但是HTTP 1.1自身不带有验证功能,幂等需要自己实现,所以大部分时候依然使用POST。
  4. HEAD 类似于GET请求,只不过返回的响应中没有具体内容,用于获取报头。经常用来测试一些超链接的有效性,是否能够用来访问,是否有更新,避免返回数据过大。
  5. DELETE 请求服务器删除指定的资源。HTTP 1.1没有验证机制,相反会成为攻击者使用的漏洞,不建议使用。
  6. OPTIONS 用于查询针对请求URI指定的资源支持的方法

  1. TRACE 回显服务器收到的请求,主要用于测试或诊断。客户端可以通过TRACE方法查询发送出去的请求是如何被加工修改,或者说是被篡改。因为请求连接到目标服务器的时候可能会通过代理中转,用来确认连接过程中发生的一系列的操作,看看中转的过程。但是TRACE本身有缺陷,容易引发XST(跨站追踪)攻击。网站应该杜绝使用该方法,会成为安全漏洞。 XST攻击描述: 攻击者将恶意代码嵌入一台已经被控制的主机上的web文件,当访问者浏览时恶意代码在浏览器中执行,然后访问者的cookie、http基本验证以及ntlm验证信息将被发送到已经被控制的主机,同时传送Trace请求给目标主机,导致cookie欺骗或者是中间人攻击。 XST攻击条件: 1、需要目标web服务器允许Trace参数; 2、需要一个用来插入XST代码的地方; 3、目标站点存在跨域漏洞。
  2. CONNECT 开启一个客户端与所请求资源之间的双向沟通的通道,它可以用来创建隧道。在使用HTTP代理服务器的时候就是使用该方法。比如说访问外国网站访问国外网站。代理服务器只建立握手机制,本身不能读取数据内容,无论HTTPS还是HTTP都一样。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档