uri与url的区别简单理解(URI和URL简介)
HTTP:超文本传输协议。
作用是把超文本数据从网络传输到本地浏览器,能够保证高效而准确地传输超文本文档。
HTTPS:是以安全为目标的HTTP通道,简单讲就是HTTP的安全版,在HTTP下加入SSL层,简称HTTPS。
HTTPS的安全基础是SSL,因此通过该协议传输的内容都是结果SSL加密的。
SSL主要作用有以下两种:
- 建立一个信息安全通道,保证数据传输的安全。
- 确认网站的安全性。凡是使用了HTTPS协议的网站,都可以通过浏览器地址栏的锁头标志来查看网站认证之后的真实信息。此外还可以通过CA机构颁发的安全签章来查询。
1.对www.baidu.com这个网址进行DNS域名解析,得到对应的IP地址
2.根据这个IP,找到对应的服务器,发起TCP的三次握手
3.建立TCP连接后发起HTTP请求
4.服务器响应HTTP请求,浏览器得到HTML代码
5.浏览器解析html代码,并请求html代码中的资源(如js、css图片等)(先得到html代码,才能去找这些资源)
6.浏览器对页面进行渲染呈现给用户
访问百度,快捷键F12,打开浏览器的开发者工具(没有则使用F5进行刷新):
各列含义:
第一列 Name:请求的名称。一般会用URL的最后一部分内容作为名称。
第二列 Status:响应的状态码。这里显示为200,表达响应是正常的。通过状态码,我们可以判断发送请求之后是否得到正常的响应。
第三列 Type:请求的文档类型。这里为document,代表我们这次请求的是一个HTML文档,内容是一些HTML代码。
第四列 Initiator:请求源。用来标记请求是由哪个对象或进程发起的。
第五列 Size:从服务器下载的文件或请求的资源大小,如果资源是从缓存中取得的,则该列会显示from cache。
第六列 Time:从发起请求的到获取响应所花的总时间。
第七列 Waterfall:网络请求的可视化瀑布流。
单击第一列Name的第一行www.baidu.com,可得到更详细的信息:
General部分:
Request URL:为请求的URL
Request Method:为请求的方法
Status Code:为响应状态码
Remote Addres:远程服务器的地址和端口
Referrer Policy:为Referrer判别策略
Response Headers:响应头
包含服务器的类型、文档类型、日期等信息,浏览器在接收到响应后,会对其进行解析,进而呈现网页的内容。
Request Headers:请求头
包含请求信息,如浏览器标识,Cookie、Host等信息。服务器会根据请求头的信息判断请求是否合法,进而做出对应的响应。
4. 请求请求,英文名为Request
由客户端发往服务器,分为四个部分:
- 请求方法(Request Method)
- 请求的网址(Request URL)
- 请求头(Request Headers)
- 请求体(Request Body)
请求方法:
请求方法,用于标识请求客户端请求服务端的方式,常见的请求方式有两种:GET和POST。
- GET请求 示例:百度搜索Python就是一个GET请求,链接为https://www.baidu.com/s?wd=Python,其中URL中包含了请求的query信息,这里的参数wd表示要搜寻的关键字。
- POST请求 示例:POST请求大多在提交表单时发起。例如,对于一个登录表单,输入用户名和密码后,单击“登录”按钮,这时通常会发起一个POST请求,其数据通常以表单的形式传输,而不会体现在URL中。
GET和POST请求方法的区别:
- GET请求中的参数包含在URL里面,数据可以在URL中看到;而POST请求的URL不会包含这些数据,数据都是通过表单形式传输的,会包含在请求体中。
- GET请求提交的数据最多只有1024字节,POST则没有限制。
登录时一般需要用户名和密码,其中密码是敏感信息,如果使用GET请求,则会暴露在URL里面,所以这时候使用POST方式发送。
上传文件时,由于文件内容比较大,因此也可以使用POST方式。
其它请求方法:
方法 |
描述 |
GET |
请求网页,并返回页面内容 |
POST |
大多用于提交表单或上传文件,数据包含在请求体中 |
HEAD |
类似于GET请求,只不过返回的响应中没有具体的内容,用于获取报头 |
PUT |
用客户端传向服务器的数据取代指定文档中的内容 |
DELETE |
请求服务器删除指定的网页 |
CONNECT |
把服务器当作跳板,让服务器代替客户端访问其他网页 |
OPTIONS |
允许客户端查看服务器的性能 |
TRACE |
回显服务器收到的请求。主要用于测试或诊断 |
请求网址:
请求的网址,它可以唯一确定客户端想请求的资源。
请求头:
请求头,用于说明服务器要使用的附加信息,比较重要的信息要Cookit,Referer,User-Agent等。
常用请求头信息:
- Accept:请求报头域,用于指定客户端可接收哪些类型的信息。
- Accept-Language:用于指定客户端可接收的语言类型。
- Accept-Encoding:用于指定客户端可接收的内容编码。
- Host:用于指定请求资源的主机IP和端口号,其内容为请求URL的原始服务器或网关的位置。
- Cookit:常用复数形式Cookies,这是网站为了辨别用户,进行会话跟踪而存储在用户本地的数据。它主要功能是维持当前访问会话。
- Referer:用于标识请求是从哪个页面发过来的,服务器可以拿到这一信息并做相应的处理,如做来源统计、防盗链处理等。
- User-Agent:简称UA,这是一个特殊的字符串头,可以使服务器识别客户端使用的操作系统及版本、浏览器及版本等信息。做爬虫时如果加上此信息,可以伪装为浏览器;如果不加,可能会被识别出来。
- Content-Type:也叫互联网媒体类型或者MIME类型,在HTTP协议消息头中,它用来表示请求中的媒体类型信息。例如:test/html代表HTML格式,image/gif代表GIF图片,application/JSON代表JSON类型。
请求头是请求的主要组成部分,在写爬虫时,通常都需要设定请求头。
请求体:
请求体,一般承载的内容是POST请求中的表单数据,对于GET请求,请求体为空。
例如,登录Github时捕获到的请求和响应
登录之前需先填写用户名和密码信息,登录是会以表单数据的形式提交给服务器,此时需要注意的是Request Headers中指定Content-Type设置为application/json来提交JSON数据,或者设置为multipart/form-data来上传文件。
Content-Type和POST提交数据方式的关系:
Content-Type |
提交数据的方式 |
application/x-www-form-urlencoded |
表单数据 |
multipart/form-data |
表单文件上传 |
application/json |
序列化JSON数据 |
text/xml |
XML数据 |
在爬虫中,构造POST请求需要使用正确的Content-Type,并了解设置各种请求库的各个参数时使用的都是哪种,如若不然可能导致POST提交后无法得到正常的响应。
5. 响应响应,即Response,有服务器返回客户端,可以分为三个部分:
响应状态码、响应头、响应体
- 响应状态码响应状态码,表示服务器的响应状态,如200,代码服务器表示正常响应
常见的错误状态码及错误原因:
状态码 |
说明 |
详情 |
100 |
Continue |
继续。客户端应继续其请求 |
101 |
Switching Protocols |
切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议 |
200 |
OK |
请求成功。一般用于GET与POST请求 |
201 |
Created |
已创建。成功请求并创建了新的资源 |
202 |
Accepted |
已接受。已经接受请求,但未处理完成 |
203 |
Non-Authoritative Information |
非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本 |
204 |
No Content |
无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档 |
205 |
Reset Content |
重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域 |
206 |
Partial Content |
部分内容。服务器成功处理了部分GET请求 |
300 |
Multiple Choices |
多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择 |
301 |
Moved Permanently |
永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替 |
302 |
Found |
临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI |
303 |
See Other |
查看其它地址。与301类似。使用GET和POST请求查看 |
304 |
Not Modified |
未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源 |
305 |
Use Proxy |
使用代理。所请求的资源必须通过代理访问 |
306 |
Unused |
已经被废弃的HTTP状态码 |
307 |
Temporary Redirect |
临时重定向。与302类似。使用GET请求重定向 |
400 |
Bad Request |
客户端请求的语法错误,服务器无法理解 |
401 |
Unauthorized |
请求要求用户的身份认证 |
402 |
Payment Required |
保留,将来使用 |
403 |
Forbidden |
服务器理解请求客户端的请求,但是拒绝执行此请求 |
404 |
Not Found |
服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面 |
405 |
Method Not Allowed |
客户端请求中的方法被禁止 |
406 |
Not Acceptable |
服务器无法根据客户端请求的内容特性完成请求 |
407 |
Proxy Authentication Required |
请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权 |
408 |
Request Time-out |
服务器等待客户端发送的请求时间过长,超时 |
409 |
Conflict |
服务器完成客户端的 PUT 请求时可能返回此代码,服务器处理请求时发生了冲突 |
410 |
Gone |
客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置 |
411 |
Length Required |
服务器无法处理客户端发送的不带Content-Length的请求信息 |
412 |
Precondition Failed |
客户端请求信息的先决条件错误 |
413 |
Request Entity Too Large |
由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息 |
414 |
Request-URI Too Large |
请求的URI过长(URI通常为网址),服务器无法处理 |
415 |
Unsupported Media Type |
服务器无法处理请求附带的媒体格式 |
416 |
Requested range not satisfiable |
客户端请求的范围无效 |
417 |
Expectation Failed |
服务器无法满足Expect的请求头信息 |
500 |
Internal Server Error |
服务器内部错误,无法完成请求 |
501 |
Not Implemented |
服务器不支持请求的功能,无法完成请求 |
502 |
Bad Gateway |
作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应 |
503 |
Service Unavailable |
由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中 |
504 |
Gateway Time-out |
充当网关或代理的服务器,未及时从远端服务器获取请求 |
505 |
HTTP Version not supported |
服务器不支持请求的HTTP协议的版本,无法完成处理 |
- 响应头响应头,包含服务器对请求的应答信息,如Conntent-Type,Server,Set-Cookit等。
常用响应头信息:
应答头 |
说明 |
Date |
当前的GMT时间。你可以用setDateHeader来设置这个头以避免转换时间格式的麻烦。 |
Last-Modified |
文档的最后改动时间。客户可以通过If-Modified-Since请求头提供一个日期,该请求将被视为一个条件GET,只有改动时间迟于指定时间的文档才会返回,否则返回一个304(Not Modified)状态。Last-Modified也可用setDateHeader方法来设置。 |
Content-Type |
表示后面的文档属于什么MIME类型。Servlet默认为text/plain,但通常需要显式地指定为text/html。由于经常要设置Content-Type,因此HttpServletResponse提供了一个专用的方法setContentType。 |
Server |
服务器名字。Servlet一般不设置这个值,而是由Web服务器自己设置。 |
Content-Type |
表示后面的文档属于什么MIME类型。Servlet默认为text/plain,但通常需要显式地指定为text/html。由于经常要设置Content-Type,因此HttpServletResponse提供了一个专用的方法setContentType。 |
Set-Cookie |
设置和页面关联的Cookie。Servlet不应使用response.setHeader("Set-Cookie", ...),而是应使用HttpServletResponse提供的专用方法addCookie。参见下文有关Cookie设置的讨论。 |
Expires |
应该在什么时候认为文档已经过期,从而不再缓存它? |
响应体:
响应的正文数据都存在于响应体中,爬虫请求网页时,要解析的内容就是响应体。
6. HTTP 2.0通过支持完整的请求与响应复用来减少延迟,并通过有效压缩HTTP请求头字段的方式将协议开销降至最低,同时之家对请求优先级和服务其推送的支持。
- 二进程分帧层HTTP 2.0将文本格式修改成二进制格式,使得解析更高效。同时将请求和响应数据切割为更小的帧,并采用二进制编码。
- 多路复用HTTP 2.0不再以TCP连接的方式实现多路并行,客户端和服务器可以将HTTP消息分解为互不依赖的帧,然后交错发送,最后在另一端呈现组装起来。
- 控制流控制流是一种阻止发送方向接收方发送大量数据的机制,以免超出后者的需求和处理能力。
- 服务端推送HTTP 2.0,服务器可以对一个客户端请求发送多个响应。可以发送额外资源,无须客户端明确的请求。如果明确有一些资源是客户度需求的,可以提前发送资源,这样可以减少延迟时间。
,
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com