zoukankan      html  css  js  c++  java
  • URL

    URL和URI

    • URI:Uniform Resource Identifier,唯一标识一个网络资源
    • URL:Uniform Resource Locator,指向网络资源地址

    URL是URI的子集,只有提供了访问机制(http:// or ftp://)的URI才是URL。

    通常URL是绝对路径,URI可以是相对或绝对路径。

    趣解url和uri

    URL标准格式:scheme://host[:port#]/path/.../[;url-params][?query-string][#anchor]

    scheme //有我们很熟悉的http、https、ftp以及著名的ed2k,迅雷的thunder等。
    host   //HTTP服务器的IP地址或者域名
    port#  //HTTP服务器的默认端口是80,这种情况下端口号可以省略。如果使用了别的端口,必须指明,例如tomcat的默认端口是8080 http://localhost:8080/
    path   //访问资源的路径
    url-params  //所带参数
    query-string    //发送给http服务器的数据
    anchor //锚点定位  

    URL详解 中,文中安利了一种解析URL各部分的方法,以备不时之需,赞!

    转义处理

    URL中特殊符号对应的十六进制编码

    +:URL 中+号表示空格, %2B   
    空格:URL中的空格可以用+号或者编码, %20   
    /:分隔目录和子目录, %2F    
    ?:分隔实际的URL和参数, %3F    
    %:指定特殊字符, %25    
    #:表示书签, %23    
    &:URL中指定的参数间的分隔符, %26    
    =:URL中指定参数的值, %3D  
    

    利用.Net中提供的 QueryString 方法,可以获取指定参数的值

    HttpRequest.Request.QueryString["foo"]
    

    该方法会将被转义的字符还原成原字符。

    关于HtmlEncoe

    将html源文件中不容许出现的字符进行编码,通常是编码以下字符:"<"、">"、"&"、"""、"'"等。

    注意,Server、HttpServerUtility实体类、HttpUtility三者的HtmlEncode方法本质一样。

    网址编码

    JavaScript中编码方法

    • escape:不建议使用
    • encodeURI:用于对网址编码,但不包含参数,不对冒号(:)、斜杠(/)编码
    • encodeURIComponent:用于对URI中(指定)的参数编码,对空格,井号(#),斜线(/),冒号(:)都编码
    // encodeURI
    http://www.cnblogs.com/a file with spaces.html"
    http://www.cnblogs.com/a%20file%20with%20spaces.html
    
    // encodeURIComponent
    http://www.cnblogs.com/?key="+encodeURIComponent(param)+"&page=1
    http://www.cnblogs.com/?key=%E5%8D%9A%E5%AE%A2%E5%9B%AD&page=1
    

    .Net中编码方法

    • Server.UrlEncode,HttpUtility.UrlEncode:不推荐,因为会对冒号(:)和斜杠(/)编码
    • Uri.EscapeUriString:用于对网址编码,但不包含参数,不对井号(#)、冒号(:)、斜杠(/)编码,类似JavaScript中的encodeURI方法
    • Uri.EscapeDataString:用于对URI中(指定)的参数编码,对冒号(:)、斜杠(/)、空格、井号(#)都编码,类似JavaScript中的encodeURIComponent方法

    具体参见:从此不再惧怕URI编码:JavaScript及C# URI编码详解

    Request.UrlReferrer

    获取客户端上次请求的url的有关信息,具体参见:C# Request获取url

    此处,给出几个应该注意的问题

    • 点击刷新按钮不会改变Request.UrlReferre,页面回发后会改变Request.UrlReferrer将其指向当前页面
    • “上一次”的url可能不存在(比如,直接地址栏输入当前页面链接),使用前需进行null判断
    • 上一页使用document.location方法或在Page_Load事件中Response.Redirect/Server.Transfer方式导航到当前页面,Request.UrlReferrer返回空值
    • 使用<a href>跳转,Request.UrlReferrer正常取值

    https://blog.csdn.net/zhangzhentao/article/details/999029window.showModalDialog()问题

    Fiddler

    抓包工具,web代理服务器形式

    • 截获、重发、编辑、转存(查看不同终端上送的UserAgent信息)
    • 流量检测

    将 Wi-Fi设置代理为本地的 ip和 port,port同 fiddler设置一样的。

    具体参见:Fiddler工具介绍Fiddler抓包总结Fiddler学习

    UserAgent

    前面提及到 UserAgent,借此了解下

    只读字符串,格式:navigator.userAgent = navigator.appCodeName/navigator.appVersion

    身份验证,用于服务器识别客户端操作系统、浏览器版本等,UA字符串在每次浏览器HTTP请求时发送到服务器,传递APP的基础环境信息。

    项目中遇到的一个UserAgent示例如下,当时的场景问题可参见:https://www.cnblogs.com/wjcx-sqh/p/9643047.html

    MPBank/6.5.0 Android/8.0.0 AID/unNw0BpDFADZBxNmufXsIsSiuic= SID/aYIt8Og76a17J9SnAM2B1H5Vm2A= APPTag/1.0(N;1234)
    
    "WeChat/7.0.0":APP版本
    "Android/10.1":操作系统版本
    "AID/3Cjzry0cxDdUGE5C5D2YjawFFcM=":APPID的映射值,只要不卸载APP不会发生变化
    "SID/5u9IBC0FmjV1yn8L9HAdae+/EoA=":APP一次启动的SessionID,APP进程不退出不会再变化,重新启动会改变
    "APPTag/1.0(N;1234)":APPTag用于特定业务标识,1.0表示该字段版本号,一般不变化;N表示当前APP风格为通用版,V表示为尊享版,具体页面根据N或V切换为相应风格;1234目前无意义
    "WebView/WKWebView":iPhone客户端特有标识,表示当前使用的浏览器是WKWebView

    不同客户端浏览器的UserAgent参数不尽相同,可参见:浏览器userAgent

    探测UserAgent

    • Fiddler抓包
    • chrome://version/
    • F12 --> network -->  name -->Headers

    其他工具

    Paros

    Web应用漏洞评估工具

    • HTTP会话分析:拦截+修改
    • 网络爬虫
    • 漏洞扫描

    A Java based HTTP/HTTPS proxy for assessing web application vulnerability.

    Postman

    参见:Postman | 果冻想

    Wireshark

    近期post调用一个http核查服务,偶然间出现 操作超时:Timeout 的问题,经网络室抓包 .cap 在wireshark中打开,遇到的几个问题作下梳理

    [1].Packet size limited during capture

    一文,与数据大小及抓包长度设置有关: packet was bigger than snaplen set, so truncated when capture

    [2].时间Time时间与实际时间相差8小时问题

    在列 Time 上右键选择 Absolute date 并点OK即可

    其他常见提示信息可查看:Packet size limited during capture抓包详解

    问题整理

    IP攻击

    • 一段时间内ip连接数大于一定值则断开该ip所有连接,且拒绝ip一定时间内连接
    • 一段时间内ip连接所发送的数据大于一定值则断开该ip所有连接,且拒绝ip一定时间内连接

    参考:DoS攻击、CC攻击的攻击方式和防御方法

    IIS

    查看日志

    路径:C:inetpublogsLogFiles

    至于是在哪个 W3SVC 文件夹下,通过 站点右键 - 管理网站 - 高级设置 - ID

    IIS管道托管模式

    分为经典模式和集成模式。

    在集成模式中,HTTP模块和HTTP处理程序不再定义于 <system.web> 中,而是定义于 <system.webServer> 中。 

    基本问题解决

    提示:无法访问此网站 localhost 拒绝了我们的连接请求。

    可能原因:一般是默认网站状态没打开

    解决:IIS-网站--Default Web site--重新启动

    WebApi程序调用DB2问题

    [HttpException (0x80004005):未能加载文件或程序集“IBM.Data.DB2”或它的某一个依赖项。试图加载格式不正确的程序。]    
     at System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +12672788
     at System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +159
     at System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +12512141
    

    原因分析:操作系统64位,但发布的程序引用了一些32位的ddl,出现了兼容性的问题

    解决方案:IIS → 应用程序池 → 对应的程序池 → 高级设置 → 启用32位应用程序 :true

    "ExceptionMessage": "SQL1159  Initialization error with DB2 .NET Data Provider,
     reason code 10, tokens 0.0.0, 9.7.9, Process Owner: IIS APPPOOL\WebApi"
    

    错误原因:用户无访问DB2权限。解决方案:

    • Step1:控制面板-管理工具-计算机管理-本地用户和组-组-IIS_IUSERS、DB2ADMNS、DB2USERS,在这三个组中分别添加应用程序池应用程序的名称
    • Step2:以管理员权限重启IIS(注:重启应用程序池无用):以管理员权限打开cmd,执行iisreset命令
  • 相关阅读:
    Http错误代码
    Android View自动生成插件
    【Android】设备标识
    【Android】键盘的展开和收起
    【Android】Activity生命周期(亲测)
    【Android】IntentService & HandlerThread源码解析
    【Android】与服务器实现JSON数据通信
    【Web】Eclipse + Maven + Struts搭建服务器
    【Android】Kill Service
    【Android】Handler、Looper源码分析
  • 原文地址:https://www.cnblogs.com/wjcx-sqh/p/9780678.html
Copyright © 2011-2022 走看看