http协议和原理概述
Posted 北九南二
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了http协议和原理概述相关的知识,希望对你有一定的参考价值。
1、HTTP协议
HTTP协议:Hyper Text Transfer Protocol, 超文本传输协议,是一种建立在TCP上的无状态连接。
(1)工作原理:
HTTP协议工作于客户端--服务端架构上,浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求,常用的Web服务器有:Apache服务器、IIS(Internet Information Service)服务器,Web服务器根据接收到的请求,向客户端发送响应消息。
(2)基本工作流程是:
1)用户端发送一个HTTP请求,说明客户端想要访问的资源和请求的动作
2)服务端收到请求后,服务器开始处理请求,并根据请求做出相应动作访问服务器资源
3)服务端发送HTTP响应把结果返回给客户端
其中,一个请求的开始到一个响应的结束称为事务,当一个事务结束后还会在服务端添加一条日志条目
(3)HTTP协议通信流程:
(4)HTTP请求响应过程:
1.1 HTTP请求
HTTP请求是客户端向服务端发送请求动作,告知服务器自己的要求
HTTP请求由状态行(请求行)、请求头、请求正文三部分组成
状态行/请求行:包括请求方式method,资源路径URL、协议版本Version
请求头:包括一些访问的域名、用户代理、Cookie等信息
请求正文:HTTP请求的数据
请求方式一般有
get---请求指定页面信息,并返回实体主体(获取)
post---向指定资源提交数据进行处理请求(如提交表单或上传文件)。数据被包含在请求体中。post请求可能会导致新的资源的建立和/或已有资源的修改(修改)
put---从客户端服务器传送的数据取代指定的文档的内容(上传)
delete----请求服务器删除指定的页面(删除)
客户端请求消息:
实例:客户端请求
GET /hello.txt HTTP/1.1
User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept-Language: en, mi
1.1.1 GET方法
GET方法是默认的HTTP请求方法,我们日常用GET方法来提交表单数据,然而用GET方法提交的表单数据只经过了简单的编码,同时它将作为URL的一部分向Web服务器发送,因此,如果使用GET方法来提交表单数据就存在着安全隐患上。例如
Http://127.0.0.1/login.jsp?Name=zhangshi&Age=30&Submit=%cc%E+%BD%BB
从上面的URL请求中,很容易就可以辩认出表单提交的内容。(?之后的内容)另外由于GET方法提交的数据是作为URL请求的一部分所以提交的数据量不能太大
1.1.2 POST方法
POST方法是GET方法的一个替代方法,它主要是向Web服务器提交表单数据,尤其是大批量的数据。POST方法克服了GET方法的一些缺点。通过POST方法提交表单数据时,数据不是作为URL请求的一部分而是作为标准数据传送给Web服务器,这就克服了GET方法中的信息无法保密和数据量太小的缺点。因此,出于安全的考虑以及对用户隐私的尊重,通常表单提交时采用POST方法
1.1.3 区别
1. get是从服务器上获取数据,post是向服务器传送数据。
get 和 post只是一种传递数据的方式,get也可以把数据传到服务器,他们的本质都是发送请求和接收结果。只是组织格式和数据量上面有差别,http协议里面有介绍
3. 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。 没明白,怎么获得变量和你的服务器有关,和get或post无关,服务器都对这些请求做了封装
4. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。 post基本没有限制,我想大家都上传过文件,都是用post方式的。只不过要修改form里面的那个type参数
5. get安全性非常低,post安全性较高。 如果没有加密,他们安全级别都是一样的,随便一个监听器都可以把所有的数据监听到,不信你自己下一个监听网络资源的软件。(来源:https://blog.csdn.net/lenovouser/article/details/52909842?utm_source=copy)
1.2 HTTP响应
1.2.1 HTTP响应说明
服务器收到客户端发来的HTTP请求后,根据HTTP请求中的要求,服务器做出具体的动作,将结果返回给客户端,称为HTTP响应。
服务器响应消息:
HTTP响应也由四个部分组成,状态行、消息报头、空行和响应正文
状态行:协议版本version、状态码status code、回应短语
响应头:搭建服务器的软件、发送响应的时间、回应数据的格式等
响应正文:响应的具体数据
状态码含义:
1xx |
表示HTTP请求已经接受,继续处理请求 |
2xx |
表示HTTP请求已经处理完成 |
3xx |
表示把请求访问的URL重定向到其他目录 |
4xx |
表示客户端出现错误 |
5xx |
表示服务端出现错误 |
常见状态码含义:
200---OK/请求已经正常处理完毕
301---/请求永久重定向
302---/请求临时重定向
304---/请求被重定向到客户端本地缓存
400---/客户端请求存在语法错误
401---/客户端请求没有经过授权
403---/客户端的请求被服务器拒绝,一般为客户端没有访问权限
404---/客户端请求的URL在服务端不存在
500---/服务端永久错误
503---/服务端发生临时错误
实例:服务端响应
HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain
1.2.2 HTTP响应模型
服务器收到HTTP请求后,会有多种方法响应这个请求,HTTP响应的4种模型:
单进程I/O模型
服务端开启一个进程,一个进程仅能处理一个请求,并且对请求顺序处理
多进程I/O模型
服务端并行开启多个进程,同样的一个进程只能处理一个请求,这样的服务端就可以同时处理多个请求
复用I/O模型
服务端开启一个进程,但是呢,同时开启多个线程,一个线程响应一个请求,同样可以达到同时处理多个请求,线程间并发执行
服务用多线程I/O模型
服务端并行开启多个线程,同时每个进程开启多个线程,这样服务端可以同时处理进程数M*每个进程的线程数N个请求
以上是关于http协议和原理概述的主要内容,如果未能解决你的问题,请参考以下文章