HTTP基本原理
URI和URL
HTTP与HTTPS
HTTP请求过程
请求,由客户端向服务端发出,可以分为四部分内容:请求方法(Request Method)、请求的网址(Request URL)、请求头(Request Headers)、请求体(Request Body)。
请求方法:
方法 | 描述 |
---|---|
GET | 请求页面,并返回页面内容; |
HEAD | 类似于GET请求,只不过返回的响应中没有具体的内容,用于获取报头; |
PUT | 大多用于提交表单或上传文件,数据包含在请求体中; |
DELETE | 从客户端向服务器传送的数据取代指定文档中的内容; |
CONNECT | 请求服务器删除指定的页面; |
OPTIONS | 允许客户端查看服务器的性能; |
TRACE | 回显服务器收到的请求,主要用于测试或诊断; |
请求的网址
请求的网址,即统一资源定位符URL,它可以唯一确定我们想请求的资源。
请求头
请求头,用来说明服务器要使用的附加信息。
- 常见的头信息
头信息 | 描述 |
---|---|
Accept | 请求报头域,用于指定客户端可接受哪些类型的信息; |
Accept-Language | 指定客户端可接受的语言类型; |
Accept-Encoding | 指定客户端可接受的内容编码; |
Host | 用于指定请求资源的主机IP和端口号,其内容为请求URL的原始服务器或网关的位置。从HTTP1.1版本开始,请求必须包含此内容; |
Cookie | 也常用复数形式Cookies,这是网站为了辨别用户进行会话跟踪而存储在用户本地的数据。它的主要功能是维持当前会话。 |
Referer | 此内容用来标识这个请求是从哪个页面发过来的,服务器可以拿到这一信息并做相应的处理,如做来源统计、防盗链处理等。 |
User-Agent | 简称UA,它是一个特殊的字符串头,可以使服务器识别客户使用的操作系统及版本、浏览器及版本等信息。在做爬虫时,加上此信息,可以伪装成浏览器。 |
Content-Type | 也叫互联网媒体类型(Internet Media Type)或者MIME类型,在HTTP协议消息头中,它用来表示具体请求中的媒体类型信息。 |
请求体
请求体一般承载的内容是POST请求中的表单数据,而对于GET请求,请求体则为空。
响应
响应,由服务端返回给客户端,可以分为三部分:响应状态码(Response Status Code)、响应头(Response Headers)、响应体(Response Body)。
响应状态码
响应状态码表示服务器的响应状态,
响应头
响应头包含了服务器对请求的应答信息,如Content-Type、Server、Set-Cookie等。
- 常用的头信息
头信息 | 描述 |
---|---|
Date | 标识响应产生的时间; |
Last-Modified | 指定资源的最后修改时间; |
Content-Encoding | 指定响应内容的编码; |
Server | 包含服务器的信息,比如名称、版本号等; |
Content-Type | 文档类型,指定返回的数据类型是什么; |
Set-Cookie | 设置Cookies。响应头中的Set-Cookie告诉浏览器需要将此内容放在Cookies中,下次请求携带Cookies请求; |
Expires | 指定响应的过期时间,可以使代理服务或浏览器将加载的内容更新到缓存中。如果再次访问,就可以直接从缓存中加载,降低服务器负载,缩短加载时间; |
响应体
响应的正文数据都在响应体中。
无状态HTTP
HTTP的无状态是指HTTP协议对事务处理是没有记忆能力的,也就是说服务器不知道客户端是什么状态。当我们向服务器发送请求后,服务器解析此请求,然后返回对应的响应,服务器负责完成这个过程,而且这个过程是完全独立的,服务器不会记录前后状态的变化,也就是缺少状态记录。这意味着如果后续需要处理前面的信息,则必须重传,这导致需要额外传递一些前面的重复请求,才能获取后续响应,然而这种效果显然不是我们想要的。为了保持前后状态,我们肯定不能讲前面的请求全部重传一次,这太浪费资源了,对于这种需要用户登录的页面来说,更是棘手。
这时,两个用于保持HTTP连接状态的技术就出现了,它们分别是会话和Cookies。会话在服务端,也就是网站的服务器,用来保存用户的会话信息;Cookies在客户端,也可以理解为浏览器端,有了Cookies,浏览器在下次访问网页时会自动附带上它发送给服务器,服务器通过识别Cookies并鉴定出是哪个用户,然后再判断用户是否是登录状态,然后返回对应的响应。我们可以理解为Cookies里面保存了登录的凭证,有了它,只需要在下次请求携带Cookies发送请求而不必重新输入用户名、密码等信息重新登录了。
会话
其本来的含义是指有始有终的一系列动作/消息。比如,打电话时,从拿起电话拨号到挂断电话这中间的一系列过程可以成为一个会话。而在Web中,会话对象用来存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在会话对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的Web页时,如果该用户还没有会话,则Web服务器将自动创建一个会话对象。当会话过期或被放弃后,服务器将终止该会话。
Cookies
Cookies是指某些网站为了辨别用户身份、进行会话跟踪而存储在用户本地终端上的数据。
当客户端第一次请求服务器时,服务器会返回一个请求头中带有Set-Cookie字段的响应给客户端,用来标记是哪一个用户,客户端浏览器会把Cookies保存起来。当浏览器下一次再请求该网站时,浏览器会把此Cookies放到请求头一起提交给服务器,Cookies携带了会话ID信息,服务器检查该Cookies即可找到对应的会话是什么,然后再判断会话来以此辨认用户状态。在成功登陆某个网站时,服务器会告诉客户端设置哪些Cookies信息,在后续访问页面时客户端会把Cookies发送给服务器,服务器再找到对应的会话加以判断。如果会话中的某些设置登录状态的变量是有效的,那就证明用户处于登录状态,此时返回登录之后才可以查看的网页内容,浏览器再进行解析便可以看到了。反之,如果传给服务器的Cookies是无效的,或者会话已经过期了,我们将不能继续访问页面,此时可能会收到错误的响应或者跳转到登录页面重新登录。
所以,Cookies和会话需要配合,一个处于客户端,一个处于服务端,二者共同协作,就实现了登录会话控制。
- Cookies属性
属性名 | 描述 |
---|---|
Name | 该Cookie的名称。一旦创建,该名称便不可更改; |
Value | 该Cookie的值。如果值为Unicode字符,需要为字符编码。如果值为二进制数据,则需要使用BASE64编码; |
Domain | 可以访问该Cookie的域名。例如,如果设置为.zhihu.com,则所有以zhihu.com结尾的域名都可以访问该Cookie; |
Max Age | 该Cookie失效的时间,单位为秒,也常和Expires一起使用,通过它可以计算出其有效时间。Max Age如果为正数,则该Cookie在Max Age秒之后失效。如果为负数,则关闭浏览器时Cookie即失效,浏览器也不会以任何形式保存该Cookie; |
Path | 该Cookie的使用路径。如果设置为/path/,则只有路径为/path/的页面可以访问该Cookie。如果设置为/,则本域名下的所有页面都可以访问该Cookie; |
Size | 此Cookie的大小; |
HTTP | Cookie的httponly属性。若此属性为true,则只有在HTTP头中会带有此Cookie的信息,而不能通过document.cookie来访问此Cookie; |
Secure | 该Cookie是否仅被使用安全协议传输。安全协议有HTTPS和SSL等,在网络上传输数据之前先将数据加密。默认为false; |
- 会话Cookie和持久Cookie
从表面意思来说,会话Cookie就是把Cookie放在了浏览器内存中,浏览器在关闭之后该Cookie即失效;持久Cookie则会保存到客户端的硬盘中,下次还可以继续使用,用于长久保持用户登录状态。
其实严格来说,没有会话Cookie和持久Cookie之分,只是由Cookie的Max Age或Expires字段决定了过期的时间。
hrllow world this is the best world!kloopookkkdfsafjkdlfdsakofaisjoiouqwertijoegjjasdfkassdjfl dfhkangjiathe world and you do you like me hello world hello world dsfadsfdasfghjrhlohykangjialuther world hellow worldhellow worlddslpjkmncvqwerqwerqweradklsfklskldaf
- dfghsxhrsyretyewrty5ewty
-
-
-
-
-
-
-
-
-
-
-
-
-
-
---------------the last line for now--------------