1.简介
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写。
2.特点
简单快速 灵活 HTTP 0.9和1.0使用非持续连接 HTTP 1.1使用持续连接 无状态 支持B/S(浏览器/服务器 )及C/S模式(客户机/服务器)
3.工作原
1、客户端连接到Web服务器
一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接
2、发送HTTP请求
通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。
3、服务器接受请求并返回HTTP响应
Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。
4、释放连接TCP连接
若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;
5、客户端浏览器解析HTML内容
客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的 语法对其进行格式化,并在浏览器窗口中显示。
4.消息结构
栗子:
5.请求方法
根据 HTTP 标准,HTTP 请求可以使用多种请求方法。
HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法
序号 | 方法 | 描述 |
---|---|---|
1 | GET | 请求指定的页面信息,并返回实体主体。(长度受限 IE : 2803 Firefox:65536 Chrome:8182 Safari:80000 Opera:190000)IE会被h缓存。 |
2 | HEAD | 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头 |
3 | POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。 |
4 | PUT | 从客户端向服务器传送的数据取代指定的文档的内容。 |
5 | DELETE | 请求服务器删除指定的页面。 |
6 | CONNECT | HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。 |
7 | OPTIONS | 允许客户端查看服务器的性能。 |
8 | TRACE | 回显服务器收到的请求,主要用于测试或诊断。 |
9 | PATCH | 是对 PUT 方法的补充,用来对已知资源进行局部更新 。 |
6.http状态码
1**:请求收到,继续处理
100——客户必须继续发出请求
101——客户要求服务器根据请求转换HTTP协议版本
2**:操作成功收到,分析、接受
200——交易成功
201——提示知道新文件的URL
202——接受和处理、但处理未完成
203——返回信息不确定或不完整
204——请求收到,但返回信息为空
205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件
206——服务器已经完成了部分用户的GET请求
3**:完成此请求必须进一步处理
300——请求的资源可在多处得到
301——删除请求数据
302——在其他地址发现了请求数据
303——建议客户访问其他URL或访问方式
304——客户端已经执行了GET,但文件未变化
305——请求的资源必须从服务器指定的地址得到
306——前一版本HTTP中使用的代码,现行版本中不再使用
307——申明请求的资源临时性删除
4**:请求包含一个错误语法或不能完成
400——错误请求,如语法错误
401——未授权
HTTP 401.1 - 未授权:登录失败
HTTP 401.2 - 未授权:服务器配置问题导致登录失败
HTTP 401.3 - ACL 禁止访问资源
HTTP 401.4 - 未授权:授权被筛选器拒绝
HTTP 401.5 - 未授权:ISAPI 或 CGI 授权失败
402——保留有效ChargeTo头响应
403——禁止访问
HTTP 403.1 禁止访问:禁止可执行访问
HTTP 403.2 - 禁止访问:禁止读访问
HTTP 403.3 - 禁止访问:禁止写访问
HTTP 403.4 - 禁止访问:要求 SSL
HTTP 403.5 - 禁止访问:要求 SSL 128
HTTP 403.6 - 禁止访问:IP 地址被拒绝
HTTP 403.7 - 禁止访问:要求客户证书
HTTP 403.8 - 禁止访问:禁止站点访问
HTTP 403.9 - 禁止访问:连接的用户过多
HTTP 403.10 - 禁止访问:配置无效
HTTP 403.11 - 禁止访问:密码更改
HTTP 403.12 - 禁止访问:映射器拒绝访问
HTTP 403.13 - 禁止访问:客户证书已被吊销
HTTP 403.15 - 禁止访问:客户访问许可过多
HTTP 403.16 - 禁止访问:客户证书不可信或者无效
HTTP 403.17 - 禁止访问:客户证书已经到期或者尚未生效
404——没有发现文件、查询或URl
405——用户在Request-Line字段定义的方法不允许
406——根据用户发送的Accept拖,请求资源不可访问
407——类似401,用户必须首先在代理服务器上得到授权
408——客户端没有在用户指定的饿时间内完成请求
409——对当前资源状态,请求不能完成
410——服务器上不再有此资源且无进一步的参考地址
411——服务器拒绝用户定义的Content-Length属性请求
412——一个或多个请求头字段在当前请求中错误
413——请求的资源大于服务器允许的大小
414——请求的资源URL长于服务器允许的长度
415——请求资源不支持请求项目格式
416——请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求也不包含If-Range请求头字段
417——服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下一级服务器不能满足请求长。
5**:服务器执行一个完全有效请求失败
HTTP 500 - 内部服务器错误
HTTP 500.100 - 内部服务器错误 - ASP 错误
HTTP 500-11 服务器关闭
HTTP 500-12 应用程序重新启动
HTTP 500-13 - 服务器太忙
HTTP 500-14 - 应用程序无效
HTTP 500-15 - 不允许请求 global.asa
Error 501 - 未实现
HTTP 502 - 网关错误
7.http请求头
HTTP首部字段是构成HTTP报文的要素之一,它可以给浏览器、服务器提供报文主体大小、所使用的语言、认证信息等。
通用首部字段 : 详细
Cache-Control: 控制缓存的行为 eg: 枚举值
Connection: 决定当前的事务完成后,是否会关闭网络连接
Date:报文创建的日期和时间
Pragma:HTTP/1.0兼容头,no-cache
Trailer: 允许发送方在分块发送的消息后面添加额外的元信息
Transfer-Encoding: 是一种逐跳报头,即应用于两个节点之间的消息,而不是资源本身
Upgrade-Insecure-Requests: 请求头向服务器发送一个客户端对HTTPS加密和认证响应良好,并且可以成功处理的信号,可以请求所属网站所有的HTTPS资源。
Via: 是由代理服务器添加的,适用于正向和反向代理,在请求和响应首部中均可出现。这个消息首部可以用来追踪消息转发情况,防止循环请求。
Warning:包含报文当前状态可能存在的问题。在响应中可以出现多个 Warning 首部。
请求首部字段
Accept: 客户端可以处理的内容类型
Accept-Charset: 客户端可以处理的字符集类型
Accept-Encoding: 客户端能够理解的内容编码方式——通常是某种压缩算法
Accept-Langauge: 可以理解的自然语言
Authorization: 含有服务器用于验证用户代理身份的凭证
Expect: 表示服务器只有在满足此期望条件的情况下才能妥善地处理请求。
From: 中包含一个电子邮箱地址,这个电子邮箱地址属于发送请求的用户代理的实际掌控者的人类用户。
Host: 服务器的域名(对于虚拟主机来说),以及(可选的)服务器监听的TCP端口号。
If-Match: 在请求方法为 GET
和 HEAD
的情况下,服务器仅在请求的资源满足此首部列出的 ETag
值时才会返回资源。而对于 PUT
或其他非安全方法来说,只有在满足条件的情况下才可以将资源上传。
If-Modified-Since: 服务器只在所请求的资源在给定的日期时间之后对内容进行过修改的情况下才会将资源返回,状态码为 200
。只可以用在 GET
或 HEAD
请求中。
当与 If-None-Match
一同出现时,它(If-Modified-Since
)会被忽略掉,除非服务器不支持 If-None-Match
。
If-None-Match:优先级比较高, 对于 GETGET
和 HEAD
请求方法来说,当且仅当服务器上没有任何资源的 ETag
属性值与这个首部中列出的相匹配的时候,服务器端会才返回所请求的资源,响应码 为 200
。
If-Range: Range
头字段在一定条件下起作用
If-Unmodified-Since: 只有当资源在指定的时间之后没有进行过修改的情况下,服务器才会返回请求的资源,或是接受 POST
或其他 non-safe 方法的请求。如果所请求的资源在指定的时间之后发生了修 改,那么会返回 412
(Precondition Failed) 错误。可用于断点续传。
Max-Forwards: 限制信息通过代理和网关传送的时间
Proxy-Authorization: 用户代理提供给代理服务器的用于身份验证的凭证
Range: 告知服务器返回文件的哪一部分,
Referer: 包含了当前请求页面的来源页面的地址,即表示当前页面是通过此来源页面里的链接进入的。
TE: TE
请求型头部用来指定用户代理希望使用的传输编码类型。(可以将其非正式称为 Accept-Transfer-Encoding
, 这个名称显得更直观一些)。
User-Agent: 用来让网络协议的对端来识别发起请求的用户代理软件的应用类型、操作系统、软件开发商以及版本号。
Cookie: 服务器通过 Set-Cookie
首部投放并存储到客户端的 HTTP cookies。
响应首部字段
Accept-Ranges:字段的具体值用于定义范围请求的单位。
Age: 消息头里包含消息对象在缓存代理中存贮的时长,以秒为单位。
ETag: 资源的特定版本的标识符
Location: 首部指定的是需要将页面重新定向至的地址。一般在响应码为3xx的响应中才会有意义。
Proxy-Authenticate: 指定了获取 proxy server (代理服务器)上的资源访问权限而采用的身份验证方式
Retry-After: 用户代理需要等待多长时间之后才能继续发送请求
Server: 处理请求的源头服务器所用到的软件相关信息
Vary: 它决定了对于未来的一个请求头,应该用一个缓存的回复(response)还是向源服务器请求一个新的回复
WWW-Authenticate: 何种验证方式去获取对资源的连接。
实体首部字段 : 实体首部字段是包含在请求报文和响应报文中的实体部分所使用的首部。用于补充内容的更新时间和与实体相关的信息。
Allow: 用于枚举资源所支持的 HTTP 方法的集合。
Content-Encoding: 用于对特定媒体类型的数据进行压缩。当这个首部出现的时候,它的值表示消息主体进行了何种方式的内容编码转换
Content-Language: 用来说明访问者希望采用的语言或语言组合
Content-Length: 用来指明发送给接收方的消息主体的大小,即用十进制数字表示的八位元组的数目
Content-Location: 返回的数据的地址选项
Content-MD5: MD5校验
Content-Range: 响应首部 Content-Range
显示的是一个数据片段在整个文件中的位置
Content-Type: 资源的MIME类型
Expires: 包含日期/时间, 即在此时候之后,响应过期。
Last-Modified: 源头服务器认定的资源做出修改的日期及时间。由于精确度比 ETag
要低,所以这是一个备用机制。包含有 If-Modified-Since
或 If-Unmodified-Since
首部的条件请求会使用这个字段。
8.其他首部字段
X-Frame-Options: 指示允许一个页面 可否在 <frame>
, <iframe>
, <embed>
或者 <object>
中展现的标记。站点可以通过确保网站没有被嵌入到别人的站点里面,从而避免 clickjacking 攻击。
X-XSS-Protection: 当检测到跨站脚本攻击 (XSS)时,浏览器将停止加载页面(旧浏览器)
Content-Security-Policy: 允许站点管理者控制用户代理能够为指定的页面加载哪些资源
DNT(do not track): 表明了用户对于网站追踪的偏好;它允许用户指定自己是否更注重个人隐私还是定制化内容。
P3P: 通过利用 P3P(The Platform forPrivacy Preferences,在线隐私偏好平台)技术,可以让 Web 网站上的个人隐私变成一种仅供程序可理解的形式,以达到保护用户隐私的目的。
9.安全
来源:https://www.cnblogs.com/zhlalili/p/12443454.html