http协议介绍

http协议介绍

http通常称为超文本传输协议。是互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。所以通常日常在浏览器访问网站的时候显示的内容一般都是遵从http协议生成的。

Http和TCP/IP协议

通常使用的网络是在TCP/IP协议族的基础上运作的。而HTTP属于它内部的一个子集。
TCP/IP 的分层管理,分层现在一般四层,分别为应用层,传输层,网络层,数据链路层。

1.应用层:应用层决定了向用户提供应用服务时通信的活动。
TCP/IP协议族内预存了各类通用的应用服务。比如FTP, DNS, HTTP协议也在这层。

2.传输层:传输层对上层应用层,提供处于为网络连接中的两台计算机之间的数据传输。
在传输层中有两个性质不同的协议:TCP、 UDP

3.网络层(网络互连层):网络层用来处理网络上流动的数据包。数据包是网络传输的最小数据单元。该层规定了通过怎样的路径到达对方计算,并把数据包传送给对方。

4.链路层:用来处理连接挖网络的硬件部分。包括控制操作系统、硬件的设备驱动、NIC(NetWork Interface Card , 网络适配器,即网卡),及光纤等物理可见部分。硬件的范畴均在链路层的作用范围内。
IMG_0142.PNG

http 请求过程

这是一次从浏览器输入网址后客户端到服务端的发生的事情。

IMG_0143.PNG

http 报文

http协议规定,请求从客户端发出,最后服务器端相应该请求并返回。

下面是一个简单http请求和相应例子:
1.发送请求(客户端) (请求报文)

    GET /index.html HTTP/1.1
    Host: www.1906s.com

GET 表示请求访问服务器的类型,称为方法(method)。 /index.html 指明了请求访问的服务器资源,也叫请求URI。
HTTP/1.1 Http的版本号,用来提示客户端使用的HTTP协议功能。

一般请求报文是由请求方法,请求URI,协议版本,可选的请求首部字段和内容实体构成。
如:

    方法      URI       协议版本
     |         |            |
    POST   /form/entry   HTTP/1.1
    ---------请求首部字段-----------
    Accept:text/html
    Accept-Language:zh-CN,zh
    Host:www.1906s.com
    Connection:keep-alive
    Cookie:a7748_times=2; OUTFOX_SEARCH_US........
    User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) Chrome/62.0.3202.94 Safari/537.36

    ---------内容实体-------------
    name=hello&age=37
  1. 服务器相应
    HTTP/1.1 200 OK
    Date: Sta, 17 Nov 2017 14:25:00 GMT
    Content-Length: 456
    ContentType: text/html

    <html>
    ...
    </html>

HTTP/1.1 表示服务器对应的HTTP版本。200 OK 表示请求的处理的结果的状态码和原因短语。Date ... 响应日期。
ContexntType: text/html 说明响应的内容是html格式资源。
<html> .... </html> 是响应的内容。

响应报文基本上有协议版本,状态码(表示请求成功或者失败的数字代码)、解释状态码的短语、可选的响应首部字段以及实体主体构成。
如:

    协议版本    状态码   状态码原因短语
       |          |                |
    HTTP/1.1     200              OK
    --------------响应首部---------------
    Date:Sat, 18 Nov 2017 07:06:01 GMT
    Content-Type:text/html
    Content-Length: 4569

    --------------响应的内容-------------
    <html>
    ......
    <html>

HTTP方法

http方法用来告知服务器意图
方法有一下几种:

GET方法
GET 根据请求的URI 来获取资源并返回。

    请求:
    GET /index.html HTTP/1.1
    Host: www.1906s.com

    响应:
    返回index.html的页面资源

POST方法
POST 方法用来传输实体的主体。
虽然用GET方法也可以但一般不用GET进行传输,而是用POST方法。POST的主要目的并是不是获取响应的主体的内容。

    请求:
    POST /index/get_book HTTP/1.1
    Host: www.1906s.com
    Content-Length: 1460

    响应:
    返回 /index/get_book 接收数据的处理结果

PUT方法
PUT 方法用来传输文件。就想FTP协议的文件上传一样,要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置。
但是,鉴于HTTP/1.1的PUT方法自身不带验证机制,任何人都可以上传,存在安全问题,因此一般的web网站不使用该方法。

    请求:
    PUT /test.html HTTP/1.1
    Host: www.1906s.com

    响应:
    返回状态码 204 NoContent

HEAD方法
HEAD 方法和GET方法一样但是不返回主体。用于确认URI的有效性及资源更新的日期时间等

    请求:
    HEAD /index.html HTTP/1.1
    Host: www.1906s.com

    响应:
    返回 index.html有关的响应首部

DELETE方法
DELETE 方法用来删除文件。
DELETE 和PUT 一样 在HTTP/1.1的PUT方法自身不带验证机制,存在安全问题,因此一般的web网站不使用该方法。

    请求:
    DELETE /test.html HTTP/1.1
    Host: www.1906s.com

    响应:
    返回状态码 204 NoContent (表示已删除)

OPTIONS方法
OPTIONS 方法用来查询针对请求URI的资源支持方法。

    请求:
    OPTIONS * HTTP/1.1
    Host: www.1906s.com

    响应:
    HTTP/1.1 200 OK
    Allow: GET,POST,HEAD.OPTIONS

TRACE方法
TRACE 方法是让WEB服务器端将之前的请求通信环回给客户端。

    请求:
    TRACE / HTTP/1.1
    Host: www.1906s.com
    Max-Frowards: 2

    响应:
    HTTP/1.1 200 OK
    Content-Type: message/http
    Content-Length:1024

    TRACE/HTTP/1.1
    Host:www.1906s.com
    Max-Forwards:2(返回响应包含请求内容)

CONNECT方法
CONNECT 方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL和TLS协议把通信内容加密后经网络隧道传输。

    请求:
    CONNECT proxy.1906s.com:7070 HTTP/1.1
    Host: proxy.1906s.com

    响应:
    HTTP/1.1 200 OK (之后进入隧道)

http 状态号

状态码的职责是当客户端端想服务端发送请求时,描述返回的请求结果。可以从状态码判断服务端对这次请求的处理情况。
以下是Http对应不同状态码对应的处理情况.

    1xx(临时响应)
    表示临时响应并需要请求者继续执行操作的状态代码。

    代码   说明
    100   (继续) 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。
    101   (切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换。

    2xx (成功)
    表示成功处理了请求的状态代码。

    代码   说明
    200   (成功)  服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。
    201   (已创建)  请求成功并且服务器创建了新的资源。
    202   (已接受)  服务器已接受请求,但尚未处理。
    203   (非授权信息)  服务器已成功处理了请求,但返回的信息可能来自另一来源。
    204   (无内容)  服务器成功处理了请求,但没有返回任何内容。
    205   (重置内容) 服务器成功处理了请求,但没有返回任何内容。
    206   (部分内容)  服务器成功处理了部分 GET 请求。

    3xx (重定向)
    表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。

    代码   说明
    300   (多种选择)  针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。
    301   (永久移动)  请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
    302   (临时移动)  服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
    303   (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。
    304   (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
    305   (使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。
    307   (临时重定向)  服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

    4xx(请求错误)
    这些状态代码表示请求可能出错,妨碍了服务器的处理。

    代码   说明
    400   (错误请求) 服务器不理解请求的语法。
    401   (未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。
    403   (禁止) 服务器拒绝请求。
    404   (未找到) 服务器找不到请求的网页。
    405   (方法禁用) 禁用请求中指定的方法。
    406   (不接受) 无法使用请求的内容特性响应请求的网页。
    407   (需要代理授权) 此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理。
    408   (请求超时)  服务器等候请求时发生超时。
    409   (冲突)  服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息。
    410   (已删除)  如果请求的资源已永久删除,服务器就会返回此响应。
    411   (需要有效长度) 服务器不接受不含有效内容长度标头字段的请求。
    412   (未满足前提条件) 服务器未满足请求者在请求中设置的其中一个前提条件。
    413   (请求实体过大) 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。
    414   (请求的 URI 过长) 请求的 URI(通常为网址)过长,服务器无法处理。
    415   (不支持的媒体类型) 请求的格式不受请求页面的支持。
    416   (请求范围不符合要求) 如果页面无法提供请求的范围,则服务器会返回此状态代码。
    417   (未满足期望值) 服务器未满足”期望”请求标头字段的要求。

    5xx(服务器错误)
    这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错。

    代码   说明
    500   (服务器内部错误)  服务器遇到错误,无法完成请求。
    501   (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。
    502   (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。
    503   (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。
    504   (网关超时)  服务器作为网关或代理,但是没有及时从上游服务器收到请求。
    505   (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。

http 首部字段

http首部分为 请求头部,响应头部,通用头部, 实体首部
通用首部字段:

    Cache-Control               通过指定首部字段Cache-Control的指令,就能操作缓存的工作机制。
    Connection                  控制不在转发给代理的首部字段;管理持久连接。
    Data                        表明创建HTTP报文的时间和日期。
    Pragma                      只用在客户端发送的请求中,所有的中间服务器不返回缓存的资源。
    Trailer                     事先说明报文主体后记录了哪些首部字段。同样可以用在分块传输编码时。
    Transfer-Encoding           规定了传输报文主体时采用的编码方式。
    Upgrade                     用于检测HTTP协议及其他协议是否可以使用更高的版本进行通信。
    Via                         为了追踪客户端与服务器之间的请求和响应报文的传输路径。
    Warning                     通常会告知用户一些与缓存相关的问题的警告。

请求首部字段:

    Accept                      该字段可通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级。
    Accept-Charset              用来通知服务器用户代理支持的字符集及字符集的相对优先顺序,可一次性指定多种字符集。
    Accept-Encoding             用来告知服务器用户代理支持的内容编码及内容编码的优先级顺序。
    Accept-Language             用来告知服务器用户代理嫩巩固处理的自然语言集(中文或英文等),以及自然语言集的相对优先级。
    Authorization               用来告知服务器,用户代理的认证信息。
    Expect                      客户端使用首部字段Except来告知服务器,期望出现的某种指定行为。
    From                        用来告知服务器使用用户代理的用户的电子邮件地址。
    Host                        告知服务器,请求的资源所处的互联网主机名和端口号。Host首部字段在HTTP/1.1规范内是唯一一个必须包含在请求内的首部字段。
    If-Match                    类似于If-xxx这样的请求首部,可以称为条件请求。
    If-Modified-Since           告知服务器若该字段值早于资源的更新时间,则希望能处理该请求。
    If-None-Match               该字段值得实体标记值与请求资源的ETag不一致时,它就告知服务器处理该请求。
    If-Range                    它告知服务器若指定的If-Range字段值和请求资源的ETag值或时间相一致时,则作为范围请求处理。反之则返回全体资源。
    If-Unmodified-Since         告知服务器,指定的请求资源只有在字段值内指定的日期时间之后,未发生更新的情况下,才能处理请求。
    Max-Forwards                通过TRACE方法或OPTIONS方法,发送包含首部字段Max-Forwards的请求时,该字段以十进制整数形式指定可经过的服务器最大数目。当服务器接收到Max-Forwards值为0的请求时,则不再进行转发,而是直接返回响应。
    Proxy-Authorization         客户端会发送包含首部字段Proxy-Authorization的请求,以告知服务器认证所需要的信息。
    Range                       告知服务器资源的指定范围。
    TE                          告知服务器客户端能够处理响应的传输编码方式及相对优先级。
    User-Agent                  将创建请求的浏览器用户代理名称等信息传达给服务器。

响应首部字段:

    Accept-Ranges               用来告知客户端服务器是否能够处理范围请求,以指定获取服务器端某个部分的资源。
    Age                         告知客户端,源服务器在多久前创建了响应。单位秒。
    ETag                        告知客户端实体标识,它是一种可将资源以字符串形式做唯一标识的方式。
    Location                    可以将响应接收方引导至某个与请求URI位置不同的资源。
    Proxy-Authenticate          把由代理服务器所要求的认证信息发送给客户端。
    Retry-After                 告知客户端应该在多久之后再次发送请求。
    Server                      告知客户端当前服务器上安装的HTTP服务器应用程序的信息。
    Vary                        可对缓存进行控制,源服务器回向代理服务器传达关于本地缓存使用方法的命令。
    WWW-Authenticate            用于HTTP访问认证。

实体首部字段:

    Allow                       用于通知客户端能够支持Request-URI指定资源的所有HTTP方法。
    Content-Encoding            告知客户端服务器对实体的主体部分选用的内容编码方式。(gzip/compress/deflate/identity)
    Content-Language            告知客户端,实体主体使用的自然语言。(中文或英文等语言)
    Content-Length              表明了实体主体部分的大小。
    Content-Location            给出与报文主体返回资源对应的URI。
    Content-MD5                 是一串由MD5算法生成的值,其目的在于检查报文主体在传输过程中是否保持完整,以及确认传输到达。
    Content-Range               针对范围请求,返回响应时使用的首部字段,能告知客户端作为相应返回的实体的哪个部分符合范围请求。
    Content-Type                说明了实体主体内对象的媒体类型,该字段用type/subtype形式赋值。
    Expires                     会将资源失效的日期告知客户端。
    Last-Modified               指明资源最终修改的时间。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,776评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,527评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,361评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,430评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,511评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,544评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,561评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,315评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,763评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,070评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,235评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,911评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,554评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,173评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,424评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,106评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,103评论 2 352

推荐阅读更多精彩内容