http协议

简介:

http:hyper text transfer protocol超文本传输协议。互联网应用最广泛的网络协议,主要用于web服务。格式为HTML超文本标记语言来实现。

协议的版本:

    http0.9:仅于用户传输html文档

    http1.0:1,引用了mime机制:多用途互联网邮件扩展,http可以发送多媒体信息,此机制让http不在单单只支持html格式,还可以支持其他格式进行发送。

         2,引用了keep-alive机制,支持持久连接的功能(在首部添加了某个字段而形成的,并非原生就支持此功能)

         3,引用支持缓存功能

    http1.1:支持更多的请求方法,更加精细的缓存控制,原生直接支持持久连接功能。目前常用的版本

    http2.0:提供了http语义优化的传输,能够加速http数据交互,尤其是使用ssl加速机制。大师spdy现在用的还不多。

html文本架构:

wKioL1jnM1HzQDwkAAAWr-XMde8527.png-wh_50

html文档生成方式:

    静态:事先就编译并定义完成的

wKiom1jnNA6CCMpXAADFW2-ZkYg997.png-wh_50

    1,web服务器向内核注册socket

    2,客户端通过浏览器向web服务器发起request请求

    3,web服务器收到客户端的request信息

    4,如果用户请求的资源在服务器本地,http服务器会向系统内核申请调用

    5,内核调用本地磁盘里的数据,并将数据发送http服务

    6,http将用户请求的资源通过response报文响应客户端

    动态:通过编译语言编写的程序输出html格式的结果。动态语音有:php,jsp,asp,.net。这些语音都必须有相应的解释器。

wKioL1jnNBrTmgPFAADfagRRtK0607.png-wh_50

    用户请求的是动态内容,http服务会调用后端的解析器,有动态语言去处理用户的请求,需要请求数据的时候,会向内核申请调用,从而向磁盘中获取用户指定的数据,通过解释器运行,运行的结果会生成html格式的文件,然后构建响应报文,最终发回给客户端。

    http报文中存在很多行内容,一般是由ASCLL码组成,各字段长度不确定。http报文可分为请求报文与响应报文。

    请求报文格式:

    wKiom1jnNkWgDtotAAAoC8GkI_k643.png-wh_50

    请求行:由请求方法字段<method>+请求URL字段<request-URL>+HTTP协议版本<version>组成。

        请求RUL:可以是相对路径,如/images/log.jpg,也可以是绝对路径,如http://www.baidu.com/images.banner.jpg

        <version>请求的协议版本,格式http/<major>.<minor>

    wKiom1jnN4qS_TJuAAMQSNM8hQM518.png-wh_50

        这是用wireshark工具抓取http请求报文的显示结果。在首部后的“\r\n”表示一个回车和换行,以此将该首部与下一个首部隔开

        或者使用curl命令获取http请求报文

    请求首部

        有关键字+关键字的值组成,之间使用“:”进行分隔,格式Name:Value,请求首部的作用是通过客户端将请求的相关内容告知服务器端,首部可以不止一个User-Agent:产生请求的浏览器类型。Accept:客户端可识别的内容类型列表。Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机。

                    

        ·        Client-IP:客户端 IP地址

        ·        Host:请求的主机,这在实现基于主机名的虚拟主机时很有用

        ·        Referer:指明了请求当前资源原始资源的URL,使用referer是可以防盗链

        ·        User-Agent:用户代理,一般而言是浏览器

        ·        Accept首部:指客户端可以接受哪些编码的类型

                    § Accept:服务端能够发送的媒体的类型

                    § Accetp-Charset:接收的字符集

                    § Accept-Encoding:编码格式

                    § Accept-Lanage:所能接受的语言编码格式

         ·        条件式请求首部:(在http1.1中才会用到)
当发送请求时,先问问对方是否满足条件,如果满足条件就请求,不满足就不请求

       ·        跟安全相关的请求:

                § Authorization

                § Cookie



            空白行

        最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头。

    请求实体

        请求数据不在GET方法中使用,而是在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求数据相关的最常使用的请求头是Content-Type和Content-Length。

相应报文格式

    起始行+响应首部+空白行+相应实体

    wKiom1jnOY-xPW3TAABu_Mu5S8o023.png-wh_50

        

                    状态行:状态行由 HTTP 协议版本字段、状态码和状态码的描述文本 3 个部分组成,他们之间使用空格隔开;

  ● 状态码由三位数字组成,第一位数字表示响应的类型,常用的状态码有五大类如下所示:

  1xx:表示服务器已接收了客户端请求,客户端可继续发送请求;

  2xx:表示服务器已成功接收到请求并进行处理;

  3xx:表示服务器要求客户端重定向;

  4xx:表示客户端的请求有非法内容;

  5xx:表示服务器未能正常处理客户端的请求而出现意外错误;

  ● 状态码描述文本有如下取值:

  200 OK:表示客户端请求成功;

       201:CREATED上传文件成功后显示

       301:Move Permanently,永久重定向,会返回一个新地址,并告诉请求的地址将永久挪到哪个新地址

       302:Fonud:临时重定向,临时放到某个地方,会在响应报文中使用“Location:新位置”

       304:Not MOdified,资源没有做

  400 Bad Request:表示客户端请求有语法错误,不能被服务器所理解;

  401 Unauthonzed:表示请求未经授权,该状态代码必须与 WWW-Authenticate 报头域一起使用;

  403 Forbidden:表示服务器收到请求,但是拒绝提供服务,通常会在响应正文中给出不提供服务的原因;

  404 Not Found:请求的资源不存在,例如,输入了错误的URL;

  500 Internal Server Error:表示服务器发生不可预期的错误,导致无法完成客户端的请求;

  503 Service Unavailable:表示服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常;

  响应头部:响应头可能包括:

  Location:Location响应报头域用于重定向接受者到一个新的位置。例如:客户端所请求的页面已不存在原先的位置,为了让客户端重定向到这个页面新的位置,服务器端可以发回Location响应报头后使用重定向语句,让客户端去访问新的域名所对应的服务器上的资源;

  Server:Server 响应报头域包含了服务器用来处理请求的软件信息及其版本。它和 User-Agent 请求报头域是相对应的,前者发送服务器端软件的信息,后者发送客户端软件(浏览器)和操作系统的信息。

  Vary:指示不可缓存的请求头列表;

  Connection:连接方式;

  对于请求来说:close(告诉 WEB 服务器或者代理服务器,在完成本次请求的响应后,断开连接,不等待本次连接的后续请求了)。keepalive(告诉WEB服务器或者代理服务器,在完成本次请求的响应后,保持连接,等待本次连接的后续请求);

  对于响应来说:close(连接已经关闭); keepalive(连接保持着,在等待本次连接的后续请求); Keep-Alive:如果浏览器请求保持连接,则该头部表明希望WEB 服务器保持连接多长时间(秒);例如:Keep-Alive:300;

  WWW-Authenticate:WWW-Authenticate响应报头域必须被包含在401 (未授权的)响应消息中,这个报头域和前面讲到的Authorization 请求报头域是相关的,当客户端收到 401 响应消息,就要决定是否请求服务器对其进行验证。如果要求服务器对其进行验证,就可以发送一个包含了Authorization 报头域的请求;

  空行:最后一个响应头部之后是一个空行,发送回车符和换行符,通知服务器以下不再有响应头部。

  响应包体:服务器返回给客户端的文本信息;

http请求方法

                 http通信过程中,每个http请求报文中都会包含一个http请求方法,用于告知客户端请求执行某些具体的操作

    GET: 请求指定的页面信息,并返回实体主体。
                HEAD: 只请求页面的首部。
                POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。
                PUT: 从客户端向服务器传送的数据取代指定的文档的内容。
                DELETE: 请求服务器删除指定的页面。
                OPTIONS: 允许客户端查看服务器的性能。
                TRACE: 请求服务器在响应中的实体主体部分返回所得到的内容。
                PATCH: 实体中包含一个表,表中说明与该URI所表示的原内容的区别。
                MOVE: 请求服务器将指定的页面移至另一个网络地址。
                COPY: 请求服务器将指定的页面拷贝至另一个网络地址。
                LINK: 请求服务器建立链接关系。
                UNLINK: 断开链接关系。
                WRAPPED: 允许客户端发送经过封装的请求。
                Extension-mothed:在不改动协议的前提下,可增加另外的方法。
            比如:
                GET /index.html HTTP/1.1
                Accept: text/plain /*纯ASCII码文本文件*/
                Accept: text/html /*HTML文本文件*/
                User-Agent:Mozilla/4.5(WinNT)
                说明浏览器使用Get方法请求文档/index.html。浏览器则只允许接收纯ASCII码文本文件和HTML文本文件,其使用的引擎是Mozilla/4.5(Netscape)。

http常用的请求头

                Accept:浏览器可接受的MIMIE类型

                Accept-Charset:浏览器可接受的字符集

                Accept-Encoding:浏览器能够进行解析的数据编码方式

                Accept-Language:浏览器所希望的语言种类

                Authorication:授权信息

                Connection:表示是否需要持久连接。值为“keep-Alive”

                Content-Length:表示请求消息正文的长度

                Cookie:相关的http扩展头

                        Cookie:客户端将服务器设置的Cookie返回到服务器

                        Set-Cookie:服务器向客户端设置Cookie

                        Cookie2:客户端指示服务器支持Cookie的版本

                        set-Cookie2:服务器向客户端设置Cookie

本文转自   宏强   51CTO博客,原文链接:http://blog.51cto.com/tanhong/1913843

相关文章
|
17天前
|
网络协议 Linux iOS开发
推荐:实现RTSP/RTMP/HLS/HTTP协议的轻量级流媒体框架,支持大并发连接请求
推荐:实现RTSP/RTMP/HLS/HTTP协议的轻量级流媒体框架,支持大并发连接请求
38 1
|
1月前
|
网络协议 Linux
HTTP协议基本原理简介(二)
HTTP协议基本原理简介(二)
23 1
|
1月前
|
前端开发
webpack如何设置devServer启动项目为https协议
webpack如何设置devServer启动项目为https协议
135 0
|
2月前
|
安全 前端开发 网络协议
|
1月前
|
缓存 前端开发
HTTP协议基本原理简介(三)
HTTP协议基本原理简介(三)
14 1
|
2天前
|
网络协议 Java API
深度剖析:Java网络编程中的TCP/IP与HTTP协议实践
【4月更文挑战第17天】Java网络编程重在TCP/IP和HTTP协议的应用。TCP提供可靠数据传输,通过Socket和ServerSocket实现;HTTP用于Web服务,常借助HttpURLConnection或Apache HttpClient。两者结合,构成网络服务基础。Java有多种高级API和框架(如Netty、Spring Boot)简化开发,助力高效、高并发的网络通信。
|
4天前
|
缓存 安全 网络协议
Http协议是什么
【4月更文挑战第12天】HTTP是用于从WWW服务器传输超文本到浏览器的协议,基于TCP/IP,特点包括无连接、无状态、面向对象、无阻塞和可缓存。它的工作原理是客户端发送请求,服务器处理后返回响应。自1989年创建以来,HTTP已发展支持多媒体内容传输,并通过HTTPS提供安全保护。学习更多可参考计算机网络技术文献。
15 6
|
6天前
|
存储 JSON 前端开发
网络原理(4)HTTP协议(下)
网络原理(4)HTTP协议
19 0
|
17天前
|
XML JSON JavaScript
推荐一个比较好用的c++版本http协议库-cpp-httplib
推荐一个比较好用的c++版本http协议库-cpp-httplib
36 1
|
24天前
|
运维 监控 算法
slb监听协议http
SLB的HTTP监听器用于处理HTTP请求,配置时选择协议类型为HTTP和前端端口(如80)。SLB根据负载算法将请求转发至健康后端服务器,并支持会话保持。通过`X-Forwarded-For`和`X-Forwarded-Proto`头处理请求信息。由于不涉及SSL/TLS,数据传输不安全,推荐升级至HTTPS以加密通信。SLB提供性能监控和故障排查工具,帮助运维管理。
21 5