zoukankan      html  css  js  c++  java
  • 说一说HTTP

    什么是URI和URL

    URI用字符串标示某一互联网资源,而URL表示资源的地点。可见URL是URI的子集。

    URI要使用涵盖全部必要信息的URI、绝对URL以及相对URL。相对URL是指从浏览器中基本URI处理的URL,来先看下URI的格式

     HTTP请求和响应

    http请求:

    HTTP协议规定,请求从客户端发出,最后服务器端相应该请求并返回。换个意思就是客户端建立通信的,服务器端在没有接收到请求之前不会发送响应。来一个示例:

     

    下面的内容是客户端想服务端发的求求内容

    GET / HTTP/1.1
    HOST: HACKR.JP

    起始行的get表示请求访问服务器的类型,成为方法。随后的字符串指明了请求访问的资源对象,也叫请求URL,后面是版本号,用来提示客户端使用的HTTP协议功能

    下面来看一下请求部分的结构:

    总结:请求报文是由请求方法、请求URL、协议版本、可选的气你去头和内容实体构成的。

     http响应:

    接下来服务器端接收到请求,会将请求内容的处理结果以相应的形式返回。

    HTTP /1.1 200 OK
    Date:Tue,10 JUL 2016 10:50:20 GMT
    Content-length:398
    Content-Type:text/html

    来用图片详细讲解一下:

     

    HTTP方法

    下表是HTTP/1.1和1.0支持的方法:

    状态码类别:

    经常使用的HTTP状态码:

    200 OK:表示从客户端发来的请求在服务器端被正常处理了。 

    204 No Content:该状态码代表服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分。 

    206 Partial Content:该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的 GET 请求。

    301 Moved Permanently:永久性重定向。该状态码表示请求的资源已被分配了新的 URI,以后应使用资源现在所指的 URI。

    302 Found:临时性重定向。

    303 See Other:该状态码表示由于请求对应的资源存在着另一个 URI,应使用 GET方法定向获取请求的资源。

    304 Not Modified:该状态码表示客户端发送附带条件的请求 A 时,服务器端允许请求访问资源,但因发生请求未满足条件的情况后,直接返回 304 NotModified。

    400 Bad Request:该状态码表示请求报文中存在语法错误。当错误发生时,需修改请求的内容后再次发送请求。

    401 Unauthorized:该状态码表示发送的请求需要有通过 HTTP 认证(BASIC 认证、DIGEST 认证)的认证信息。

    403 Forbidden:该状态码表明对请求资源的访问被服务器拒绝了。

    404 Not Found:该状态码表明服务器上无法找到请求的资源。 

    500 Internal Server Error:该状态码表明服务器端在执行请求时发生了错误。 

    503 Service Unavailable:该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。 

    curl的用法 

    curl命令是一个功能强大的网络工具,它能够通过http、ftp等方式下载文件,也能够上传文件。

    centos下安装curl:yum -y install curl

    语法:# curl [option] [url]
    -A/--user-agent <string>              设置用户代理发送给服务器
    -b/--cookie <name=string/file>    cookie字符串或文件读取位置
    -c/--cookie-jar <file>                    操作结束后把cookie写入到这个文件中
    -C/--continue-at <offset>            断点续转
    -D/--dump-header <file>              把header信息写入到该文件中
    -e/--referer                                  来源网址
    -f/--fail                                          连接失败时不显示http错误
    -o/--output                                  把输出写到该文件中
    -O/--remote-name                      把输出写到该文件中,保留远程文件的文件名
    -r/--range <range>                      检索来自HTTP/1.1或FTP服务器字节范围
    -s/--silent                                    静音模式。不输出任何东西
    -T/--upload-file <file>                  上传文件
    -u/--user <user[:password]>      设置服务器的用户和密码
    -w/--write-out [format]                什么输出完成后
    -x/--proxy <host[:port]>              在给定的端口上使用HTTP代理
    -#/--progress-bar                        进度条显示当前的传送状态

    1.基本的用法:

    获取baidu首页的html

    [root@izwz9153blo8ykx72yws77z ~]# curl www.baidu.com   

     可以使用curl的内置option:-o(小写)保存网页

    [root@izwz9153blo8ykx72yws77z ~]# curl -o index.html www.baidu.com
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100  2381  100  2381    0     0  34695      0 --:--:-- --:--:-- --:--:-- 35014

     指定proxy服务器以及其端口

    curl -x 192.168.100.100:1080 http://www.linux.com

     模仿浏览器

    curl -A "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.0)" http://www.linux.com

    伪造referer(盗链)

    curl -e "www.linux.com" http://mail.linux.com

     模拟POST请求

    curl -d "param1=value1&param2=value2" "http://www.baidu.com"

    json格式的post请求

    curl -l -H "Content-type: application/json" -X POST -d '{"phone":"13521389587","password":"test"}' http://domain/apis/users.json

    以上。

  • 相关阅读:
    ffmpeg mp3转ogg的命令
    四个很好的开源app项目
    iOS 开发者必不可少的 75 个工具
    几点iOS开发技巧
    100 Most Influential Books According to Stack Overflow
    iOS图形处理和性能(转)
    Objc的底层并发API(转)
    GCD CoreData 简化CoreData操作(转)
    微信扫一扫背后的秘密:基于运动估计的智能传图算法(转)
    Objective-C 的 API 设计(转)
  • 原文地址:https://www.cnblogs.com/liubinsh/p/8590495.html
Copyright © 2011-2022 走看看