推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > 北九南二 > http协议和原理概述

http协议和原理概述

北九南二 2018-10-26

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请求响应过程:

http协议和原理概述



1.1 HTTP请求

HTTP请求是客户端向服务端发送请求动作,告知服务器自己的要求

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

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

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

请求正文:HTTP请求的数据

请求方式一般有

get---请求指定页面信息,并返回实体主体(获取)

post---向指定资源提交数据进行处理请求(如提交表单或上传文件)。数据被包含在请求体中。post请求可能会导致新的资源的建立和/或已有资源的修改(修改)

put---从客户端服务器传送的数据取代指定的文档的内容(上传)

delete----请求服务器删除指定的页面(删除)


客户端请求消息:

http协议和原理概述

实例:客户端请求

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协议和原理概述》的版权归原作者「北九南二」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注北九南二微信公众号

北九南二微信公众号:North9South2

北九南二

手机扫描上方二维码即可关注北九南二微信公众号

北九南二最新文章

精品公众号随机推荐