HTTP/HTTPS 协议
一、概念
HTTP协议
:Hyper Text Transfer Protocol(超文本传输协议)
用于从WWW服务器传输超文本到本地浏览器的传送协议。
协议
:计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则
HTTP:超文本传输协议
:允许将超文本标记语言(HTML)
文档从web服务器传送到客户端的浏览器,详细规定了浏览器和万维网WWW
服务器之间相互通信的规则,通过因特网传送万维网文档的数据传送协议。
它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。
HTTP
默认的端口号为80
,HTTPS
的端口号为443
。
HTTP是一个应用层协议
,由请求和响应
构成,是一个标准的客户端/服务器 C/S
模型。HTTP是一个无状态
的协议。
HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。
浏览网页是HTTP的主要应用,但是这并不代表HTTP就只能应用于网页的浏览。HTTP是一种协议,只要通信的双方都遵守这个协议,HTTP就能有用武之地。比如咱们常用的QQ,迅雷这些软件,都会使用HTTP协议(还包括其他的协议)。
二、HTTP协议特点
1、无状态
:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
2、无连接
:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
3、简单快速
:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。
每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
4、灵活
:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。
5、支持B/S 和 C/S 模式。
面试题:HTTP协议的特点?
1)无状态
2)无连接
3)简单快速
4)灵活
5)支持 B/S 和 C/S 模式
三、工作流程
一次HTTP操作称为一个事务,其工作过程分为4步:
1) 客户端与服务器建立连接。 点击某个超链接,HTTP工作开始。
2) 客户端发送请求Request给服务器。请求方式的格式为:URL、协议版本号、MIME信息(请求修饰符、客户机信息和可能的内容)
3) 服务器接到请求后,给客户端发送响应Response信息。 格式为一个状态行(信息的协议版本号、一个成功/错误的代码)、MIME信息(服务器信息、实体信息和可能的内容)
4)客户端收到服务器返回的信息,通过浏览器渲染显示出来,然后客户端与服务器断开连接。
以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,由显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。
HTTP是基于传输层的TCP协议,而TCP是一个端到端的面向连接的协议
。所谓的端到端可以理解为进程到进程之间的通信。
所以HTTP在开始传输之前,首先需要建立TCP连接,而TCP连接的过程需要所谓的“三次握手”。在TCP三次握手之后,建立了TCP连接,此时HTTP就可以进行传输了。
面向连接
:既HTTP在传输完成之间并不断开TCP连接。在HTTP1.1中(通过Connection头设置)这是默认行为。
四、HTTP信息构成
4.1、请求信息:
1)请求行
:包含:请求方式
、请求路径RUL、协议及其版本(eg:GET /images/logo.gif HTTP/1.1——表示使用get方式请求/images/logo.gif的资源,协议为HTTP1.1版本)
2)请求头
:
3)空行
:
4)请求体
:
4.1.2、HTTP请求方法
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
目前主要使用的HTTP 请求主要为 Get 和 Post 两种方法
GET 是从服务器上获取数据, POST 是向服务器传送数据
面试题:GET和POST的区别
:
1、
POST
方法是把提交的数据放在HTTP包的Body中
;
GET
提交的数据会放在URL之后
,以?分割URL和传输数据
,参数之间以&相连
,(eg:EditPosts.aspx?name=test1&id=123456) 。
2、POST
方法提交的数据长度没有限制
;
GET
提交的数据大小有限制
,最多只能有1024字节(因为浏览器对URL的长度有限制),而。
3、POST
方式通过Request.Form
来获取变量的值;
GET
方式需要使用Request.QueryString
来取得变量的值。
4、GET
方式提交数据,会带来安全问题
,(GET提交的数据会放在URL之后)比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码。
4.1.3、统一资源定位符:URL
万维网上,每个信息资源都有统一的且在网上唯一的地址,该地址就叫URL(Uniform Resource Locator,统一资源定位符),它是WWW的统一资源定位标志,就是指网络地址。
语法:
URL由三部分组成:资源类型、存放资源的主机域名、资源文件名。
URL的一般语法格式为:(带方括号[]的为可选项):
protocol(协议) : // hostname[:port] / path / [;parameters][?query]#fragment
4.2、响应消息
客户端向服务器发送一个请求,服务器以一个状态行
作为响应。
1)状态行
:包括:消息协议的版本、成功或者错误编码、服务器信息、实体元信息以及必要的实体内容。
2)响应头
:由多组属性参数构成
3)空行
:标志着header的结束
4)响应体
:存放响应数据
面试题: 常用状态码?
200(表示请求处理成功)
301(表示永久重定向:比如我当前页面永远都和当前内容绑定,不会被篡改)。
302(表示临时重定向:不安全,随时都有可能发生被篡改的危险)。
403(表示客户端当前访问权限不够)。
404(表示客户端发送的请求资源未被找到)。
500(表示后端程序出现异常、BUG)。
502(服务器从上游服务器收到无效响应)。
504(网关超时)。
505(服务器不支持当前Htttp协议版本)。
常见响应头
Allow 服务器支持哪些请求方法(如GET、POST等)。
Content-Encoding 文档的编码(Encode)方法。
Content-Length 表示内容长度。
Content-Type 表示后面的文档属于什么MIME类型。
Date 当前的GMT时间。
Expires 应该在什么时候认为文档已经过期,从而不再缓存?
Last-Modified 文档的最后改动时间。
Location 表示客户应当到哪里去提取文档。
sendRedirect方法,该方法同时设置状态代码为302。
Refresh 表示浏览器应该在多少时间之后刷新文档,以秒计。
Server 服务器名字。Servlet一般不设置这个值,而是由Web服务器自己设置。
Set-Cookie 设置和页面关联的Cookie。
WWW-Authenticate 客户应该在Authorization头中提供什么类型的授权信息?
附:状态码
状态码:
100 Continue
继续。客户端应继续其请求
101 Switching Protocols
切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议
200 OK
请求成功。一般用于GET与POST请求
201 Created
已创建。成功请求并创建了新的资源
202 Accepted
已接受。已经接受请求,但未处理完成
203 Non-Authoritative Information
非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本
204 No Content
无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档
205 Reset Content
重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域
206 Partial Content
部分内容。服务器成功处理了部分GET请求
300 Multiple Choices
多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择
301 Moved Permanently
永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
302 Found
临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
303 See Other
查看其它地址。与301类似。使用GET和POST请求查看
304 Not Modified
未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源
305 Use Proxy
使用代理。所请求的资源必须通过代理访问
306 Unused
已经被废弃的HTTP状态码
307 Temporary Redirect
临时重定向。与302类似。使用GET请求重定向
400 Bad Request
客户端请求的语法错误,服务器无法理解
401 Unauthorized
请求要求用户的身份认证
402 Payment Required
保留,将来使用
403 Forbidden
服务器理解请求客户端的请求,但是拒绝执行此请求
404 Not Found
服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
405 Method Not Allowed
客户端请求中的方法被禁止
406 Not Acceptable
服务器无法根据客户端请求的内容特性完成请求
407 Proxy Authentication Required
请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权
408 Request Time-out
服务器等待客户端发送的请求时间过长,超时
409 Conflict
服务器完成客户端的PUT请求是可能返回此代码,服务器处理请求时发生了冲突
410 Gone
客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置
411 Length Required
服务器无法处理客户端发送的不带Content-Length的请求信息
412 Precondition Failed
客户端请求信息的先决条件错误
413 Request Entity Too Large
由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息
414 Request-URI Too Large
请求的URI过长(URI通常为网址),服务器无法处理
415 Unsupported Media Type
服务器无法处理请求附带的媒体格式
416 Requested range not satisfiable
客户端请求的范围无效
417 Expectation Failed
服务器无法满足Expect的请求头信息
500 Internal Server Error
服务器内部错误,无法完成请求
501 Not Implemented
服务器不支持请求的功能,无法完成请求
502 Bad Gateway
作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
503 Service Unavailable
由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
504 Gateway Time-out
充当网关或代理的服务器,未及时从远端服务器获取请求
505 HTTP Version not supported
服务器不支持请求的HTTP协议的版本,无法完成处理