http协议简单介绍

时间:2021-10-03 05:05:37

http协议简单介绍

php主要是用来做web编程,跟http协议密切相关,当然得熟悉http协议

http协议的例子

可以看我抓取的而百度的包

请求报文,

包括请求头,请求实体
GET / HTTP/1.1
Host: www.baidu.com:443
Accept-Encoding: gzip, deflate, sdch, br
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36

响应报文

响应头,响应实体
HTTP/1.1 200 OK
BDPAGETYPE: 2
BDQID: 0xe42dcf0000045e003
BDUSERID: 1571488541
Cache-Control: private
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html;charset=utf-8
Date: Wed, 26 Oct 2016 03:30:15 GMT
Expires: Wed, 26 Oct 2016 03:30:15 GMT
Server: bfe/1.0.8.18
Set-Cookie: H_PS_PSSID=1469_20792_21115_18559_17001_20882_21406_21377_21192; path=/; domain=.baidu.com
Set-Cookie: __bsi=12031928091008280768_00_4_R_N_118_0303_C02F_N_I_I_0; expires=Wed, 26-Oct-16 03:30:20 GMT; domain=www.baidu.com; path=/
Set-Cookie: BD_HOME=1; path=/
Set-Cookie: BDSVRTM=114; path=/
Strict-Transport-Security: max-age=604800
Transfer-Encoding: chunked
X-UA-Compatible: IE=Edge,chrome=1

http协议的定义

http协议是一个请求响应的协议。

http协议的架构

HTTP是一个客户端和服务器端请求和应答的标准(TCP)。客户端是终端用户,服务器端是网站。通过使用Web浏览器、网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求。HTTP只假定(其下层协议提供)可靠的传输,任何能够提供这种保证的协议都可以被其使用。

http协议的结构

HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URL、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,响应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容。

常用的请求头方法

1   GET 请求指定的页面信息,并返回实体主体。
2   HEAD    类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
3   POST    向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
4   PUT 从客户端向服务器传送的数据取代指定的文档的内容。
5   DELETE  请求服务器删除指定的页面。
6   CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
7   OPTIONS 允许客户端查看服务器的性能。
8   TRACE   回显服务器收到的请求,主要用于测试或诊断。
9   PATCH   实体中包含一个表,表中说明与该URI所表示的原内容的区别。
10  MOVE    请求服务器将指定的页面移至另一个网络地址。
11  COPY    请求服务器将指定的页面拷贝至另一个网络地址。
12  LINK    请求服务器建立链接关系。
13  UNLINK  断开链接关系。
14  WRAPPED 允许客户端发送经过封装的请求。
15  Extension-mothed    在不改动协议的前提下,可增加另外的方法。    

常用的请求头域

Accept  指定客户端能够接收的内容类型  Accept: text/plain, text/html
Accept-Charset  浏览器可以接受的字符编码集。 Accept-Charset: iso-8859-5

Accept-Encoding 指定浏览器可以支持的web服务器返回内容压缩编码类型。Accept-Encoding: compress, gzip

Accept-Language 浏览器可接受的语言   Accept-Language: en,zh
Accept-Ranges   可以请求网页实体的一个或者多个子范围字段Accept-Ranges: bytes
Authorization   HTTP授权的授权证书 Authorization: BasicQWxhZGRpbjpvcGVuIHNlc2FtZQ==

Cache-Control   指定请求和响应遵循的缓存机制Cache-Control: no-cache

Connection  表示是否需要持久连接。(HTTP 1.1默认进行持久连接)Connection: close

    Cookie  HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。 Cookie: $Version=1; Skin=new;

Content-Length  请求的内容长度 Content-Length: 348

Content-Type    请求的与实体对应的MIME信息 Content-Type: application/x-www-form-urlencoded

Date    请求发送的日期和时间  Date: Tue, 15 Nov 2010 08:12:31 GMT

Expect  请求的特定的服务器行为 Expect: 100-continue

From    发出请求的用户的Email   From: user@email.com

Host    指定请求的服务器的域名和端口号 Host: www.zcmhi.com

If-Match    只有请求内容与实体相匹配才有效 If-Match: “737060cd8c284d8af7ad3082f209582d”

If-Modified-Since   如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回304代码 If-Modified-Since: Sat, 29 Oct 2010 19:43:31 GMT

If-None-Match   如果内容未改变返回304代码,参数为服务器先前发送的Etag,与服务器回应的Etag比较判断是否改变  If-None-Match: “737060cd8c284d8af7ad3082f209582d”

If-Range    如果实体未改变,服务器发送客户端丢失的部分,否则发送整个实体。参数也为Etag 
If-Range: “737060cd8c284d8af7ad3082f209582d”

If-Unmodified-Since 只在实体在指定时间之后未被修改才请求成功    
If-Unmodified-Since: Sat, 29 Oct 2010 19:43:31 GMT

Max-Forwards    限制信息通过代理和网关传送的时间    Max-Forwards: 10

Pragma  用来包含实现特定的指令 Pragma: no-cache

Proxy-Authorization 连接到代理的授权证书Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

Range   只请求实体的一部分,指定范围  Range: bytes=500-999

Referer 先前网页的地址,当前请求网页紧随其后,即来路      Referer: http://www.zcmhi.com/archives/71.html

TE  客户端愿意接受的传输编码,并通知服务器接受接受尾加头信息        TE: trailers,deflate;q=0.5

Upgrade 向服务器指定某种传输协议以便服务器进行转换(如果支持)     Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11

User-Agent  User-Agent的内容包含发出请求的用户信息        User-Agent: Mozilla/5.0 (Linux; X11)
Via 通知中间网关或代理服务器地址,通信协议 Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)
Warning 关于消息实体的警告信息 Warn: 199 Miscellaneous warning

常用的响应头域

Accept-Ranges   表明服务器是否支持指定范围请求及哪种类型的分段请求       Accept-Ranges: bytes

Age 从原始服务器到代理缓存形成的估算时间(以秒计,非负)      Age: 12

Allow   对某网络资源的有效的请求行为,不允许则返回405        Allow: GET, HEAD

Cache-Control   告诉所有的缓存机制是否可以缓存及哪种类型        Cache-Control: no-cache

Content-Encoding    web服务器支持的返回内容压缩编码类型。        Content-Encoding: gzip

Content-Language    响应体的语言  Content-Language: en,zh
    Content-Length  响应体的长度  Content-Length: 348

Content-Location    请求资源可替代的备用的另一地址     Content-Location: /index.htm

Content-MD5 返回资源的MD5校验值 Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ==

Content-Range   在整个返回体中本部分的字节位置     Content-Range: bytes 21010-47021/47022

Content-Type    返回内容的MIME类型 Content-Type: text/html; charset=utf-8

Date    原始服务器消息发出的时间    Date: Tue, 15 Nov 2010 08:12:31 GMT

ETag    请求变量的实体标签的当前值   ETag: “737060cd8c284d8af7ad3082f209582d”

Expires 响应过期的日期和时间  Expires: Thu, 01 Dec 2010 16:00:00 GMT

Last-Modified   请求资源的最后修改时间 Last-Modified: Tue, 15 Nov 2010 12:45:26 GMT

Location    用来重定向接收方到非请求URL的位置来完成请求或标识新的资源      Location: http://www.zcmhi.com/archives/94.html

Pragma  包括实现特定的指令,它可应用到响应链上的任何接收方       Pragma: no-cache

Proxy-Authenticate  它指出认证方案和可应用到代理的该URL上的参数     Proxy-Authenticate: Basic

refresh 应用于重定向或一个新的资源被创造,在5秒之后重定向(由网景提出,被大部分浏览器支持)  
Refresh: 5; url=http://www.zcmhi.com/archives/94.html

Retry-After 如果实体暂时不可取,通知客户端在指定时间之后再次尝试      Retry-After: 120

Server  web服务器软件名称  Server: Apache/1.3.27 (Unix) (Red-Hat/Linux)

Set-Cookie  设置Http Cookie   Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1

Trailer 指出头域在分块传输编码的尾部存在        Trailer: Max-Forwards

Transfer-Encoding   文件传输编码  Transfer-Encoding:chunked
    Vary    告诉下游代理是使用缓存响应还是从原始服务器请求     Vary: *
    Via 告知代理客户端响应是通过哪里发送的   Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)

Warning 警告实体可能存在的问题 Warning: 199 Miscellaneous warning

WWW-Authenticate    表明客户端请求实体应该使用的授权方案      WWW-Authenticate: Basic

http的状态信息

1xx:信息

100 Continue
服务器仅接收到部分请求,但是一旦服务器并没有拒绝该请求,客户端应该继续发送其余的请求。
101 Switching Protocols
服务器转换协议:服务器将遵从客户的请求转换到另外一种协议。

2xx:成功

200 OK
请求成功(其后是对GET和POST请求的应答文档。)
201 Created
请求被创建完成,同时新的资源被创建。
202 Accepted
供处理的请求已被接受,但是处理未完成。
203 Non-authoritative Information
文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝。
204 No Content
没有新文档。浏览器应该继续显示原来的文档。如果用户定期地刷新页面,而Servlet可以确定用户文档足够新,这个状态代码是很有用的。
205 Reset Content
没有新文档。但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容。
206 Partial Content
客户发送了一个带有Range头的GET请求,服务器完成了它。

3xx:重定向

300 Multiple Choices
多重选择。链接列表。用户可以选择某链接到达目的地。最多允许五个地址。
301 Moved Permanently
所请求的页面已经转移至新的url。
302 Found
所请求的页面已经临时转移至新的url。
303 See Other
所请求的页面可在别的url下被找到。
304 Not Modified
未按预期修改文档。客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。
305 Use Proxy
客户请求的文档应该通过Location头所指明的代理服务器提取。
306 Unused
此代码被用于前一版本。目前已不再使用,但是代码依然被保留。
307 Temporary Redirect
被请求的页面已经临时移至新的url。

4xx:客户端错误

400 Bad Request
服务器未能理解请求。
401 Unauthorized
被请求的页面需要用户名和密码。
401.1
登录失败。
401.2
服务器配置导致登录失败。
401.3
由于 ACL 对资源的限制而未获得授权。
401.4
筛选器授权失败。
401.5
ISAPI/CGI 应用程序授权失败。
401.7
访问被 Web 服务器上的 URL 授权策略拒绝。这个错误代码为 IIS 6.0 所专用。
402 Payment Required
此代码尚无法使用。
403 Forbidden
对被请求页面的访问被禁止。
403.1
执行访问被禁止。
403.2
读访问被禁止。
403.3
写访问被禁止。
403.4
要求 SSL。
403.5
要求 SSL 128。
403.6
IP 地址被拒绝。
403.7
要求客户端证书。
403.8
站点访问被拒绝。
403.9
用户数过多。
403.10
配置无效。
403.11
密码更改。
403.12
拒绝访问映射表。
403.13
客户端证书被吊销。
403.14
拒绝目录列表。
403.15
超出客户端访问许可。
403.16
客户端证书不受信任或无效。
403.17
客户端证书已过期或尚未生效。
403.18
在当前的应用程序池中不能执行所请求的 URL。这个错误代码为 IIS 6.0 所专用。
403.19
不能为这个应用程序池中的客户端执行 CGI。这个错误代码为 IIS 6.0 所专用。
403.20
Passport 登录失败。这个错误代码为 IIS 6.0 所专用。
404 Not Found
服务器无法找到被请求的页面。
404.0
(无)–没有找到文件或目录。
404.1
无法在所请求的端口*问 Web 站点。
404.2
Web 服务扩展锁定策略阻止本请求。
404.3
MIME 映射策略阻止本请求。
405 Method Not Allowed
请求中指定的方法不被允许。
406 Not Acceptable
服务器生成的响应无法被客户端所接受。
407 Proxy Authentication Required
用户必须首先使用代理服务器进行验证,这样请求才会被处理。
408 Request Timeout
请求超出了服务器的等待时间。
409 Conflict
由于冲突,请求无法被完成。
410 Gone
被请求的页面不可用。
411 Length Required
"Content-Length" 未被定义。如果无此内容,服务器不会接受请求。
412 Precondition Failed
请求中的前提条件被服务器评估为失败。
413 Request Entity Too Large
由于所请求的实体的太大,服务器不会接受请求。
414 Request-url Too Long
由于url太长,服务器不会接受请求。当post请求被转换为带有很长的查询信息的get请求时,就会发生这种情况。
415 Unsupported Media Type
由于媒介类型不被支持,服务器不会接受请求。
416 Requested Range Not Satisfiable
服务器不能满足客户在请求中指定的Range头。
417 Expectation Failed
执行失败。
423
锁定的错误。

5xx:服务器错误

500 Internal Server Error
请求未完成。服务器遇到不可预知的情况。
500.12
应用程序正忙于在 Web 服务器上重新启动。
500.13
Web 服务器太忙。
500.15
不允许直接请求 Global.asa。
500.16
UNC 授权凭据不正确。这个错误代码为 IIS 6.0 所专用。
500.18
URL 授权存储不能打开。这个错误代码为 IIS 6.0 所专用。
500.100
内部 ASP 错误。
501 Not Implemented
请求未完成。服务器不支持所请求的功能。
502 Bad Gateway
请求未完成。服务器从上游服务器收到一个无效的响应。
502.1
CGI 应用程序超时。 ·
502.2
CGI 应用程序出错。
503 Service Unavailable
请求未完成。服务器临时过载或当机。
504 Gateway Timeout
网关超时。
505 HTTP Version Not Supported
服务器不支持请求中指明的HTTP协议版本

参考网址:
百度百科地址

****博客1
书籍 图解http协议

spdy协议

SPDY协议是Google提出的基于传输控制协议(TCP)的应用层协议,通过压缩、多路复用和优先级来缩短加载时间。该协议是一种更加快速的内容传输协议。SPDY并不是一种用于替代HTTP的协议,而是对HTTP协议的增强。新协议的功能包括数据流的多路复用、请求优先级,以及HTTP包头压缩。