HTTP

http协议

2017-04-08  本文已影响31人  Allenware

[TOC]

Http Definition

HTTP(Hypertext Transfer Protocol)就是超文本传输协议,它是现代互联网最重要也是最基本的协议。Http协议是无状态的、应用层协议,它是web开发的基础。

URL

schema://login@host[:port#]/path/..../[?query-string][#anchor]

    /*
    scheme: 协议名(如http,https,ftp)
    login: 登陆信息
    host: 服务器IP/域名
    port#:HTTP服务的默认端口是80,这种情况下端口号可以省略。如果使用了别的端口,必须指明,例如http://www.cnblogs.com:8080
    path: 资源路径
    query-string: 发送给web服务器的数据
    anchor: 锚
    */
http://www.mywebsite.com/sj/test/test.aspx?name=sivergn&x=true#stuff

    /*
     schema: http
     host: www.mywebsite.com
     path: /sj/test/test.aspx
     Query String: name=sviergn&x=true
     Anchor: stuff
     */

URL的请求过程

  1. 当你在浏览器输入URLhttp://www.website.com的时候,浏览器发送一个Request去获取http://www.website.com的html。
  2. 服务器把Response发送回给浏览器。浏览器分析Response中的 HTML,发现其中引用了很多其他文件,比如图片,CSS文件,JS文件。
  3. 浏览器会自动再次发送Request去获取图片,CSS文件,或者JS文件。当所有的文件都下载成功后, 网页就被显示出来了。

Request Method

我们通过URL访问服务端获得资源,具体的操作由 http 协议的 request method 来定义。http/1.1 一共有八种操作:

上面四种是用的最多的四种Method,有时候,我们将 PUT 和 DELETE 看作是POST的特殊实现。

对于Method常见的错误码:

GET实例:

GET /test/?id=11101&name=Professional HTTP/1.1
Host: www.test.com
User-Agent: Mozilla/5.0 (Windows; U;) Firefox/1.0.1
Connection: Keep-Alive

POST实例:

POST / HTTP/1.1
Host: www.test.com 
User-Agent: Mozilla/5.0 (Windows; U) Firefox/1.0.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 40
Connection: Keep-Alive

name=Professional&id=11101

状态码

通过URL和Method,客户端就可以发送一个完整的请求给服务端。当然服务端也会做出响应。状态码就是非常重要的一种响应,客户端通过状态码就可以了解服务端做出何种响应。HTTP/1.1中定义了5类状态码, 状态码由三位数字组成,第一个数字定义了响应的类别:

常见的状态码

1xx:Informational Messages

这是 http/1.1 才支持的状态码,服务端可以发送一个 100-continue 告诉客户端继续发送消息,客户端如果已发送可以忽略。

2xx:成功

告诉 client 接收到 Request 并成功处理,最常见的是 200 OK

3xx:Redirection

这个状态代表客户端需要重定向到其他URL获取资源,新的URL在Response中,浏览器会自动向新的URL发起Request

4xx:Client Error

当客户端发出一个 bad request 或者请求无效资源时,server端会认为时client出错了。最常见的是 404 Not Found404 表示资源无效,在服务端上不存在。

5xx:Server Error

用于来表示server端出现了故障。最常见的是 500 Internal Server Error 服务器发生不可预期的错误。

Http消息结构

消息格式

http协议对 RequestResponse 两种消息定义了下面的格式:

message = <start-line>
      *(<message-header>)
      CRLF
      [<message-body>]

<start-line> = Request-Line | Status-Line
<message-header> = Field-Name ':' Field-Value

从上面定义我们可以看到,Http的Request和Response消息都是由三部分组成:

1. start-line 开始行 
2. header 消息头 
3. body 消息体

对于start-line,又分为:

1. Request-Line : 'METHOD/path-to-resource http-version'
2. Response-Line : 'http-version status-code message'

对于Headers则有如下几种:

1. general headers
2. entity headers
3. request or response headers
    a. request specific headers.
    b. response specific headers.

Request

GET http://www.google.com/  HTTP/1.1
Host:www.google.com

用表格来表示:

Request Line METHOD/path-to-resource HTTP/version-number
Request Header Field1 : Value
Request Header Field2 : Value
空行 空行
Request Body data(optional)

Response

Response Line HTTP/version-number status-code message
Response Header Field1 : Value
Response Header Field2 : Value
空行 空行
Response Body data(optional)

TIPs


Reference

  1. 云栖社区 Http协议详解
  2. HTTP协议详解
上一篇下一篇

猜你喜欢

热点阅读