标签: httpserver

TIdHTTPServer是否与Microsoft BITS兼容

我们正在尝试使用TIdHTTPServer组件为我们的软件编写更新服务器.目前我们正在提供一个XML文件,列出可用的更新及其文件版本等.当客户端程序找到更新版本时,它应该开始使用BITS下载它.

现在这是我们遇到问题的地方,我们的程序正在请求XML文件并看到有可用的更新.然后它创建一个BITS作业来下载它,但是BITS一直报告下载失败.我们可以使用相同的URL和IE/Firefox/Chrome下载文件.

所以我的问题:

TIdHTTPServer与BITS兼容吗?

我问这个,因为我发现有一些工作的下载要求.
BITS下载的HTTP要求

BITS支持HTTP和HTTPS下载和上传,并要求服务器支持HTTP/1.1协议.对于下载,HTTP服务器的Head方法必须返回文件大小,其Get方法必须支持Content-Range和Content-Length标头.因此,除非ASP,ISAPI或CGI脚本支持Content-Range和Content-Length标头,否则BITS仅传输静态文件内容并在尝试传输动态内容时生成错误.

BITS可以使用HTTP/1.0服务器,只要它符合Head和Get方法要求即可.

要支持下载文件范围,服务器必须支持以下要求:

允许MIME标头包含标准的Content-Range和Content-Type标头,以及最多180个字节的其他标头.在HTTP标头和第一个边界字符串之间最多允许两个CR/LF.

delphi http indy httpserver microsoft-bits

10
推荐指数
2
解决办法
1507
查看次数

奇怪的JQuery错误"代码501,消息不支持的方法选项"

我正在学习JQuery Get方法.我启动了一个Python HTTP服务器:

(只需键入命令" Python -m SimpleHTTPServer ").

只需在我的网络浏览器上访问"http:// localhost:80"即可测试此网络服务器.但是,当我写这个非常简单的JavaScript来访问我的网络服务器.我收到一条错误消息:

"代码501,消息不支持的方法('OPTIONS')"

我使用jquery.xdomainajax.js库,假设跨域请求JQuery.

这是我的javascript代码:

<html>
<head>
<script src="jquery.min.js"></script>
<script src="jquery.xdomainajax.js"></script>
<script type="text/javascript">
$(document).ready(function(){ 
  u = 'http://localhost:80';
 jQuery.get(u, function(res){       
    $("#data").html(res.responseText)
});
});


</script>
</head>
<body>
<p id="data"></p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

实际上,如果我将您更改为任何其他网址,例如"http://www.google.ca".它运作得很好.但我不知道为什么它不适用于基本的Python HTTP服务器.谁能帮我?

javascript python jquery http httpserver

10
推荐指数
1
解决办法
2万
查看次数

node js侦听简单httpserver的EADDRINUSE错误

我有简单的节点js http服务器.

var http = require("http");

http.createServer(function(request, response) {
  response.writeHead(200, {"Content-Type": "text/plain"});
  response.write("Hello World");
  response.end();
}).listen(8888);
Run Code Online (Sandbox Code Playgroud)

如果我跑

node basicserver.js 
Run Code Online (Sandbox Code Playgroud)

我明白了

node.js:201
        throw e; // process.nextTick error, or 'error' event on first tick
              ^
Error: listen EADDRINUSE
    at errnoException (net.js:642:11)
    at Array.0 (net.js:743:26)
    at EventEmitter._tickCallback (node.js:192:40)
Run Code Online (Sandbox Code Playgroud)

我看过这篇文章,但该帖子似乎是特定于TCP服务器而不是http服务器.有谁可以帮忙.

httpserver node.js

10
推荐指数
2
解决办法
2万
查看次数

目标C:[ClassName self]是什么; 做?

我正在查看CocoaHTTPServer项目的源代码,更具体地说是HTTPServer.m文件,我只是不明白这一行:

connectionClass = [HTTPConnection self];
Run Code Online (Sandbox Code Playgroud)

这是做什么的(它在任何地方记录)?它甚至如何编译?不应该

connectionClass = [HTTPConnection class];
Run Code Online (Sandbox Code Playgroud)

class objective-c class-method httpserver

10
推荐指数
1
解决办法
1245
查看次数

HTTP/1.1对多个范围的响应

在编写我的HTTP/1.1服务器时,我遇到了处理多个范围请求的问题.

RFC 2616的第14.35.1节引用了一些示例,但没有说明服务器行为.例如:

GET /some/resource HTTP/1.1
...
Range: bytes=200-400,100-300,500-600
...
Run Code Online (Sandbox Code Playgroud)

我应该返回这个确切的字节序列吗?或者我应该合并所有范围,发送100-400,500-600?或者在两者之间发送,100-600

最糟糕的是,当检查Content-Range响应头(第14.16节)时,可能只返回一个范围,所以我想知道服务器如何响应第14.35.1节中的示例bytes=0-0,-1!

我的服务器应如何处理此类请求?

http http-1.1 rfc2616 httpserver

10
推荐指数
1
解决办法
4655
查看次数

SimpleHTTPServer作为线程启动:不守护进程

我想SimpleHTTPServer在一个单独的线程中启动一个,同时time.sleep(100)在主要的一个中执行其他操作(此处).以下是我的代码的简化示例:

from SimpleHTTPServer import SimpleHTTPRequestHandler
from BaseHTTPServer import HTTPServer

server = HTTPServer(('', 8080), SimpleHTTPRequestHandler)
print 'OK UNTIL NOW'
thread = threading.Thread(target = server.serve_forever())
print 'STUCK HERE'
thread.setdaemon = True
try:
    thread.start()
except KeyboardInterrupt:
    server.shutdown()
    sys.exit(0)

print 'OK'

time.sleep(120)
Run Code Online (Sandbox Code Playgroud)

但是,该线程仍然是"阻塞",即不作为守护进程启动,并且解释器无法到达print 'OK'.它既没有达到STUCK HERE.

我已经知道线程只会在调用时被初始化,threading.Thread(...)并且主线程仍然会更进一步,直到找到thread.start启动它的指令.

有没有更好的方法来完成这项任务?

python httpserver

10
推荐指数
1
解决办法
8465
查看次数

针对不同请求方法的Java httpServer基本身份验证

我在Java中使用一个非常简单的httpServer来进行GET,POST,PUT和DELETE的api休息.我正在使用基本身份验证,我有几个类Authentication.java和Authorisation.java,我用它来验证和检查用户的权限.

所以,问题是我希望所有用户(经过身份验证)能够从我的api休息中获取信息,但只有具有某些特权的用户才能进行POST,PUT和DELETE.那我该怎么办呢?

这就是我得到的

public class Server {

  private static HttpServer server;

  public static void start() throws IOException {

    server = HttpServer.create(new InetSocketAddress(8000), 0);
    HttpContext ctx = server.createContext("/users", new UserHandler());
    ctx.setAuthenticator(new ApiRestBasicAuthentication("users"));

    server.start();
  }

}
Run Code Online (Sandbox Code Playgroud)

这是我的ApiRestBasicAuthentication

public class ApiRestBasicAuthentication extends BasicAuthenticator {

  private UserAuthentication authentication = new UserAuthentication();

  public ApiRestBasicAuthentication(String realm) {
    super(realm);
  }

  @Override
  public boolean checkCredentials(String user, String pwd) {
    int authCode = authentication.authenticate(user, pwd);
    return authCode == UserAuthentication.USER_AUTHENTICATED;
  }

}
Run Code Online (Sandbox Code Playgroud)

现在,检查凭据仅检查用户是否经过身份验证.但我想检查一下,如果方法是POST,DELETE或PUT,我还应检查具体的凭据.但是如何在ApiRestBasicAuthentication中获取该方法?我在我的处理程序类中这样做

public void handle(HttpExchange httpExchange) throws IOException { …
Run Code Online (Sandbox Code Playgroud)

java rest basic-authentication httpserver

10
推荐指数
1
解决办法
882
查看次数

如何在Web服务的Java HttpsServer实现中获取客户端证书?

我使用Sun Ws实现编写了一个Web服务服务器,并使用HttpsServer进行发布(TLS相互身份验证).

        httpServer=HttpsServer.create(...);
        ssl=SSLContext.getInstance("TLS");
        ...
        ssl.init(keyFactory.getKeyManagers(),trustFactory.getTrustManagers(),new SecureRandom());
        configurator=new HttpsConfigurator(ssl) {
           public void configure (HttpsParameters params) 
           {
               SSLContext context; 
               SSLParameters sslparams;

               context=getSSLContext();
               sslparams=context.getDefaultSSLParameters();
               sslparams.setNeedClientAuth(true);
               params.setSSLParameters(sslparams);
           }
       }; 
       ((HttpsServer)httpServer).setHttpsConfigurator(configurator);
       ...
       endPoint=getSunWsProvider().createEndPoint(...);
       httpContext=httpServer.createContext(...);
       endPoint.publish(httpContext);
       httpServer.start();
       ...
Run Code Online (Sandbox Code Playgroud)

一切正常.当客户端执行Web服务的服务器端实现时,我想知道哪个客户端正在执行代码(以管理权限).知道每个客户端都有自己的证书,如何在Web服务调用之前获取用于TLS协商的客户端证书?(我更愿意找到基于客户端证书分析的解决方案,而不是为每个Web服务调用添加标识信息).

谢谢您的帮助.

java authentication web-services certificate httpserver

9
推荐指数
1
解决办法
1451
查看次数

我可以并行创建Java HttpServer线程/进程请求吗?

我已经使用Sun的轻量级HttpServer在线发现了一个简单的HttpServer.

基本上主要功能如下:

public static void main(String[] args) throws Exception {
        HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0);
        //Create the context for the server.
        server.createContext("/", new BaseHandler());

        server.setExecutor(null); // creates a default executor
        server.start();
    }
Run Code Online (Sandbox Code Playgroud)

我已经实现了BaseHandler接口的方法来处理Http请求并返回响应.

static class BaseHandler implements HttpHandler {
        //Handler method
        public void handle(HttpExchange t) throws IOException {

          //Implementation of http request processing
          //Read the request, get the parameters and print them
          //in the console, then build a response and send it back.
        }
  }
Run Code Online (Sandbox Code Playgroud)

我还创建了一个通过线程发送多个请求的客户端.每个线程将以下请求发送到服务器:

HTTP://本地主机:8000/[上下文] INT ="+线程ID …

java httpserver

9
推荐指数
1
解决办法
1万
查看次数

为本地 http 服务器启用 CORS

我使用 http 服务器托管本地文件。只需使用以下命令在我的 Mac HTTP 服务器上安装:

npm install --global http-server
Run Code Online (Sandbox Code Playgroud)

然后我使用以下命令在所需目录中启动该服务器:

http-server
Run Code Online (Sandbox Code Playgroud)

当我尝试从 HTTP 服务器响应获取本地 HTML 文件时,遇到了 CORS 策略问题。它被阻止了。 被 CORS 政策阻止

macos httpserver cors

9
推荐指数
1
解决办法
2万
查看次数