Http协议状态码
1**:信息类状态码,表示接受的请求正在处理
临时响应并需要请求者继续执行操作的状态代码
2**:成功状态码,表示请求正常处理完毕
3**:重定向,表示要完成请求,需要进一步操作。
4**:客户端错误,请求可能出错,妨碍了服务器的处理
5**:服务器端本身错误,
常见状态码:
200:请求被成功处理,请求所希望的响应头或者数据体将随此响应返回。
204:服务器成功处理请求,但不返回任何实体内容
206:服务器已经成功处理部分get请求,类似于迅雷讲一个大文件分解为多个下载段同时下载
301: 永久性重定向,可缓存
302:临时性重定向,可缓存
303: 对应当前请求的响应可以在另一个 URI 上被找到,而且客户端应当采用 GET 的方式访问那个资源。这个方法的存在主要是为了允许由脚本激活的POST请求输出重定向到一个新的资源。这个新的 URI 不是原始资源的替代引用。同时,303响应禁止被缓存。当然,第二个请求(重定向)可能被缓存。 新的 URI 应当在响应的 Location 域中返回。除非这是一个 HEAD 请求,否则响应的实体中应当包含指向新的 URI 的超链接及简短说明。 注意:许多 HTTP/1.1 版以前的浏览器不能正确理解303状态。如果需要考虑与这些浏览器之间的互动,302状态码应该可以胜任,因为大多数的浏览器处理302响应时的方式恰恰就是上述规范要求客户端处理303响应时应当做的。304: 如果客户端发送了一个带条件的 GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态码。304响应禁止包含消息体,因此始终以消息头后的第一个空行结尾。 该响应必须包含以下的头信息:Date,除非这个服务器没有时钟。假如没有时钟的服务器也遵守这些规则,那么代理服务器以及客户端可以自行将 Date 字段添加到接收到的响应头中去(正如RFC 2068中规定的一样),缓存机制将会正常工作。ETag 和/或 Content-Location,假如同样的请求本应返回200响应。Expires, Cache-Control,和/或Vary,假如其值可能与之前相同变量的其他响应对应的值不同的话。 假如本响应请求使用了强缓存验证,那么本次响应不应该包含其他实体头;否则(例如,某个带条件的 GET 请求使用了弱缓存验证),本次响应禁止包含其他实体头;这避免了缓存了的实体内容和更新了的实体头信息之间的不一致。 假如某个304响应指明了当前某个实体没有缓存,那么缓存系统必须忽视这个响应,并且重复发送不包含限制条件的请求。 假如接收到一个要求更新某个缓存条目的304响应,那么缓存系统必须更新整个条目以反映所有在响应中被更新的字段的值。307: 请求的资源现在临时从不同的URI 响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。只有在Cache-Control或Expires中进行了指定的情况下,这个响应才是可缓存的。 新的临时性的URI 应当在响应的 Location 域中返回。除非这是一个HEAD 请求,否则响应的实体中应当包含指向新的URI 的超链接及简短说明。因为部分浏览器不能识别307响应,因此需要添加上述必要信息以便用户能够理解并向新的 URI 发出访问请求。 如果这不是一个GET 或者 HEAD 请求,那么浏览器禁止自动进行重定向,除非得到用户的确认,因为请求的条件可能因此发生变化。
400:1.语义有误当前请求无法被服务器理解。除非进行修改,否则客户端不应该重复提交这个请求。2.参数错误
401: 当前请求需要用户验证。该响应必须包含一个适用于被请求资源的 WWW-Authenticate 信息头用以询问用户信息。客户端可以重复提交一个包含恰当的 Authorization 头信息的请求。如果当前请求已经包含了 Authorization 证书,那么401响应代表着服务器验证已经拒绝了那些证书。如果401响应包含了与前一个响应相同的身份验证询问,且浏览器已经至少尝试了一次验证,那么浏览器应当向用户展示响应中包含的实体信息,因为这个实体信息中可能包含了相关诊断信息。
403:服务器已经理解请求,但是拒绝执行
404:请求失败,请求所希望得到的资源未被在服务器上发现
500: 服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器的程序码出错时出现。
503:由于临时的服务器维护或者过载,服务器当前无法处理请求。这个状况是临时的,并且将在一段时间以后恢复。如果能够预计延迟时间,那么响应中可以包含一个 Retry-After 头用以标明这个延迟时间。如果没有给出这个 Retry-After 信息,那么客户端应当以处理500响应的方式处理它。
注意:503状态码的存在并不意味着服务器在过载的时候必须使用它。某些服务器只不过是希望拒绝客户端的连接
七层模型
物理层:建立,维护,断开物理连接
数据链路层:建立逻辑连接,进行硬件地址寻址,差错校验等功能
网络层:进行逻辑地址寻址,实现不同网络之间的路径选择
传输层:定义传输数据的协议端口号,以及流控和差错校验
协议有TCP UDP,数据包一旦离开网卡即进入网络传输层
TCP三次协议握手过程:
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入到SYN_SEND状态,等待服务器确认
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时也发送自己的一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
完成三次握手后,客户端和服务器开始传输数据
会话层:建立,管理,终止会话
表示层:数据的表示,安全,压缩
应用层:网络服务与最终用户的一个借口
协议有:HTTP,FTP,SMTP,DNS,TELNET,HTTPS,DHCP,POP3
HTTP协议工作特点
1. 基于B/S模式
2. 通信开销小,简单快捷
3. 使用灵活,可使用超文本传输协议
4. 节省传输时间
5. 无状态
HTTP工作原理:
客户端发送请求给服务器,创建一个TCP连接,指定端口号,默认为80,连接到服务器,服务器监听浏览器请求,一旦监听到客户端请求,分析请求类型后,服务器会向客户端返回状态信息和数据内容。
HTTP协议常见请求/响应头
HTTP消息头是在,客户端请求(Request)或服务器响应(Response)时传递的,位请求或响应的第一行,HTTP消息体(请求或响应的内容)是其后传输。HTTP消息头,以明文的字符串格式传送,是以冒号分隔的键/值对,如:Accept-Charset: utf-8,每一个消息头最后以回车符(CR)和换行符(LF)结尾。HTTP消息头结束后,会用一个空白的字段来标识,这样就会出现两个连续的CR-LF。
HTTP消息头由IANA(TheInternet Assigned Numbers Authority,互联网数字分配机构)来整理和维护。其标准最早来源于RFC 4229。IANA将其整理到了消息头文档,文档中还包括了一些新提出的信息头。
HTTP消息头支持自定义,自定义的专用消息头一般会添加'X-'前缀。
Content-Type: 请求体的MIME类型(用于POST和PUT请求中)
Content-Type: text/html
Accept: 可接受的响应内容类型(Content-Types)。
Accept :text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Origin: 发起一个针对跨域资源共享的请求(该请求要求服务器在响应中加入一个Access-Control-Allow-Origin
的消息头,表示访问控制所允许的来源)。
Cookie:由之前服务器通过Set-Cookie设置的一个HTTP协议Cookie
Cookie: imooc_uuid=bb2a340b-b607-430c-8e71-bdbba95dd952;imooc_isnew_ct=1522329071; loginstate=1; apsid=Y0MzRjMTJhYzVmYTA1MzVmYmI0Yzg0ZDk3OGY1YzYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzQ4MDEyNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyNDI2NjA5NzUwQHFxLmNvbQAAAAAAAAAAAAAAAAAAADYyNTkxODhlYzk3YTE2NjA0MmI4NGI2Zjc4OTA1ODU2Kea8WinmvFo%3DNm;imooc_isnew=2; PHPSESSID=39ha704aek7ha4ui7vgudjejt4; IMCDNS=0;Hm_lvt_f0cfcccd7b1393990c78efdeebff3968=1522329079,1522329219,1522462327,1524710000;Hm_lpvt_f0cfcccd7b1393990c78efdeebff3968=1524710739; cvde=5ae13a614592b-11
Cache-Control:用来指定当前的请求/回复中的,是否使用缓存机制。
Cache-Control: max-age=0
User-Agent: 浏览器的身份标识字符串
User-Agent: Mozilla/5.0 (WindowsNT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3381.1Safari/537.36
Referrer: 表示浏览器所访问的前一个页面,可以认为是之前访问页面的链接将浏览器带到了当前页面。Referer其实是Referrer这个单词,但RFC制作标准时给拼错了,后来也就将错就错使用Referer了
Referer: https://www.imooc.com/
X-Forwarded-FOR:建成XFF头,它代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项, 在代理转发及反向代理中经常使用X-Forwarded-For 字段
X-Forwarded-For: client1, proxy1, proxy2。
Access-Control-Allow-Origin:指定哪些网站可以跨域源资源共享
Access-Control-Allow-Origin: *
Last-Modified:所请求的对象的最后修改日期
Last-Modified: Dec, 26 Dec 2015 17:30:00 GMT
HTTP协议请求方法
GET,POST,HEAD,OPTIONS,DELETE,PUT,TRACE
HTTP协议的GET和POST请求方法的区别
HTTPS工作原理
HTTPS是一种基于SSL/TLS的HTTP协议,所有的HTTP数据都是在SSL/TLS协议封装之上传输的。
HTTPS协议在HTTP协议的基础上,添加了SSL/TLS握手和数据加密传输,也属于应用层协议。
常见网络协议含义及端口
FTP:文件传输协议 21
Telnet:远程登录协议 23
SMTP:简单邮件传输协议 25
POP3:邮局协议第三版 110
HTTP:超文本传输协议 80
DNS:域名系统协议 53