@Sakura-W
2016-10-03T02:56:51.000000Z
字数 1706
阅读 1326
网络
HTTP(The Hypertext Protocol),即超文本传输协议,是一个用于分布式、协作和超媒体信息系统的应用协议,是WWW数据通信的基础。
设计HTTP最初的目的是提供一种发布和接收HTML页面的方法。通过HTTP或者HTTPS协议请求的资源由统一资源定位符来标识。
通常,由HTTP客户端(Web浏览器、网络爬虫等)发起一个请求,创建一个到服务器指定端口(默认为80端口)的TCP连接。HTTP服务器则在那个端口监听客户端的请求,一旦收到请求,服务器会向客户端返回一个状态,比如HTTP/1.1 200 OK
,以及返回的内容(如请求的文件、错误消息或者其他信息)。
HTTP是一个无状态的协议,即协议对于事物处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传。这样可能导致每次连接传送的数据量增大,当然也在服务器不需要先前信息时,它的应答就比较快。(保持HTTP连接状态的技术:Cookie、Session(会话))
客户端与服务器通过request/response
对进行信息传递,客户端发送一个请求信息,然后从服务器收到相应的响应信息。
如上图,请求信息通常一个是URLs
以上是常用的请求方法。
服务器在收到请求后,会向客户端发送响应,响应包括状态码和数据。
1XX表示:请求已被服务器接收,告诉客户端继续发送剩下的请求部分。
2XX表示:请求已被服务器接收成功。常用的是200 OK,表示请求被成功接收、理解并接受。
3XX表示:重定向,要求客户端采用额外的方法。常见的是304,表示该资源没有被修改过,客户端可以使用缓存中的数据。
4XX表示:客户端错误。可能是请求一个无效资源或者发送一个错误请求,常用的是404 NOT Found,表示页面不存在。
5XX表示:服务器错误。常见的是500 Internal Server Error。
信息内容
message = <start-line>
*(<message-header>)
CRLF(强制换行)
[<message-body>]
<start-line> = Request-Line | Status-Line
<message-header> = Field-Name ":" Field-Value
请求头通常有:general headers
、request headers
、response headers
、entity headers
这几种。
信息主体包括完整的数据信息或者一块一块的信息。
General Headers
请求和响应信息通常都有General headers
Entity Headers
Entity headers
包含数据主体的元信息:
Request Format
格式如下:
Request-Line = Method SP URI SP HTTP-Version CRLF//SP表示空格
Requst-header = ...
一个例子:
Response Format
格式如下:
Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF//Reason-Phrase是Status-Code的自然语言解释
Response-header = ...
一个例子: