前言:
学完了《图解HTTP协议》还是需要好好写一篇博客来着,不然又会忘了,等后面再用c语言或者c++写一个http服务器,这样可以好哈的加深一下印象,并且后面的校招面试里可以好好的说一下自己的项目了。
我的github:
github又快一个月没有更新过了,不过现在已经做了200题,按照一天3题的速度应该一个月可以做完第一遍吧。
https://github.com/YinWenAtBIT
一、HTTP返回状态码:
HTTP的状态码用来描述返回请求的结果,借助状态码,用户可以知道服务器对于请求的处理情况。
状态码在状态行中,首先是HTTP版本,其次是状态码,最后是原因,比如:
HTTP/1.1 200 OK
1.1:2xx成功:
2xx 代表请求被正常处理了。
200 OK,代表请求完成正常,一般是GET请求或者HEAD请求。
204 No Content,代表请求正常,但是没有需要的资源可以返回,也不允许返回资源。
206 Partial Content, 代表对部分资源的请求成功,服务器返回了部分资源。
1.2:3xx重定向:
301,Moved Permanently永久重定向,资源已经被分配了新的URI。新的URI保存在首部的Location中。302,Found, 临时性重定向,该状态码表示请求的资源已经被分配了新的URI,希望本次用户使用新的URI访问。302与301的不同在于资源只是临时性变动,以后可能还会在变动
303,See Other,该状态码表示请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源。303与302有相同的功能,但是303表示客户端应该使用GET方法获取资源。
304, Not Modified,304对应的请求是使用GET方法访问,并且首部带有If-Match等方法,请求的结果是没有满足条件的资源。该状态码和重定向无关。
307, Temporary Redirect,临时重定向,与302基本相同。
1.3:4xx客户端错误:
4XX的相应结果代表客户端是发生错误的原因所在。400 Bad Request,请求报文中含有语法错误。
401 Unauthorized,未认证,需要经过HTTP认证才可以处理该请求,如果之前已经进行过一次请求,则表示用户认证失败。
403 Forbidden, 该状态码表示对服务器资源你的请求被服务器拒绝了,但是没有给出拒绝的原因。,未授权访问等都可能导致403出现。
404 Not Found,该状态码表示服务器上无法找到请求的资源,除此之外,也可以是服务器拒绝请求并且不想说明理由。
1.4:5xx服务器错误:
500 Internal Server Error, 代表服务器端在处理请求是发生了错误,也有可能是Web端应用的Bug 出现了。503 Service Unavailable,该状态码表明服务器处于超负载或正在进行停机维护,现在无法处理需求。如果实现知道处理好问题的时间,可以写如Retry-After首部字段返回给客户端。
注意:不少返回的状态码是错误,但是用户可能察觉不到这一点,比如web程序内部错误,但是依旧返回200 OK。
二、HTTP与web服务器:
2.1:单台虚拟主机实现多个域名:
由于经过DNS协议解析,域名会变成ip地址,因此在HTTP请求的首部必须指明HOST字段,才可以完成此功能。
2.2:代理,网关,隧道:
1.代理转发客户的HTTP请求,有时会进行缓存,代理按照是否使用缓存,是否修改报文分类。2.网关,工作原理和代理相似,但是网关能使用非HTTP协议与真正的服务器通信。
3. 隧道,隧道可按照要求建立起一条与其他服务器通信的线路,届时使用SSL加密手段进行通信。隧道的目的是确保客户端能与服务器进行安全的通信。
三、HTTP报文首部:
3.1:首部字段:
首部字段由首部字段名和字段值构成,中间用冒号分割,并且每个字段名可以对应多个字段值。
3.2:通用首部字段:
1. Cache-Control:控制缓存的工作机制,缓存有效时间等等。其中no-cache代表不能缓存过期的资源,no-store代表不使用缓存。2. Connection:主要用于管理持久链接,指定Keep-Alive可以进行持久链接,指定close关闭。
3. Date, 表明创建HTTP报文的日期和时间。
4. Trailer,知名在报文主体之后记录了哪些字段。
5. Transfer-Encoding,规定了报文主体传输时所使用的编码方式,1.1版本仅对分块传输有效。
6. Upgrade, 用于检测HTTP协议及其他协议是否可以使用更高级的版本进行通信。
7. Via,用于追踪客户端与服务器之间的请求和相应报文的传输途径。
3.3:请求首部字段:
1. Accept,可以接收的媒体类型和优先级。2. Accept-Charset,接受的字符集
3. Accept-Encoding,接受的内容编码,例如gzip,compress,deflate等
4. Accept-Language,接受的自然语言集。
5. Authorization, 认证信息,在接收了401回复之后,会将认证信息保存在这个字段中发给服务器。
6. Expect,客户端期望服务器出现某种特定行为。
7. From,告知服务器使用用户代理的用户的电子邮件地址。
8. Host,告知服务器,客户请求的资源所处的互联网主机名和端口号。
9. If-Match,条件请求,服务器只有判定条件为真时,才会处理请求。
10. Range,请求该资源的部分指定字节。如果服务器成功处理,则返回206Partial Content,无法处理范围请求时,则返回200 OK,并且返回全部内容。
等等,不再一一列举。
3.4:响应首部字段:
1.Location, 将相应接收方引导至某个与请求URI位置不同的资源,一般会配合3XX的重定向。2. Server,返回服务器上所使用的HTTp服务器应用程序的信息。
3. WWW-Authenticate, 告知客户端使用特定的认证方案、
3.4:cookie相关字段:
1. Set-Cookie,当服务器准备开始管理客户端状态的时候,会实现告知各种消息,包括过期时间,路径,domain即可以使用的域名区域,secure(只有在https才可以发送cookie)2. Cookie,客户端想要获得HTTP状态管理时,就会在请求中包含从服务器接收到的Cookie,接收到多个cookie时,同样可使用多个cookie发送。