请求头字段
如图所示:
Host:主机和端口号。
Connection:客户端和服务器链接的类型
1. http1.1使用的keep-alive为默认值,即长连接。而不是短连接。
2. 服务器收到请求后:
1. 服务器支持keep-alive, 会回复一个包含 Connection:keep-alive 的响应,不关闭连接;
2. 如果 Server 不支持 keep-alive,回复一个包含 Connection:close 的响应,关闭连接。
3. 如果client收到包含 Connection:keep-alive 的响应,向同一个连接发送下一个请求,直到一方主动关闭连接。
keep-alive在很多的情况之下是能够重新连接,减少资源的消耗,缩短响应的时间。
User-Agent (浏览器名称)
Accept (传输文件类型)
Accept: /:表示什么都可以接收。
Accept:image/gif:表明客户端希望接受GIF图像格式的资源;
Accept:text/html:表明客户端希望接受html文本。
Accept: text/html, application/xhtml+xml;q=0.9, image/;q=0.8:表示浏览器支持的 MIME 类型分别是 html文本、xhtml和xml文档、所有的图像格式资源。
**q是权重系数,范围 0 =< q <= 1,q 值越大,请求越倾向于获得其“;”之前的类型表示的内容。若没有指定q值,则默认为1,按从左到右排序顺序;若被赋值为0,则用于表示浏览器不接受此内容类型。***
详情查看这里
Accept-Encoding(文件编解码格式)
指浏览器可接受的编码方式。编码方式不同于文件的格式,为了压缩文件并加速传递的速度。
例如:
Accept-Encoding:gzip;q=1.0, identity; q=0.5, *;q=0
Accept-Language(语言种类)
浏览器可接受的语言种类,en或者zh。
Accept-Charset(字符编码)
浏览器可接受的字符编码。
Cookie (Cookie)
浏览器用这个属性向服务器发送cookie,cookie是浏览器中存在一个小型数据体,记载和服务器相关的用户信息,实现会话的功能。
Content-Type (POST数据类型)
post请求里面表示发送内容的类型。
举例:Content-Type = Text/XML; charset=gb2312
响应报头
理论上所有的响应头信息都应该是回应请求头的。但是服务端为了效率,安全,还有其他方面的考虑,会添加相对应的响应头信息,从上图可以看到:
Cache-Control:must-revalidate, no-cache, private。
这个值告诉客户端,服务端不希望客户端缓存资源,在下次请求资源时,必须要从新请求服务器,不能从缓存副本中获取资源。
Cache-Control是响应头中很重要的信息,当客户端请求头中包含Cache-Control:max-age=0请求,明确表示不会缓存服务器资源时,Cache-Control作为作为回应信息,通常会返回no-cache,意思就是说,”那就不缓存呗”。
当客户端在请求头中没有包含Cache-Control时,服务端往往会定,不同的资源不同的缓存策略,比如说oschina在缓存图片资源的策略就是Cache-Control:max-age=86400,这个意思是,从当前时间开始,在86400秒的时间内,客户端可以直接从缓存副本中读取资源,而不需要向服务器请求。
Connection:keep-alive
这个字段作为回应客户端的Connection:keep-alive,告诉客户端服务器的tcp连接也是一个长连接,客户端可以继续使用这个tcp连接发送http请求。
Content-Encoding:gzip
告诉客户端,服务端发送的资源是采用gzip编码的,客户端看到这个信息后,应该采用gzip对资源进行解码。
Content-Type:text/html;charset=UTF-8
告诉客户端,资源文件的类型,还有字符编码,客户端通过utf-8对资源进行解码,然后对资源进行html解析。通常我们会看到有些网站是乱码的,往往就是服务器端没有返回正确的编码。
Date:Sun, 21 Sep 2016 06:18:21 GMT
这个是服务端发送资源时的服务器时间,GMT是格林尼治所在地的标准时间。http协议中发送的时间都是GMT的,这主要是解决在互联网上,不同时区在相互请求资源的时候,时间混乱问题。
Expires:Sun, 1 Jan 2000 01:00:00 GMT
这个响应头也是跟缓存有关的,告诉客户端在这个时间前,可以直接访问缓存副本,很显然这个值会存在问题,因为客户端和服务器的时间不一定会都是相同的,如果时间不同就会导致问题。所以这个响应头是没有Cache-Control:max-age=*这个响应头准确的,因为max-age=date中的date是个相对时间,不仅更好理解,也更准确。
Pragma:no-cache
这个含义与Cache-Control等同。
Server:Tengine/1.4.6
这个是服务器和相对应的版本,只是告诉客户端服务器的信息。
Transfer-Encoding:chunked
这个响应头告诉客户端,服务器发送的资源的方式是分块发送的。一般分块发送的资源都是服务器动态生成的,在发送时还不知道发送资源的大小,所以采用分块发送,每一块都是独立的,独立的块都能标示自己的长度,最后一块是0长度的,当客户端读到这个0长度的块时,就可以确定资源已经传输完了。
Vary: Accept-Encoding
告诉缓存服务器,缓存压缩文件和非压缩文件两个版本,现在这个字段用处并不大,因为现在的浏览器都是支持压缩的。
浏览器作用
- 构造数据包,包含请求头和消息体。 请求头包含了本地的路由器的MAC地址和所要请求的服务器IP地址。消息体包含了所要请求的内容。
- 渲染获取的数据,图像,声音,视频,文字等。
- 浏览器本身就是代码,而这个代码是可以进行分解为组件,可以重写以及重用。
urllib库
urllib 以及 urllib 都是python的标准库。 py2中使用的是 urllib2,但是在py3中,urllib2改名为 urllib(即原来的urllib2)。被分成了一些子模块,例如: urllib.request, urllib.parse, urllib.error等等。#### 常用状态码
1xx: 临时响应,表示服务器已经接受部分的请求,要求客户端继续提交其余的请求信息才能完成整个的处理过程。
100:Continue(继续) 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。
101:Switching Protocols(切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换。
2xx:请求成功
200:OK,服务器已经处理请求。
201:请求成功,并且服务器已经创建资源。
202:接受请求,但是还未处理请求。
203 Non-Authoritative Information(非授权信息) 服务器已成功处理了请求,但返回的信息可能来自另一来源。
204 No Content(无内容) 服务器成功处理了请求,但没有返回任何内容。
205 Reset Content(重置内容) 服务器成功处理了请求,但没有返回任何内容。
206 Partial Content(部分内容) 服务器成功处理了部分 GET 请求。
3xx: 重定向
300 Multiple Choices(多种选择) 针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。
301 Moved Permanently(永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
302 Found(临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
303 See Other(查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。
304:未修改,使用是缓存的内容。
305 Use Proxy(使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。
307 Temporary Redirect(临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
4XX:表示请求错误,服务器无法处理。
400:请求错误。
401:需要授权的信息才能处理请求。
403: 禁止访问。
404: 找不到页面。
405: 禁用所请求所用的方法。
406: 不接受请求。无法使用请求的内容特性响应页面。
407:需要代理授权。 和401类似,但是指定请求者应当授权使用代理。
408: 请求超时。
409 Conflict(冲突) 服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息。
410 Gone(已删除) 如果请求的资源已永久删除,服务器就会返回此响应。
411 Length Required(需要有效长度) 服务器不接受不含有效内容长度标头字段的请求。
412 Precondition Failed(未满足前提条件) 服务器未满足请求者在请求中设置的其中一个前提条件。
413 Request Entity Too Large(请求实体过大) 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。
414 Request-URI Too Long(请求的 URI 过长) 请求的 URI(通常为网址)过长,服务器无法处理。
415 Unsupported Media Type(不支持的媒体类型) 请求的格式不受请求页面的支持。
416 Requested Range Not Satisfiable(请求范围不符合要求) 如果页面无法提供请求的范围,则服务器会返回此状态代码。
417 Expectation Failed(未满足期望值) 服务器未满足”期望”请求标头字段的要求。
5XX:服务器错误,而不是请求的错误。
500: 服务器内部错误,无法完成请求。
501:服务器不具备完成请求的功能, 例如,服务器无法识别请求的方法会返回这样的代码。 、
502: 错误网关,服务器作为网关或者代理,从上游的服务器收到的无效的响应。
503: 服务器当前不可用,例如超载或者停机维护。通常只是暂时的状态。
504: 网关超时,服务器作为网关或者代理,没有从上游的服务器获取到请求。
505: 服务器不支持http版本。