CubicZ

导航

HTTP协议基础

该篇用来记录HTTP协议的相关基础知识,以免遗忘,主要是加深对HTTP协议的请求方式及响应状态码的印象,若有遗忘以便查看。

 


 

简介
 
协议是指网络中两台计算机之间通信所需共同遵守的规定或规则。
 
HTTP协议,即超文本传输协议(Hypertext transfer protocol),是一种规定了客户端和服务端之间的数据传输格式的协议。
HTTP协议采用了请求/响应模型。
 

 

工作原理

  1. HTTP基于客户/服务器模式,且面向连接。
        典型的HTTP事务处理流程如下:
        (1)客户端与服务器建立连接;
        (2)客户端通过TCP套接字向服务器提出请求报文;
        (3)服务器接收请求,并根据请求返回相应的HTTP响应作为应答;
        (4)客户与服务器关闭连接;
        (5)客户端浏览器解析HTML内容。
 
  1. 客户端与服务器之间的一次性连接。
        HTTP连接是一种一次性连接,限制每次连接只处理一个请求,当服务器返回本次请求的应答后便立即关闭连接,下次请求再重新建立连接。这种一次性连接主要考虑到WWW服务器面向的是Internet中大量用户,且只能提供有限个连接,因此服务器不会让一个连接长时间处于等待状态,及时地释放连接可以大大提高服务器的执行效率。
 
  1. HTTP是一种无状态协议。
        即服务器不保留与客户端交互时的任何状态,减轻了服务器的记忆负担,能保持较快的响应速度。也就是说每次HTTP请求都是独立的,任意两个请求间没有必然联系。但在实际应用中,会通过引入Cookie和Session机制来关联请求。
 
  1. HTTP是一种面向对象的协议。
        允许传送任何类型的数据对象,它通过数据类型和长度来标识所传送的数据内容和大小,并允许对数据进行压缩传送。
 
 
  1. HTTP基于TCP协议
       HTTP协议的目的是规定客户端和服务端数据传输的格式和数据交互行为,负责数据传输的细节底层时基于TCP实现的。 客户端是在一个特定的TCP端口(默认端口号为80)上打开一个套接字。若服务器在该端口上监听连接,则该连接便建立起来,然后客户通过该连接发送一个包含请求方法的请求块。现在使用的版本当中是默认持久连接的,也就是多次HTTP请求使用一个TCP连接。
 
 

 

HTTP请求报文

请求报文由请求行、请求头、空行、请求体4个部分组成,报文中的数据都是使用ASCII编码,各个字段的长度不确定,请求报文结构如图所示:
 
 
请求报文样例:
POST /search HTTP/1.1 
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-silverlight, application/x-shockwave-flash, */* 
Referer: http://www.google.cn/ 
Accept-Language: zh-cn 
Accept-Encoding: gzip, deflate 
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld) 
Host: www.google.cn 
Connection: Keep-Alive 
Cookie: PREF=ID=80a06da87be9ae3c:U=f7167333e2c3b714:NW=1:TM=1261551909:LM=1261551917:S=ybYcq2wpfefs4V9g; NID=31=ojj8d-IygaEtSxLgaJmqSjVhCspkviJrB6omjamNrSm8lZhKy_yMfO2M4QMRKcH1g0iQv9u-2hfBW7bUFwVh7pGaRUb0RnHcJU37y- FxlRugatx63JLv7CWMD6UB_O_r 
 
hl=zh-CN&source=hp&q=domety

 

HTTP协议定义的8种请求方式
 
每种请求方式规定了客户端与服务端之间不同的信息交换方式,常用的请求方式为GET和POST。服务器将根据请求完成相应操作,并以应答块形式返回给客户,最后关闭连接。HTTP1.0中定义了3种请求方式:GET、POST和HEAD;HTTP1.1中新增了5种请求方式:PUT、DELETE、OPTIONS、TRACE和CONNECT方式。8种请求方式具体如下:
 
序号
方法
描述
1
GET
请求指定的页面信息,并返回实体主体
2
HEAD
类似GET请求,返回的响应中只获取报头信息,没有具体内容
3
POST
向指定资源提交数据进行处理请求(如提交表单或上传文件),数据包含在请求体中,,POST请求可能会导致新的资源的建立或已有资源的修改。
4
PUT
类似POST,从客户端向服务器传送的数据取代指定的文档的内容,并存储在服务器指定位置,要求客户端预先知道该位置;如POST是在服务器一个集合或文件夹上操作,而PUT时具体某一个资源上操作。
5
DELETE
请求服务器删除某资源。和PUT都具有破坏性,可能被防火墙拦截。
6
OPTIONS
获取服务器支持的HTTP请求方法,允许客户端查看服务器的性能,比如ajax跨域时的预检等。
7
TRACE
回显服务器收到的请求,主要用于测试或诊断。一般禁用,防止被恶意攻击或盗取信息
8
CONNECT
HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器,即将服务器作为跳板访问其他网页,然后将数据返回回来,连接成功后,就可以正常GET、POST了。
 
注意,方法名称是区分大小写的,当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Mothod Not Allowed);当服务器不认识或者不支持对应的请求方法时,应返回状态码501(Not Implemented)。
 
 

HTTP响应报文

响应报文由响应状态行、响应头、空行、响应体4部分组成,与请求报文的区别在于在第一行中用状态信息替换了请求信息,用状态码来说明所请求的资源情况,响应报文结构如下所示:
 
响应报文样例:
HTTP/1.1 200 OK 
Date: Mon, 23 May 2005 22:38:34 GMT 
Content-Type: text/html; charset=UTF-8 
Content-Encoding: UTF-8 
Content-Length: 138 
Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT 
Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux) 
ETag: "3f80f-1b6-3e1cb03b" 
Accept-Ranges: bytes 
Connection: close 
 
<html> 
    <head> 
        <title>An Example Page</title> 
    </head> 
    <body> Hello World, this is a very simple HTML document. </body> 
</html>

 

状态码:
 
1xx:信息
状态码
描述
100 Continue
服务器仅接收到部分请求,但是一旦服务器并没有拒绝该请求,客户端应该继续发送其余的请求
101 Switching Protocols
服务器转换协议:服务器将遵从客户的请求转换到另一种协议
 
2xx:成功
状态码
描述
200 OK
请求成功(其后是对GET和POST请求的应答文档)。
201 Created
请求被创建完成。同时新的资源被创建。
202 Accepted
供处理的请求已被接受,但是处理未完成。
203 Non-authoritative Information
文档已经正确地返回,但一些应答头可能不争气,因为使用的是文档的拷贝。
204 No Content
Response中包含一些Header和一个状态行,但不包括实体的主题内容(没有response body)
205 Reset Content
一个主要用于浏览器的代码,浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容
206 Partial Content
部分请求完成。客户发送了一个带有Range头的GET请求,服务器完成了它。
 
3xx:重定向 
状态码
描述
300 Multiple Choices
多重选择。链接列表,用户可选择某链接到达目的地,最多允许5个地址。
301 Moved Permanently
所请求的页面已经转移至新的url,Response中应该包含一个Location URL,说明资源现在所处的位置。
302 Found
所请求的页面已经临时转移至新的url,客户端会使用Location中给出的rul,重新发送新的请求
303 See Other
所请求的页面可在别的url下被找到。
304 Not Modified
自从上次请求后,请求的网页未修改过。客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只需要比指定日期更新的文档)。服务器告诉客户,已缓冲文档还能继续使用。
305 Use Proxy
客户请求的文档应该通过Location头所指明的代理服务器提取。若服务器返回此响应,表示请求者应使用代理
306 Unused
前一HTTP版本的特征码,目前已不再使用,但特征码依然被保留。
307 Temporary Redirect
被请求的页面已经临时移至新的url,类似302。
 
4xx:客户端错误
状态码
描述
400 Bad Request
服务器未能理解请求
401 Unauthorized
需要客户端对自己的认证
402 Payment Required
此代码尚无法使用
403 Forbidden
请求被服务器拒绝
404 Not Found
服务器无法找到被请求的页面
405 Method Not Allowed
请求中指定的方法不被允许
406 Not Acceptable
服务器生成的响应无法被客户端所接受
407 Proxy Authentication Required
用户必须首先使用代理服务器进行验证,这样请求才会被处理
408 Request Timeout
请求超出了服务器的等待时间,服务器返回该状态码并关闭连接
409 Conflict
由于冲突,请求无法被完成
410 Gone
服务器曾有该资源,现在被请求的页面不可用
 
5xx:服务器错误
状态码
描述
500 Internal Server Error
请求未完成,服务器遇到不可预知的情况
501 Not Implemented
请求未完成,服务器不支持所请求的功能(如客户端使用了服务器不支持的请求方式)
502 Bad Gateway
请求未完成,服务器从上游服务器收到一个无效的响应
503 Service Unavailable
请求未完成,服务器临时过载或宕机
504 Gateway Timeout
网关超时,与408类似
505 HTTP Version Not Supported
服务器不支持请求中指明的HTTP协议版本
 

 

HTTP协议发展

参考链接: 
https://baike.baidu.com/item/http/243074?fromtitle=HTTP%E5%8D%8F%E8%AE%AE&fromid=1276942&fr=aladdin
http://www.ruanyifeng.com/blog/2016/08/http.html
 
  1. HTTP 0.9 (1991年)
        0.9协议是一个交换信息的无序协议,仅仅限于文字,只能使用GET请求方法,可用该版本协议构建一个完全的静态页面。
 
  1. HTTP 1.0 (1996年)
        1.0版本协议奠定了HTTP协议的基础,该版本不仅可传输HTML文本页面,同时可以传输二进制文件(如图片、视频等),请求方法新增了POST和HEAD。请求消息和响应消息规定了一些完数据字段,如字符集、编码和状态响应码等。
 
  1. ​HTTP 1.1 (1997年)
        1.1版本相较1.0更加完善。1.0版本的请求时一次TCP连接,请求完成后关闭连接;而1.1版本默认不关闭TCP连接,也不用声明 Connection: keep-alive 字段,若需要关闭可指定Connection: close 字段。同时加入了管道机制,使在一个TCP连接内可发送多个HTTP请求,不用等待上一个请求结束后再发送。新增了PUT、PATCH、OPTIONS、DELETE等命令。增加了Host字段。
 
  1. ​HTTP 2  (2015年)
        完善上一版本功能,相较与1.1版本,2.0版本可进行多工处理。增加了头信息压缩和服务器的主动推送。
 
  1. ​HTTPS
        因为HTTP协议的数据传输时明文,不安全的,所以HTTPS即在HTTP协议上使用了SSL/TLS协议进行加密处理。
 

 
至此该篇随笔结束,若在后续学习过程中认识到新内容,需加以补充。
 

posted on 2019-08-27 22:42  CubicZ  阅读(176)  评论(0编辑  收藏  举报