zoukankan      html  css  js  c++  java
  • HTTP协议

    一、HTTP协议介绍

    1. HTTP--Hyper Text Transfer Protocol,简称超文本传输协议,是一种建立在TCP上的无状态连接,整个基本的工作流程是客户端发送一个HTTP请求,说明客户端想要访问的资源和请求的动作,服务端收到请求之后,服务端开始处理请求,并根据请求做出相应的动作访问服务器资源,最后通过发送HTTP响应把结果返回给客户端。其中一个请求的开始到一个响应的结束称为事务,当一个事物结束后还会在服务端添加一条日志条目。

    2.  HTTP请求方式Method一般有GET、POST、PUT、DELETE,含义分别是获取、修改、上传、删除,其中GET方式仅仅为获取服务器资源,方式较为简单,因此在请求方式为GET的HTTP请求数据中是客户端往服务端发送请求动作,告知服务器自己的要求。

     HTTP请求由状态行、请求头、请求正文三部分组成:

    状态行:包括请求方式Method、资源路径URL、协议版本Version;

    请求头:包括一些访问的域名、用户代理、Cookie等信息;

    请求正文:就是HTTP请求的数据。

    二、HTTP响应

    2.1 响应数据格式

            服务器收到了客户端发来的HTTP请求后,根据HTTP请求中的动作要求,服务端做出具体的动作,将结果回应给客户端,称为HTTP响应。

            HTTP响应由三部分组成:状态行、响应头、响应正文;

    状态行:包括协议版本Version、状态码Status Code、回应短语;

    响应头:包括搭建服务器的软件,发送响应的时间,回应数据的格式等信息;

    响应正文:就是响应的具体数据。

    2.2 常见状态码的含义

            200---OK/请求已经正常处理完毕

            301---/请求永久重定向

            302---/请求临时重定向

            304---/请求被重定向到客户端本地缓存

            400---/客户端请求存在语法错误

            401---/客户端请求没有经过授权

            403---/客户端的请求被服务器拒绝,一般为客户端没有访问权限

            404---/客户端请求的URL在服务端不存在

            500---/服务端永久错误

            503---/服务端发生临时错误

    2.3 HTTP响应模型

            服务器收到HTTP请求之后,会有多种方法响应这个请求,下面是HTTP响应的四种模型:

            单进程I/O模型

    服务端开启一个进程,一个进程仅能处理一个请求,并且对请求顺序处理;

            多进程I/O模型

    服务端并行开启多个进程,同样的一个进程只能处理一个请求,这样服务端就可以同时处理多个请求;

            复用I/O模型

    服务端开启一个进程,但是呢,同时开启多个线程,一个线程响应一个请求,同样可以达到同时处理多个请求,线程间并发执行;

            复用多线程I/O模型

    服务端并行开启多个进程,同时每个进程开启多个线程,这样服务端可以同时处理进程数M*每个进程的线程数N个请求。


    三、HTTP报文格式

            HTTP报文是HTTP应用程序之间传输的数据块,HTTP报文分为HTTP请求报文和HTTP响应报文,但是无论哪种报文,他的整体格式是类似的,大致都是由起始、首部、主体三部分组成,起始说明报文的动作,首部说明报文的属性,主体则是报文的数据。接下来具体说明。

    请求报文的起始由请求行构成(有些资料称为状态行,名字不一样而已,都是指的一个东西),用来说明该请求想要做什么,由<Method>、<URL>、<Version> 三个字段组成,注意每个字段之间都有一个空格。

            其中<Method>字段有不同的值:

                    GET   --- 访问服务器的资源

                    POST  --- 向服务器发送要修改的数据

                    HEAD  --- 获取服务器文档的首部

                    PUT   --- 向服务器上传资源

                    DELETE--- 删除服务器的资源

            <URL>字段表示服务器的资源目录定位

            <Version>字段表示使用的http协议版本

            首部部分由多个请求头(也叫首部行)构成,那些首部字段名有如下,不全:

                    Accept     指定客户端能够接收的内容格式类型

                    Accept-Language 指定客户端能够接受的语言类型

                    Accept-Ecoding  指定客户端能够接受的编码类型

                    User-Agent      用户代理,向服务器说明自己的操作系统、浏览器等信息

                    Connection      是否开启持久连接(keepalive)

                    Host            服务器域名

                    ...

            主体部分就是报文的具体数据。

            

  • 相关阅读:
    [LeetCode] 75. 颜色分类(荷兰国旗)
    [LeetCode] 347. 前K个高频元素
    CMU-14445 数据库原理 汇总
    MIT-6.824 操作系统 汇总
    发布一个基于协程和事件循环的c++网络库
    记录一次gdb debug经历
    彻底弄懂UTF-8、Unicode、宽字符、locale
    CPU使用率原理及计算方式
    TCP使用注意事项总结
    STL-vector
  • 原文地址:https://www.cnblogs.com/starwei/p/12444379.html
Copyright © 2011-2022 走看看